ih_muse_core/
transport.rs

1// crates/ih-muse-core/src/transport.rs
2
3use std::net::SocketAddr;
4
5use async_trait::async_trait;
6
7pub use crate::errors::MuseResult;
8pub use ih_muse_proto::{
9    types::*, ElementKindRegistration, ElementRegistration, MetricDefinition, MetricPayload,
10    MetricQuery, NodeElementRange, NodeState, TimestampResolution,
11};
12
13#[async_trait]
14pub trait Transport {
15    async fn health_check(&self) -> MuseResult<()>;
16    async fn get_node_state(&self) -> MuseResult<NodeState>;
17    async fn get_finest_resolution(&self) -> MuseResult<TimestampResolution>;
18    async fn register_element_kinds(
19        &self,
20        element_kinds: &[ElementKindRegistration],
21    ) -> MuseResult<()>;
22    async fn register_elements(
23        &self,
24        elements: &[ElementRegistration],
25    ) -> MuseResult<Vec<MuseResult<ElementId>>>;
26    async fn get_node_elem_ranges(
27        &self,
28        ini: Option<u64>,
29        end: Option<u64>,
30    ) -> MuseResult<Vec<NodeElementRange>>;
31    async fn register_metrics(&self, payload: &[MetricDefinition]) -> MuseResult<()>;
32    async fn get_metric_order(&self) -> MuseResult<Vec<MetricDefinition>>;
33    async fn get_metrics(
34        &self,
35        query: &MetricQuery,
36        node_addr: Option<SocketAddr>,
37    ) -> MuseResult<Vec<MetricPayload>>;
38    async fn send_metrics(
39        &self,
40        payload: Vec<MetricPayload>,
41        node_addr: Option<SocketAddr>,
42    ) -> MuseResult<()>;
43}