Browse Source

anyhow result in metrics

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
ce660fd20a
  1. 1
      server/Cargo.lock
  2. 1
      server/Cargo.toml
  3. 39
      server/src/api/metric.rs

1
server/Cargo.lock generated

@ -344,6 +344,7 @@ checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
name = "hastic"
version = "0.0.1"
dependencies = [
"anyhow",
"config",
"fastrand",
"openssl",

1
server/Cargo.toml

@ -6,6 +6,7 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = "1.0"
tokio = { version = "1", features = ["full"] }
warp = "0.3"
parking_lot = "0.11.2"

39
server/src/api/metric.rs

@ -1,6 +1,6 @@
use hastic::services::{metric_service, user_service};
use subbeat::metric::Metric;
use subbeat::metric::{Metric, MetricResult};
use warp::filters::method::get;
use warp::http::HeaderValue;
use warp::hyper::server::conn::Http;
@ -11,10 +11,13 @@ use warp::{reject, Rejection, Reply};
use serde::Serialize;
use anyhow;
use crate::api::{self, API};
use parking_lot::RwLock;
use std::collections::HashMap;
use std::error::Error;
use std::fmt::Debug;
use std::sync::Arc;
@ -28,22 +31,38 @@ struct BadQuery;
impl Reject for BadQuery {}
async fn query(
async fn get_query(
p: HashMap<String, String>,
ms: Arc<RwLock<metric_service::MetricService>>,
) -> Result<impl warp::Reply, warp::Rejection> {
if !p.contains_key("from") || !p.contains_key("to") || !p.contains_key("step") {
return Err(warp::reject::custom(BadQuery));
) -> anyhow::Result<MetricResult> {
if !p.contains_key("from") {
return Err(anyhow::anyhow!("Missing attribute from"));
}
let from = p.get("from").unwrap().parse::<u64>().unwrap();
let to = p.get("to").unwrap().parse::<u64>().unwrap();
let step = p.get("step").unwrap().parse::<u64>().unwrap();
if !p.contains_key("to") {
return Err(anyhow::anyhow!("Missing attribute to"));
}
if !p.contains_key("step") {
return Err(anyhow::anyhow!("Missing attribute step"));
}
let from = p.get("from").unwrap().parse::<u64>()?;
let to = p.get("to").unwrap().parse::<u64>()?;
let step = p.get("step").unwrap().parse::<u64>()?;
let prom = ms.read().get_prom();
drop(ms);
let res = prom.query(from, to, step).await;
Ok(prom.query(from, to, step).await?)
}
Ok(API::json(&res.unwrap()))
async fn query(
p: HashMap<String, String>,
ms: Arc<RwLock<metric_service::MetricService>>,
) -> Result<impl warp::Reply, warp::Rejection> {
//Err(warp::reject::custom(BadQuery));
match get_query(p, ms).await {
Ok(res) => Ok(API::json(&res)),
// TODO: parse different error types
Err(_e) => Err(warp::reject::custom(BadQuery)),
}
}
pub fn get_route(

Loading…
Cancel
Save