mirror of
https://github.com/csehviktor/status-monitor.git
synced 2025-08-08 18:06:14 +02:00
36 lines
829 B
Rust
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)
|
|
}
|
|
}
|