Skip to main content

canic_core/api/
observability.rs

1//! Module: api::observability
2//!
3//! Responsibility: expose the Root-owned sensitive-observation relay to generated endpoints.
4//! Does not own: caller authorization, target authorization, or metric collection.
5//! Boundary: converts relay failures into the public Canic error contract.
6
7use crate::{
8    dto::{
9        error::Error,
10        observability::{CanisterObservabilityRequest, CanisterObservabilityResponse},
11    },
12    workflow::runtime::observability,
13};
14use candid::Principal;
15
16/// Public façade for the controller-authenticated Root observability relay.
17pub struct ObservabilityApi;
18
19impl ObservabilityApi {
20    /// Return child funding usage without changing grants, reservations or replay state.
21    pub fn child_funding(
22        child: Principal,
23    ) -> Result<crate::dto::observability::ChildFundingUsage, Error> {
24        observability::child_funding(child).map_err(Into::into)
25    }
26
27    /// Observe one canister that independently recognizes this Root as a controller.
28    pub async fn observe_root_controlled_canister(
29        canister_id: Principal,
30        request: CanisterObservabilityRequest,
31    ) -> Result<CanisterObservabilityResponse, Error> {
32        observability::observe_root_controlled_canister(canister_id, request)
33            .await
34            .map_err(Into::into)
35    }
36}