matroskin is an actor-tokio based library for creating tools for ASIC infrastructure. It provides:
- Easy to use Actor system
- Build in commands
- Easy scalable architecture
Marks:
- Ready to use: ✅
- Unstable (do not use it in any ways, only at your own risk):
⚠️ - without marks: not tested, only at your own risk
- get.device.custom_data
- ✅ get.device.info
- set.device.custom_data
- ✅ get.fan.setting
- set.fan.poweroff_cool
- set.fan.temp_offset
- set.fan.zero_speed
- get.log.download
- set.log.upload
- get.miner.history
- get.miner.setting
- get.miner.status
- set.miner.cointype
- ✅ set.miner.fastboot
- set.miner.heat_mode
-
⚠️ set.miner.pools - set.miner.power
- set.miner.power_limit
- set.miner.power_mode
- set.miner.power_percent
- set.miner.report
- set.miner.restore_setting
- set.miner.service
- set.miner.target_freq
- set.miner.upfreq_speed
- ✅ get.system.setting
- set.system.factory_reset
- set.system.hostname
- set.system.led
- set.system.net_config
- set.system.ntp_server
- set.system.reboot
- set.system.time_randomized
- set.system.timezone
- set.system.update_firmware
- set.system.webpools
- set.user.change_passwd
- set.user.permission
[dependencies]
tokio = { version = "1.48.0", features = ["full"] }
matroskin = { version = "0" }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }Then, on your main.rs:
use tracing::Level;
use matroskin::{
account::Account,
actor::Actor,
command::{Command, set_miner_fastboot::SetMinerFastboot},
password::Password,
};
#[tokio::main]
async fn main() {
// Init logger
use tracing_subscriber::FmtSubscriber;
tracing::subscriber::set_global_default(
FmtSubscriber::builder()
.compact()
.with_max_level(level)
.without_time()
.finish(),
).expect("Fail to set global default subscriber");
// Create connection with ASIC
let actor = Actor::new("10.10.10.10:4433", Account::Super, Password::Super).await.expect("fail to establish connection");
// Create command
let command = GetDeviceInfo::default();
// Run command
//
// - First variant (actor execute cmd)
// - Second variant (run cmd using actor)
let response = actor.send(&command).await.expect("fail to execute"); // or let response = cmd.execute(&actor).await.unwrap();
println!("All Device Info: {:#?}", response);
Ok(())