mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-02 21:00:55 +00:00
41 lines
1.1 KiB
Rust
41 lines
1.1 KiB
Rust
use std::str::FromStr;
|
|
|
|
use anyhow::Result;
|
|
use uuid::Uuid;
|
|
|
|
use krata::idm::internal::MetricsRequest;
|
|
use krata::idm::internal::{
|
|
request::Request as IdmRequestType, response::Response as IdmResponseType,
|
|
Request as IdmRequest,
|
|
};
|
|
use krata::v1::control::{ReadZoneMetricsReply, ReadZoneMetricsRequest};
|
|
|
|
use crate::idm::DaemonIdmHandle;
|
|
use crate::metrics::idm_metric_to_api;
|
|
|
|
pub struct ReadZoneMetricsRpc {
|
|
idm: DaemonIdmHandle,
|
|
}
|
|
|
|
impl ReadZoneMetricsRpc {
|
|
pub fn new(idm: DaemonIdmHandle) -> Self {
|
|
Self { idm }
|
|
}
|
|
|
|
pub async fn process(self, request: ReadZoneMetricsRequest) -> Result<ReadZoneMetricsReply> {
|
|
let uuid = Uuid::from_str(&request.zone_id)?;
|
|
let client = self.idm.client(uuid).await?;
|
|
let response = client
|
|
.send(IdmRequest {
|
|
request: Some(IdmRequestType::Metrics(MetricsRequest {})),
|
|
})
|
|
.await?;
|
|
|
|
let mut reply = ReadZoneMetricsReply::default();
|
|
if let Some(IdmResponseType::Metrics(metrics)) = response.response {
|
|
reply.root = metrics.root.map(idm_metric_to_api);
|
|
}
|
|
Ok(reply)
|
|
}
|
|
}
|