Skip to content

Commit f0dfd87

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

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

@@ -375,8 +417,8 @@ impl QueryServer {
375417
let client = reqwest::Client::new();
376418
let res = client
377419
.get(url)
378-
.header("Content-Type", "application/json")
379-
.header("Authorization", ingester.token)
420+
.header(header::CONTENT_TYPE, "application/json")
421+
.header(header::AUTHORIZATION, ingester.token)
380422
.send()
381423
.await
382424
.map_err(|err| {
@@ -424,8 +466,8 @@ impl QueryServer {
424466
let client = reqwest::Client::new();
425467
let res = client
426468
.put(url)
427-
.header("Content-Type", "application/json")
428-
.header("Authorization", ingester.token)
469+
.header(header::CONTENT_TYPE, "application/json")
470+
.header(header::AUTHORIZATION, ingester.token)
429471
.send()
430472
.await
431473
.map_err(|err| {
@@ -473,8 +515,8 @@ impl QueryServer {
473515
let client = reqwest::Client::new();
474516
let resp = client
475517
.delete(url)
476-
.header("Content-Type", "application/json")
477-
.header("Authorization", ingester.token)
518+
.header(header::CONTENT_TYPE, "application/json")
519+
.header(header::AUTHORIZATION, ingester.token)
478520
.send()
479521
.await
480522
.map_err(|err| {
@@ -649,6 +691,7 @@ impl StorageStats {
649691
struct ClusterInfo {
650692
domain_name: String,
651693
reachable: bool,
694+
staging_path: String,
652695
error: Option<String>, // error message if the ingester is not reachable
653696
status: Option<String>, // status message if the ingester is reachable
654697
}
@@ -657,12 +700,14 @@ impl ClusterInfo {
657700
fn new(
658701
domain_name: &str,
659702
reachable: bool,
703+
staging_path: String,
660704
error: Option<String>,
661705
status: Option<String>,
662706
) -> Self {
663707
Self {
664708
domain_name: domain_name.to_string(),
665709
reachable,
710+
staging_path,
666711
error,
667712
status,
668713
}

0 commit comments

Comments
 (0)