datadog_api/apis/
monitors.rs1use crate::{
2 client::DatadogClient,
3 models::{Monitor, MonitorCreateRequest, MonitorSearchResponse, MonitorUpdateRequest},
4 Result,
5};
6use serde::Serialize;
7
8pub struct MonitorsApi {
10 client: DatadogClient,
11}
12
13impl MonitorsApi {
14 #[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", ¶ms).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", ¶ms)
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}