redis_enterprise/
debuginfo.rs1use crate::client::RestClient;
9use crate::error::Result;
10use serde::{Deserialize, Serialize};
11use serde_json::Value;
12use typed_builder::TypedBuilder;
13
14#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
16pub struct DebugInfoRequest {
17 #[serde(skip_serializing_if = "Option::is_none")]
19 #[builder(default, setter(strip_option))]
20 pub node_uids: Option<Vec<u32>>,
21 #[serde(skip_serializing_if = "Option::is_none")]
23 #[builder(default, setter(strip_option))]
24 pub bdb_uids: Option<Vec<u32>>,
25 #[serde(skip_serializing_if = "Option::is_none")]
27 #[builder(default, setter(strip_option))]
28 pub include_logs: Option<bool>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 #[builder(default, setter(strip_option))]
32 pub include_metrics: Option<bool>,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 #[builder(default, setter(strip_option))]
36 pub include_configs: Option<bool>,
37 #[serde(skip_serializing_if = "Option::is_none")]
39 #[builder(default, setter(strip_option))]
40 pub time_range: Option<TimeRange>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct TimeRange {
46 pub start: String,
48 pub end: String,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct DebugInfoStatus {
55 pub task_id: String,
57 pub status: String,
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub progress: Option<f32>,
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub download_url: Option<String>,
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub error: Option<String>,
68}
69
70pub struct DebugInfoHandler {
72 client: RestClient,
73}
74
75impl DebugInfoHandler {
76 pub fn new(client: RestClient) -> Self {
78 DebugInfoHandler { client }
79 }
80
81 pub async fn create(&self, request: DebugInfoRequest) -> Result<DebugInfoStatus> {
83 self.client.post("/v1/debuginfo", &request).await
84 }
85
86 pub async fn status(&self, task_id: &str) -> Result<DebugInfoStatus> {
88 self.client.get(&format!("/v1/debuginfo/{}", task_id)).await
89 }
90
91 pub async fn list(&self) -> Result<Vec<DebugInfoStatus>> {
93 self.client.get("/v1/debuginfo").await
94 }
95
96 pub async fn download(&self, task_id: &str) -> Result<Vec<u8>> {
98 self.client
99 .get_binary(&format!("/v1/debuginfo/{}/download", task_id))
100 .await
101 }
102
103 pub async fn cancel(&self, task_id: &str) -> Result<()> {
105 self.client
106 .delete(&format!("/v1/debuginfo/{}", task_id))
107 .await
108 }
109
110 pub async fn all(&self) -> Result<Value> {
113 self.client.get("/v1/debuginfo/all").await
114 }
115
116 pub async fn all_bdb(&self, bdb_uid: u32) -> Result<Value> {
119 self.client
120 .get(&format!("/v1/debuginfo/all/bdb/{}", bdb_uid))
121 .await
122 }
123
124 pub async fn node(&self) -> Result<Value> {
127 self.client.get("/v1/debuginfo/node").await
128 }
129
130 pub async fn node_bdb(&self, bdb_uid: u32) -> Result<Value> {
133 self.client
134 .get(&format!("/v1/debuginfo/node/bdb/{}", bdb_uid))
135 .await
136 }
137
138 pub async fn cluster_debuginfo_binary(&self) -> Result<Vec<u8>> {
143 self.client.get_binary("/v1/cluster/debuginfo").await
144 }
145
146 pub async fn nodes_debuginfo_binary(&self) -> Result<Vec<u8>> {
149 self.client.get_binary("/v1/nodes/debuginfo").await
150 }
151
152 pub async fn node_debuginfo_binary(&self, node_uid: u32) -> Result<Vec<u8>> {
155 self.client
156 .get_binary(&format!("/v1/nodes/{}/debuginfo", node_uid))
157 .await
158 }
159
160 pub async fn databases_debuginfo_binary(&self) -> Result<Vec<u8>> {
163 self.client.get_binary("/v1/bdbs/debuginfo").await
164 }
165
166 pub async fn database_debuginfo_binary(&self, bdb_uid: u32) -> Result<Vec<u8>> {
169 self.client
170 .get_binary(&format!("/v1/bdbs/{}/debuginfo", bdb_uid))
171 .await
172 }
173
174 pub async fn all_binary(&self) -> Result<Vec<u8>> {
179 self.client.get_binary("/v1/debuginfo/all").await
180 }
181
182 pub async fn all_bdb_binary(&self, bdb_uid: u32) -> Result<Vec<u8>> {
185 self.client
186 .get_binary(&format!("/v1/debuginfo/all/bdb/{}", bdb_uid))
187 .await
188 }
189
190 pub async fn node_binary(&self) -> Result<Vec<u8>> {
193 self.client.get_binary("/v1/debuginfo/node").await
194 }
195
196 pub async fn node_bdb_binary(&self, bdb_uid: u32) -> Result<Vec<u8>> {
199 self.client
200 .get_binary(&format!("/v1/debuginfo/node/bdb/{}", bdb_uid))
201 .await
202 }
203}