omni_orchestrator/schemas/v1/api/alerts/
org_alerts.rs1use super::super::super::db::queries as db;
2use rocket::http::Status;
3use rocket::serde::json::{json, Json, Value};
4use rocket::{get, State};
5use std::sync::Arc;
6use crate::DatabaseManager;
7
8#[get("/platform/<platform_id>/orgs/<org_id>/active-alerts?<limit>")]
10pub async fn get_org_active_alerts(
11 platform_id: i64,
12 org_id: i64,
13 limit: Option<i64>,
14 db_manager: &State<Arc<DatabaseManager>>,
15) -> Result<Json<Value>, (Status, Json<Value>)> {
16 let platform = match db::platforms::get_platform_by_id(db_manager.get_main_pool(), platform_id).await {
18 Ok(platform) => platform,
19 Err(_) => {
20 return Err((
21 Status::NotFound,
22 Json(json!({
23 "error": "Platform not found",
24 "message": format!("Platform with ID {} does not exist", platform_id)
25 }))
26 ));
27 }
28 };
29
30 let pool = match db_manager.get_platform_pool(&platform.name, platform_id).await {
32 Ok(pool) => pool,
33 Err(_) => {
34 return Err((
35 Status::InternalServerError,
36 Json(json!({
37 "error": "Database error",
38 "message": "Failed to connect to platform database"
39 }))
40 ));
41 }
42 };
43
44 let limit = limit.unwrap_or(20);
45
46 let alerts = match db::alert::get_org_active_alerts(
47 &pool,
48 org_id,
49 limit,
50 ).await {
51 Ok(alerts) => alerts,
52 Err(e) => {
53 log::error!("Failed to fetch org active alerts: {}", e);
54 return Err((
55 Status::InternalServerError,
56 Json(json!({
57 "error": "Database error",
58 "message": "Failed to fetch organization alerts"
59 }))
60 ));
61 }
62 };
63
64 Ok(Json(json!({ "alerts": alerts })))
65}
66
67#[get("/platform/<platform_id>/orgs/<org_id>/alert-stats?<days>")]
69pub async fn get_org_alert_stats(
70 platform_id: i64,
71 org_id: i64,
72 days: Option<i64>,
73 db_manager: &State<Arc<DatabaseManager>>,
74) -> Result<Json<Value>, (Status, Json<Value>)> {
75 let platform = match db::platforms::get_platform_by_id(db_manager.get_main_pool(), platform_id).await {
77 Ok(platform) => platform,
78 Err(_) => {
79 return Err((
80 Status::NotFound,
81 Json(json!({
82 "error": "Platform not found",
83 "message": format!("Platform with ID {} does not exist", platform_id)
84 }))
85 ));
86 }
87 };
88
89 let pool = match db_manager.get_platform_pool(&platform.name, platform_id).await {
91 Ok(pool) => pool,
92 Err(_) => {
93 return Err((
94 Status::InternalServerError,
95 Json(json!({
96 "error": "Database error",
97 "message": "Failed to connect to platform database"
98 }))
99 ));
100 }
101 };
102
103 let days = days.unwrap_or(30); let stats = match db::alert::get_alert_stats(
106 &pool,
107 org_id,
108 days,
109 ).await {
110 Ok(stats) => stats,
111 Err(e) => {
112 log::error!("Failed to fetch alert stats: {}", e);
113 return Err((
114 Status::InternalServerError,
115 Json(json!({
116 "error": "Database error",
117 "message": "Failed to fetch alert statistics"
118 }))
119 ));
120 }
121 };
122
123 Ok(Json(stats))
124}