From 58f7fea43f9dcdada43f505cdfae5704ad6e5074 Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Sat, 30 Oct 2021 17:31:04 +0300 Subject: [PATCH] no data case --- src/datasources/prometheus.rs | 9 +++++++++ src/main.rs | 15 +++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/datasources/prometheus.rs b/src/datasources/prometheus.rs index 246b1d3..9171f1b 100644 --- a/src/datasources/prometheus.rs +++ b/src/datasources/prometheus.rs @@ -40,6 +40,15 @@ impl Prometheus { pub fn parse_result(value: Value) -> types::Result { // TODO: check that metric exists // TODO: check status: "error" + if value.get("data").is_none() { + return Err(anyhow::format_err!("no data in response")); + } + if value["data"].get("result").is_none() { + return Err(anyhow::format_err!("no result in response")); + } + if value["data"]["result"].as_array().unwrap().len() == 0 { + return Ok(Default::default()); + } let metric = &value["data"]["result"][0]["metric"]; let metric_name = metric .as_object() diff --git a/src/main.rs b/src/main.rs index 8a7c3ad..ecd79f6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,12 +20,15 @@ async fn main() -> types::Result<()> { ) .await?; - let key = r.data.keys().nth(0).unwrap(); - println!("{}", key); - - let vs = &r.data[key]; - for (t, v) in vs.iter() { - println!("{}\t{}", t, v); + if r.data.keys().len() > 0 { + let key = r.data.keys().nth(0).unwrap(); + println!("timestamp\t{}", key); + let vs = &r.data[key]; + for (t, v) in vs.iter() { + println!("{}\t{}", t, v); + } + } else { + println!("no_data"); } Ok(())