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 #[serde(flatten)]
70 pub extra: Value,
71}
72
73pub struct DebugInfoHandler {
75 client: RestClient,
76}
77
78impl DebugInfoHandler {
79 pub fn new(client: RestClient) -> Self {
80 DebugInfoHandler { client }
81 }
82
83 pub async fn create(&self, request: DebugInfoRequest) -> Result<DebugInfoStatus> {
85 self.client.post("/v1/debuginfo", &request).await
86 }
87
88 pub async fn status(&self, task_id: &str) -> Result<DebugInfoStatus> {
90 self.client.get(&format!("/v1/debuginfo/{}", task_id)).await
91 }
92
93 pub async fn list(&self) -> Result<Vec<DebugInfoStatus>> {
95 self.client.get("/v1/debuginfo").await
96 }
97
98 pub async fn download(&self, task_id: &str) -> Result<Vec<u8>> {
100 self.client
101 .get_binary(&format!("/v1/debuginfo/{}/download", task_id))
102 .await
103 }
104
105 pub async fn cancel(&self, task_id: &str) -> Result<()> {
107 self.client
108 .delete(&format!("/v1/debuginfo/{}", task_id))
109 .await
110 }
111
112 pub async fn all(&self) -> Result<Value> {
115 self.client.get("/v1/debuginfo/all").await
116 }
117
118 pub async fn all_bdb(&self, bdb_uid: u32) -> Result<Value> {
121 self.client
122 .get(&format!("/v1/debuginfo/all/bdb/{}", bdb_uid))
123 .await
124 }
125
126 pub async fn node(&self) -> Result<Value> {
129 self.client.get("/v1/debuginfo/node").await
130 }
131
132 pub async fn node_bdb(&self, bdb_uid: u32) -> Result<Value> {
135 self.client
136 .get(&format!("/v1/debuginfo/node/bdb/{}", bdb_uid))
137 .await
138 }
139
140 pub async fn cluster_debuginfo_binary(&self) -> Result<Vec<u8>> {
145 self.client.get_binary("/v1/cluster/debuginfo").await
146 }
147
148 pub async fn nodes_debuginfo_binary(&self) -> Result<Vec<u8>> {
151 self.client.get_binary("/v1/nodes/debuginfo").await
152 }
153
154 pub async fn node_debuginfo_binary(&self, node_uid: u32) -> Result<Vec<u8>> {
157 self.client
158 .get_binary(&format!("/v1/nodes/{}/debuginfo", node_uid))
159 .await
160 }
161
162 pub async fn databases_debuginfo_binary(&self) -> Result<Vec<u8>> {
165 self.client.get_binary("/v1/bdbs/debuginfo").await
166 }
167
168 pub async fn database_debuginfo_binary(&self, bdb_uid: u32) -> Result<Vec<u8>> {
171 self.client
172 .get_binary(&format!("/v1/bdbs/{}/debuginfo", bdb_uid))
173 .await
174 }
175
176 pub async fn all_binary(&self) -> Result<Vec<u8>> {
181 self.client.get_binary("/v1/debuginfo/all").await
182 }
183
184 pub async fn all_bdb_binary(&self, bdb_uid: u32) -> Result<Vec<u8>> {
187 self.client
188 .get_binary(&format!("/v1/debuginfo/all/bdb/{}", bdb_uid))
189 .await
190 }
191
192 pub async fn node_binary(&self) -> Result<Vec<u8>> {
195 self.client.get_binary("/v1/debuginfo/node").await
196 }
197
198 pub async fn node_bdb_binary(&self, bdb_uid: u32) -> Result<Vec<u8>> {
201 self.client
202 .get_binary(&format!("/v1/debuginfo/node/bdb/{}", bdb_uid))
203 .await
204 }
205}