summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.rs12
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())
}