mirror of https://github.com/buster-so/buster.git
need to revert chrono for evals brach
This commit is contained in:
parent
415466aa1f
commit
582fb9869c
|
@ -11,7 +11,7 @@ members = [
|
||||||
# Define shared dependencies for all workspace members
|
# Define shared dependencies for all workspace members
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
anyhow = "1.0.86"
|
anyhow = "1.0.86"
|
||||||
chrono = { version = "0.4.38", features = ["serde"] }
|
chrono = { version = "=0.4.38", features = ["serde"] }
|
||||||
serde = { version = "1.0.117", features = ["derive"] }
|
serde = { version = "1.0.117", features = ["derive"] }
|
||||||
serde_json = { version = "1.0.117", features = ["preserve_order"] }
|
serde_json = { version = "1.0.117", features = ["preserve_order"] }
|
||||||
serde_yaml = "0.9.34"
|
serde_yaml = "0.9.34"
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
use anyhow::{anyhow, Result};
|
||||||
|
use handlers::metrics::get_metric_handler;
|
||||||
|
use middleware::AuthenticatedUser;
|
||||||
|
use serde::Deserialize;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
use crate::routes::ws::{
|
||||||
|
metrics::metrics_router::{MetricEvent, MetricRoute},
|
||||||
|
ws::{WsErrorCode, WsEvent, WsResponseMessage, WsSendMethod},
|
||||||
|
ws_router::WsRoutes,
|
||||||
|
ws_utils::{send_error_message, send_ws_message},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct GetMetricWsRequest {
|
||||||
|
pub id: Uuid,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn get_metric(user: &AuthenticatedUser, request: GetMetricWsRequest) -> Result<()> {
|
||||||
|
tracing::info!(
|
||||||
|
"Processing WebSocket GET request for metric with ID: {}, user_id: {}",
|
||||||
|
request.id,
|
||||||
|
user.id
|
||||||
|
);
|
||||||
|
|
||||||
|
let metric = match get_metric_handler(&request.id, &user.id).await {
|
||||||
|
Ok(metric) => metric,
|
||||||
|
Err(e) => {
|
||||||
|
tracing::error!("Error getting metric: {}", e);
|
||||||
|
send_error_message(
|
||||||
|
&user.id.to_string(),
|
||||||
|
WsRoutes::Metrics(MetricRoute::Get),
|
||||||
|
WsEvent::Metrics(MetricEvent::GetMetric),
|
||||||
|
WsErrorCode::InternalServerError,
|
||||||
|
"Failed to get metric.".to_string(),
|
||||||
|
user,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
return Err(anyhow!("Error getting metric: {}", e));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let response_message = WsResponseMessage::new(
|
||||||
|
WsRoutes::Metrics(MetricRoute::Get),
|
||||||
|
WsEvent::Metrics(MetricEvent::GetMetric),
|
||||||
|
metric,
|
||||||
|
None,
|
||||||
|
user,
|
||||||
|
WsSendMethod::SenderOnly,
|
||||||
|
);
|
||||||
|
|
||||||
|
send_ws_message(&user.id.to_string(), &response_message).await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
use anyhow::{anyhow, Result};
|
||||||
|
use handlers::metrics::get_metric_data_handler::{GetMetricDataRequest, MetricDataResponse};
|
||||||
|
use middleware::AuthenticatedUser;
|
||||||
|
use serde::Deserialize;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
use crate::routes::ws::{
|
||||||
|
metrics::metrics_router::{MetricEvent, MetricRoute},
|
||||||
|
ws::{WsErrorCode, WsEvent, WsResponseMessage, WsSendMethod},
|
||||||
|
ws_router::WsRoutes,
|
||||||
|
ws_utils::{send_error_message, send_ws_message},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct GetMetricDataWsRequest {
|
||||||
|
pub id: Uuid,
|
||||||
|
pub limit: Option<i64>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn get_metric_data(user: &AuthenticatedUser, request: GetMetricDataWsRequest) -> Result<()> {
|
||||||
|
tracing::info!(
|
||||||
|
"Processing WebSocket GET request for metric data with ID: {}",
|
||||||
|
request.id
|
||||||
|
);
|
||||||
|
|
||||||
|
let handler_request = GetMetricDataRequest {
|
||||||
|
metric_id: request.id,
|
||||||
|
limit: request.limit,
|
||||||
|
};
|
||||||
|
|
||||||
|
let response = match handlers::metrics::get_metric_data_handler(handler_request, user.clone()).await {
|
||||||
|
Ok(response) => response,
|
||||||
|
Err(e) => {
|
||||||
|
tracing::error!("Error getting metric data: {}", e);
|
||||||
|
send_error_message(
|
||||||
|
&user.id.to_string(),
|
||||||
|
WsRoutes::Metrics(MetricRoute::GetData),
|
||||||
|
WsEvent::Metrics(MetricEvent::FetchingData),
|
||||||
|
WsErrorCode::InternalServerError,
|
||||||
|
"Failed to get metric data.".to_string(),
|
||||||
|
user,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
return Err(anyhow!("Error getting metric data: {}", e));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let response_message = WsResponseMessage::new(
|
||||||
|
WsRoutes::Metrics(MetricRoute::GetData),
|
||||||
|
WsEvent::Metrics(MetricEvent::FetchingData),
|
||||||
|
response,
|
||||||
|
None,
|
||||||
|
user,
|
||||||
|
WsSendMethod::SenderOnly,
|
||||||
|
);
|
||||||
|
|
||||||
|
send_ws_message(&user.id.to_string(), &response_message).await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
use anyhow::{anyhow, Result};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use serde_json::Value;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
use middleware::AuthenticatedUser;
|
||||||
|
|
||||||
|
use super::{
|
||||||
|
get_metric::{get_metric, GetMetricWsRequest},
|
||||||
|
get_metric_data::get_metric_data,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize, Debug, Clone)]
|
||||||
|
pub enum MetricRoute {
|
||||||
|
#[serde(rename = "/metrics/get")]
|
||||||
|
Get,
|
||||||
|
#[serde(rename = "/metrics/get_data")]
|
||||||
|
GetData,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize, Debug, Clone)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub enum MetricEvent {
|
||||||
|
GetMetric,
|
||||||
|
FetchingData,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn metrics_router(
|
||||||
|
route: MetricRoute,
|
||||||
|
data: Value,
|
||||||
|
user: &AuthenticatedUser,
|
||||||
|
) -> Result<()> {
|
||||||
|
match route {
|
||||||
|
MetricRoute::Get => {
|
||||||
|
let request = match serde_json::from_value::<GetMetricWsRequest>(data) {
|
||||||
|
Ok(id) => id,
|
||||||
|
Err(e) => return Err(anyhow!("Error parsing metric ID: {}", e)),
|
||||||
|
};
|
||||||
|
|
||||||
|
get_metric(user, request).await?;
|
||||||
|
}
|
||||||
|
MetricRoute::GetData => {
|
||||||
|
let req = match serde_json::from_value(data) {
|
||||||
|
Ok(req) => req,
|
||||||
|
Err(e) => return Err(anyhow!("Error parsing request: {}", e)),
|
||||||
|
};
|
||||||
|
|
||||||
|
get_metric_data(user, req).await?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MetricRoute {
|
||||||
|
pub fn from_str(path: &str) -> Result<Self> {
|
||||||
|
match path {
|
||||||
|
"/metrics/get" => Ok(Self::Get),
|
||||||
|
"/metrics/get_data" => Ok(Self::GetData),
|
||||||
|
_ => Err(anyhow!("Invalid path")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
pub mod metrics_router;
|
||||||
|
pub mod get_metric;
|
||||||
|
pub mod get_metric_data;
|
||||||
|
|
||||||
|
pub use metrics_router::*;
|
Loading…
Reference in New Issue