mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-03 05:10: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)
|
||
|
}
|
||
|
}
|