add backend for history

This commit is contained in:
2024-12-30 20:13:03 -05:00
parent c7ca250b66
commit aa1763cbe7
11 changed files with 319 additions and 28 deletions

View File

@@ -1,10 +1,12 @@
use crate::http::error::HttpServerResultError;
use crate::telemetry::management_service::TelemetryManagementService;
use actix_web::{get, web, Responder};
use log::trace;
use log::{info, trace};
use std::sync::Arc;
use chrono::{DateTime, TimeDelta, Utc};
use serde::Deserialize;
#[get("/tlm/{name:[\\w\\d/_-]+}")]
#[get("/tlm/info/{name:[\\w\\d/_-]+}")]
async fn get_tlm_definition(
data: web::Data<Arc<TelemetryManagementService>>,
name: web::Path<String>,
@@ -12,12 +14,48 @@ async fn get_tlm_definition(
let string = name.to_string();
trace!("get_tlm_definition {}", string);
let Some(data) = data.get_by_name(&string) else {
return Err(HttpServerResultError::TlmNotFound { tlm: string });
return Err(HttpServerResultError::TlmNameNotFound { tlm: string });
};
Ok(web::Json(data.definition.clone()))
}
pub fn setup_api(cfg: &mut web::ServiceConfig) {
cfg.service(get_tlm_definition);
#[derive(Deserialize)]
struct HistoryQuery {
from: String,
to: String,
resolution: i64
}
#[get("/tlm/history/{uuid:[0-9a-f]+}")]
async fn get_tlm_history(
data: web::Data<Arc<TelemetryManagementService>>,
uuid: web::Path<String>,
info: web::Query<HistoryQuery>,
) -> Result<impl Responder, HttpServerResultError> {
let uuid = uuid.to_string();
trace!("get_tlm_history {} from {} to {} resolution {}", uuid, info.from, info.to, info.resolution);
let Ok(from) = (&info.from).parse::<DateTime<Utc>>() else {
return Err(HttpServerResultError::InvalidDateTime { date_time: info.from.clone() });
};
let Ok(to) = (&info.to).parse::<DateTime<Utc>>() else {
return Err(HttpServerResultError::InvalidDateTime { date_time: info.to.clone() });
};
let maximum_resolution = TimeDelta::milliseconds(info.resolution);
info!("get_tlm_history {} from {} to {} resolution {}", uuid, from, to, maximum_resolution);
let data = data.pin();
match data.get_by_uuid(&uuid) {
None => Err(HttpServerResultError::TlmUuidNotFound { uuid }),
Some(tlm) => {
Ok(web::Json(tlm.history.get(from, to, maximum_resolution)))
}
}
}
pub fn setup_api(cfg: &mut web::ServiceConfig) {
cfg
.service(get_tlm_definition)
.service(get_tlm_history);
}