diff --git a/kiosk/src/axiom.rs b/kiosk/src/axiom.rs index a1a9220..b1c460a 100644 --- a/kiosk/src/axiom.rs +++ b/kiosk/src/axiom.rs @@ -19,6 +19,13 @@ pub struct AxiomLayer { dataset: String, buffer: Arc>>, hostname: String, + kiosk_id: Arc>>, +} + +static GLOBAL_KIOSK_ID: Mutex> = Mutex::new(None); + +pub fn set_kiosk_id(id: String) { + *GLOBAL_KIOSK_ID.lock().unwrap() = Some(id); } impl AxiomLayer { @@ -39,6 +46,7 @@ impl AxiomLayer { dataset, buffer: Arc::new(Mutex::new(Vec::with_capacity(BATCH_SIZE))), hostname, + kiosk_id: Arc::new(Mutex::new(None)), }; let flush_buffer = layer.buffer.clone(); @@ -125,6 +133,10 @@ impl Layer for AxiomLayer { .remove("message") .unwrap_or(serde_json::Value::String(String::new())); + let kiosk_id = GLOBAL_KIOSK_ID.lock().ok() + .and_then(|g| g.clone()) + .unwrap_or_default(); + let entry = serde_json::json!({ "_time": chrono_now(), "level": level, @@ -132,6 +144,7 @@ impl Layer for AxiomLayer { "target": target, "host": self.hostname, "service": "betterframe-kiosk", + "kiosk_id": kiosk_id, "fields": serde_json::Value::Object(fields), }); diff --git a/kiosk/src/server.rs b/kiosk/src/server.rs index ba60c67..24de890 100644 --- a/kiosk/src/server.rs +++ b/kiosk/src/server.rs @@ -271,6 +271,7 @@ fn encrypt_key_file() -> PathBuf { #[derive(Deserialize)] struct ClaimResp { status: String, + kiosk_id: Option, kiosk_key: Option, kiosk_name: Option, cluster_key: Option, @@ -298,6 +299,9 @@ pub fn poll_claim(server: &str, code: &str) -> (String, String) { if claim.status == "claimed" { let key = claim.kiosk_key.expect("missing kiosk_key"); let name = claim.kiosk_name.unwrap_or_else(|| "kiosk".into()); + if let Some(ref id) = claim.kiosk_id { + crate::axiom::set_kiosk_id(id.clone()); + } crate::at_rest::write_encrypted(&key_file(), key.as_bytes()) .expect("failed to save kiosk key"); // Store cluster key for backward compat ONVIF password decryption.