use crate::types::SystemStatus;
use serde::Deserialize;
const STATUS_QUERY: &str = r#"query {
status {
status dlqSize outboundDlqSize queueDepth activeWorkers totalWorkers uptime version
sourcesTotal destinationsTotal subscriptionsTotal eventsTotal eventsFailed
deliveriesTotal deliveriesPending deliveriesDelivered
messagesTotal outboundDeliveriesTotal outboundDeliveriesPending outboundDeliveriesFailed
}
}"#;
#[derive(Deserialize)]
pub(crate) struct StatusData {
pub(crate) status: SystemStatus,
}
#[cfg(feature = "blocking")]
pub struct StatusService<'a> {
pub(crate) transport: &'a crate::transport::BlockingGraphQLTransport,
}
#[cfg(feature = "blocking")]
impl<'a> StatusService<'a> {
pub fn get(&self) -> Result<SystemStatus, crate::HivehookError> {
let data: StatusData = self.transport.execute(STATUS_QUERY, None)?;
Ok(data.status)
}
}
#[cfg(feature = "async")]
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
pub struct AsyncStatusService<'a> {
pub(crate) transport: &'a crate::transport::AsyncGraphQLTransport,
}
#[cfg(feature = "async")]
impl<'a> AsyncStatusService<'a> {
pub async fn get(&self) -> Result<SystemStatus, crate::HivehookError> {
let data: StatusData = self.transport.execute(STATUS_QUERY, None).await?;
Ok(data.status)
}
}