use std::fmt::Error;
use prometheus_client::{
collector::Collector,
encoding::DescriptorEncoder,
metrics::info::Info,
registry::Registry,
};
use serde_with::serde_as;
use crate::{
prometheus_ext::{AsMetrics, EncodeExt},
MikrotikClient,
};
impl MikrotikClient {
#[tracing::instrument(level = "debug", err)]
pub async fn get_identity(&self) -> anyhow::Result<Identity> {
self.get_all("/rest/system/identity").await
}
}
#[serde_as]
#[derive(serde::Deserialize, Debug, Clone)]
#[serde(rename_all = "kebab-case")]
pub struct Identity {
pub name: String,
}
impl AsMetrics for Identity {
fn register_as_metrics(self: Box<Self>, registry: &mut Registry) {
registry.register_collector(self);
}
}
impl Collector for Identity {
fn encode(&self, mut encoder: DescriptorEncoder) -> Result<(), Error> {
Info::new([("identity", self.name.clone())]).encode_e(
&mut encoder,
"identity",
"System/Identity setting from the router",
)
}
}