datadog_api/apis/
monitors.rs

1use crate::{
2    client::DatadogClient,
3    models::{Monitor, MonitorCreateRequest, MonitorSearchResponse, MonitorUpdateRequest},
4    Result,
5};
6use serde::Serialize;
7
8/// API client for Datadog monitors endpoints.
9pub struct MonitorsApi {
10    client: DatadogClient,
11}
12
13impl MonitorsApi {
14    /// Creates a new monitors API client.
15    #[must_use]
16    pub const fn new(client: DatadogClient) -> Self {
17        Self { client }
18    }
19
20    pub async fn list_monitors(&self) -> Result<Vec<Monitor>> {
21        self.client.get("/api/v1/monitor").await
22    }
23
24    pub async fn list_monitors_with_page_size(&self, page_size: i32) -> Result<Vec<Monitor>> {
25        #[derive(Serialize)]
26        struct QueryParams {
27            page_size: i32,
28        }
29
30        let params = QueryParams { page_size };
31
32        self.client.get_with_query("/api/v1/monitor", &params).await
33    }
34
35    pub async fn search_monitors(
36        &self,
37        query: &str,
38        page: Option<i64>,
39        per_page: Option<i64>,
40        sort: Option<&str>,
41    ) -> Result<MonitorSearchResponse> {
42        #[derive(Serialize)]
43        struct QueryParams<'a> {
44            query: &'a str,
45            #[serde(skip_serializing_if = "Option::is_none")]
46            page: Option<i64>,
47            #[serde(skip_serializing_if = "Option::is_none")]
48            per_page: Option<i64>,
49            #[serde(skip_serializing_if = "Option::is_none")]
50            sort: Option<&'a str>,
51        }
52
53        let params = QueryParams {
54            query,
55            page,
56            per_page,
57            sort,
58        };
59
60        self.client
61            .get_with_query("/api/v1/monitor/search", &params)
62            .await
63    }
64
65    pub async fn get_monitor(&self, monitor_id: i64) -> Result<Monitor> {
66        let endpoint = format!("/api/v1/monitor/{}", monitor_id);
67        self.client.get(&endpoint).await
68    }
69
70    pub async fn create_monitor(&self, monitor: &MonitorCreateRequest) -> Result<Monitor> {
71        self.client.post("/api/v1/monitor", monitor).await
72    }
73
74    pub async fn update_monitor(
75        &self,
76        monitor_id: i64,
77        update: &MonitorUpdateRequest,
78    ) -> Result<Monitor> {
79        let endpoint = format!("/api/v1/monitor/{}", monitor_id);
80        self.client.put(&endpoint, update).await
81    }
82
83    pub async fn delete_monitor(&self, monitor_id: i64) -> Result<()> {
84        let endpoint = format!("/api/v1/monitor/{}", monitor_id);
85        self.client.delete(&endpoint).await
86    }
87}