Skip to content

Commit bb24458

Browse files
committed
update /cluster/info endpoint
/cluster/info now returns staging directory path also
1 parent b0fba06 commit bb24458

File tree

1 file changed

+57
-12
lines changed

1 file changed

+57
-12
lines changed

server/src/handlers/http/modal/query_server.rs

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use itertools::Itertools;
3434
use relative_path::RelativePathBuf;
3535
use reqwest::Response;
3636
use serde::{Deserialize, Serialize};
37+
use serde_json::Value as JsonValue;
3738
use std::sync::Arc;
3839
use url::Url;
3940

@@ -194,20 +195,61 @@ impl QueryServer {
194195
let mut infos = vec![];
195196

196197
for ingester in ingester_infos {
197-
let uri = Url::parse(&format!("{}liveness", ingester.domain_name))
198-
.expect("should always be a valid url");
198+
let uri = Url::parse(&format!(
199+
"{}{}/about",
200+
ingester.domain_name,
201+
base_path_without_preceding_slash()
202+
))
203+
.expect("should always be a valid url");
199204

200-
let reqw = reqwest::Client::new()
205+
let resp = reqwest::Client::new()
201206
.get(uri)
207+
.header(header::AUTHORIZATION, ingester.token.clone())
202208
.header(header::CONTENT_TYPE, "application/json")
203209
.send()
204210
.await;
205211

212+
let (reachable, staging_path, error, status) = if let Ok(resp) = resp {
213+
let status = Some(resp.status().to_string());
214+
215+
let resp_data = resp.bytes().await.map_err(|err| {
216+
log::error!("Fatal: failed to parse ingester info to bytes: {:?}", err);
217+
StreamError::Custom {
218+
msg: format!("failed to parse ingester info to bytes: {:?}", err),
219+
status: StatusCode::INTERNAL_SERVER_ERROR,
220+
}
221+
})?;
222+
223+
let sp = serde_json::from_slice::<JsonValue>(&resp_data)
224+
.map_err(|err| {
225+
log::error!("Fatal: failed to parse ingester info: {:?}", err);
226+
StreamError::Custom {
227+
msg: format!("failed to parse ingester info: {:?}", err),
228+
status: StatusCode::INTERNAL_SERVER_ERROR,
229+
}
230+
})?
231+
.get("staging")
232+
.unwrap()
233+
.as_str()
234+
.unwrap()
235+
.to_string();
236+
237+
(true, sp, None, status)
238+
} else {
239+
(
240+
false,
241+
"".to_owned(),
242+
resp.as_ref().err().map(|e| e.to_string()),
243+
resp.unwrap_err().status().map(|s| s.to_string()),
244+
)
245+
};
246+
206247
infos.push(ClusterInfo::new(
207248
&ingester.domain_name,
208-
reqw.is_ok(),
209-
reqw.as_ref().err().map(|e| e.to_string()),
210-
reqw.ok().map(|r| r.status().to_string()),
249+
reachable,
250+
staging_path,
251+
error,
252+
status,
211253
));
212254
}
213255

@@ -390,8 +432,8 @@ impl QueryServer {
390432
let client = reqwest::Client::new();
391433
let res = client
392434
.get(url)
393-
.header("Content-Type", "application/json")
394-
.header("Authorization", ingester.token)
435+
.header(header::CONTENT_TYPE, "application/json")
436+
.header(header::AUTHORIZATION, ingester.token)
395437
.send()
396438
.await
397439
.map_err(|err| {
@@ -439,8 +481,8 @@ impl QueryServer {
439481
let client = reqwest::Client::new();
440482
let res = client
441483
.put(url)
442-
.header("Content-Type", "application/json")
443-
.header("Authorization", ingester.token)
484+
.header(header::CONTENT_TYPE, "application/json")
485+
.header(header::AUTHORIZATION, ingester.token)
444486
.send()
445487
.await
446488
.map_err(|err| {
@@ -488,8 +530,8 @@ impl QueryServer {
488530
let client = reqwest::Client::new();
489531
let resp = client
490532
.delete(url)
491-
.header("Content-Type", "application/json")
492-
.header("Authorization", ingester.token)
533+
.header(header::CONTENT_TYPE, "application/json")
534+
.header(header::AUTHORIZATION, ingester.token)
493535
.send()
494536
.await
495537
.map_err(|err| {
@@ -664,6 +706,7 @@ impl StorageStats {
664706
struct ClusterInfo {
665707
domain_name: String,
666708
reachable: bool,
709+
staging_path: String,
667710
error: Option<String>, // error message if the ingester is not reachable
668711
status: Option<String>, // status message if the ingester is reachable
669712
}
@@ -672,12 +715,14 @@ impl ClusterInfo {
672715
fn new(
673716
domain_name: &str,
674717
reachable: bool,
718+
staging_path: String,
675719
error: Option<String>,
676720
status: Option<String>,
677721
) -> Self {
678722
Self {
679723
domain_name: domain_name.to_string(),
680724
reachable,
725+
staging_path,
681726
error,
682727
status,
683728
}

0 commit comments

Comments
 (0)