Files
status-monitor/common/src/mqtt.rs
2025-07-03 06:09:09 +02:00

36 lines
829 B
Rust

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Error;
use crate::metrics::Metrics;
pub const STATUS_TOPIC: &str = "system/metrics";
#[derive(Debug, Serialize, Deserialize)]
pub struct StatusMessage<'a> {
pub agent: &'a str,
pub metrics: Metrics,
pub timestamp: DateTime<Utc>,
}
impl<'a> StatusMessage<'a> {
pub fn new(agent: &'a str, metrics: Metrics) -> Self {
Self {
agent,
metrics,
timestamp: Utc::now(),
}
}
pub fn to_string(&self) -> Result<String, Error> {
serde_json::to_string_pretty(&self)
}
}
impl<'a> TryFrom<&'a [u8]> for StatusMessage<'a> {
type Error = serde_json::Error;
fn try_from(value: &'a [u8]) -> Result<Self, Self::Error> {
serde_json::from_slice(value)
}
}