Skip to main content

babelforce_manager_sdk/resources/
logs.rs

1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::configuration::Configuration;
3use crate::gen::manager::apis::manager_api as api;
4use crate::gen::manager::models;
5use crate::http::collect_all;
6use crate::retry::{with_retry, RetryPolicy};
7use crate::token::SharedCfg;
8
9/// Logs — the request audit log (`/api/v2/audit/request`) and the live log (`/api/v2/logs`).
10pub struct LogsResource {
11    pub(crate) cfg: SharedCfg<Configuration>,
12    pub(crate) retry: RetryPolicy,
13}
14
15impl LogsResource {
16    /// Collect every audit-log entry across pages.
17    pub async fn audit_all(&self) -> Result<Vec<models::AuditLog>, ManagerError> {
18        let cfg = self.cfg.get().await?;
19        let cfg = cfg.as_ref();
20        collect_all(&self.retry, map_manager_err, |page| async move {
21            let r = api::list_audit_logs(cfg, None, None, None, Some(page), None, None, None, None)
22                .await?;
23            Ok((r.items, r.pagination.pages, r.pagination.current))
24        })
25        .await
26    }
27
28    /// Read the live log.
29    pub async fn live(&self) -> Result<Vec<models::LiveLog>, ManagerError> {
30        let cfg = self.cfg.get().await?;
31        let cfg = cfg.as_ref();
32        let resp = with_retry(&self.retry, true, || api::list_live_logs(cfg, None))
33            .await
34            .map_err(map_manager_err)?;
35        Ok(resp.items)
36    }
37
38    /// Enable live logging.
39    pub async fn enable_live(&self) -> Result<models::DefaultV2MessageResponse, ManagerError> {
40        let cfg = self.cfg.get().await?;
41        let cfg = cfg.as_ref();
42        with_retry(&self.retry, false, || api::enable_live_logging(cfg))
43            .await
44            .map_err(map_manager_err)
45    }
46
47    /// Disable live logging.
48    pub async fn disable_live(&self) -> Result<models::DefaultV2MessageResponse, ManagerError> {
49        let cfg = self.cfg.get().await?;
50        let cfg = cfg.as_ref();
51        with_retry(&self.retry, false, || api::disable_live_logging(cfg))
52            .await
53            .map_err(map_manager_err)
54    }
55
56    /// Write a single entry to the live log.
57    pub async fn write(
58        &self,
59        body: models::WriteLogRequest,
60    ) -> Result<models::GenericItemResponse, ManagerError> {
61        let cfg = self.cfg.get().await?;
62        let cfg = cfg.as_ref();
63        with_retry(&self.retry, false, || api::write_log(cfg, body.clone()))
64            .await
65            .map_err(map_manager_err)
66    }
67}