diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/main.rs b/src/main.rs index 7d609c2..ac9b3b1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,12 +8,12 @@ use std::collections::HashMap; use std::fs; use std::process; use std::sync::Arc; -use std::sync::Mutex; +use std::sync::RwLock; use std::time::Duration; use tokio::task::{Id, JoinSet}; use tracing::{debug, error, info, warn}; -type StateMap = Arc<Mutex<HashMap<String, PrinterState>>>; +type StateMap = Arc<RwLock<HashMap<String, PrinterState>>>; #[derive(Parser, Debug)] #[command(about = "Print statistics scraper")] @@ -40,7 +40,7 @@ async fn main() { error!(path = %args.config, error = %e, "Failed to parse config file"); process::exit(1); }); - let state: StateMap = Arc::new(Mutex::new(HashMap::new())); + let state: StateMap = Arc::new(RwLock::new(HashMap::new())); let mut tasks = JoinSet::new(); let mut task_names: HashMap<Id, String> = HashMap::new(); @@ -119,7 +119,7 @@ async fn fetch_prusa( .await? .json::<PrusaStatus>() .await?; - let mut lock = state.lock().unwrap(); + let mut lock = state.write().unwrap(); lock.entry(name.to_owned()) .or_default() .update_from(&response); @@ -203,7 +203,7 @@ async fn poll_bambu( debug!(payload = ?p.payload, "Received Bambu payload"); match serde_json::from_slice::<BambuStatus>(&p.payload) { Ok(msg) => { - let mut lock = state.lock().unwrap(); + let mut lock = state.write().unwrap(); lock.entry(name.clone()).or_default().update_from(&msg); debug!(name, payload = ?p.payload, "Updated state"); } @@ -220,5 +220,5 @@ async fn poll_bambu( } async fn root(State(state): State<StateMap>) -> Json<HashMap<String, PrinterState>> { - Json(state.lock().unwrap().clone()) + Json(state.read().unwrap().clone()) } |
