Skip to content

Commit 81769b5

Browse files
feat: revamp home and dataset API (#1307)
update the implementation of `/api/prism/v1/home` remove titles of alerts, dashboards, correlations, filters from home api updated response - ``` { "alerts_info": { "total": 0, "silenced": 0, "resolved": 0, "triggered": 0, "low": 0, "medium": 0, "high": 0, "critical": 0 }, "stats_details": [ { "date": "2025-04-30", "events": 0, "ingestion_size": 0, "storage_size": 0 }, { "date": "2025-05-01", "events": 0, "ingestion_size": 0, "storage_size": 0 }, { "date": "2025-05-02", "events": 3866860, "ingestion_size": 5260602290, "storage_size": 736510108 }, { "date": "2025-05-03", "events": 0, "ingestion_size": 0, "storage_size": 0 }, { "date": "2025-05-04", "events": 0, "ingestion_size": 0, "storage_size": 0 }, { "date": "2025-05-05", "events": 0, "ingestion_size": 0, "storage_size": 0 }, { "date": "2025-05-06", "events": 2027400, "ingestion_size": 2757834546, "storage_size": 384782870 } ], "datasets": [ { "title": "test15", "dataset_type": "Logs" } ] } ``` add another api to be called from prism `/api/prism/v1/home/search` server sends title and id of alerts, dashboards, correlations, filters ``` { "alerts": [], "correlations": [], "dashboards": [], "filters": [ { "title": "body not null", "id": "e71d1affa4ad72136e03092a717a4b0e0c3fd6d643a09572ad65e1748a5c2df8" }, { "title": "select *", "id": "6fe16f99b05566d7d4a598a7f0fa2604379d75164cdda5657c7fdbf61e54a555" } ] } ``` update datasets api - update readers privilege - add `GetRetention` action remove distinct values from datasets api prism to call the query apis directly for p_src_ip and p_user_agent request - `http://localhost:8000/api/prism/v1/home/search?key=frontend` response - ``` { "resources": [ { "id": "e890c2f70362528b57d528b65a39de62bbd3c65f90f6923dce25e27a8a66e8a4", "name": "select flags not 0", "resource_type": "Filter" }, { "id": "e71d1affa4ad72136e03092a717a4b0e0c3fd6d643a09572ad65e1748a5c2df8", "name": "body not null", "resource_type": "Filter" }, { "id": "6fe16f99b05566d7d4a598a7f0fa2604379d75164cdda5657c7fdbf61e54a555", "name": "select *", "resource_type": "Filter" }, { "id": "fcda9d6a2b98c3368cbf1d903bb408e59f084df2dcb7c7d5d7b044e800ec1437", "name": "frontend limit", "resource_type": "Filter" } ] } ```
1 parent 01d4449 commit 81769b5

File tree

5 files changed

+220
-204
lines changed

5 files changed

+220
-204
lines changed

src/handlers/http/modal/server.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,10 @@ impl ParseableServer for Server {
148148
}
149149

150150
impl Server {
151-
pub fn get_prism_home() -> Resource {
152-
web::resource("/home").route(web::get().to(http::prism_home::home_api))
151+
pub fn get_prism_home() -> Scope {
152+
web::scope("/home")
153+
.service(web::resource("").route(web::get().to(http::prism_home::home_api)))
154+
.service(web::resource("/search").route(web::get().to(http::prism_home::home_search)))
153155
}
154156

155157
pub fn get_prism_logstream() -> Scope {

src/handlers/http/prism_home.rs

+26-1
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616
*
1717
*/
1818

19+
use std::collections::HashMap;
20+
1921
use actix_web::{web, HttpRequest, Responder};
2022

2123
use crate::{
22-
prism::home::{generate_home_response, PrismHomeError},
24+
prism::home::{generate_home_response, generate_home_search_response, PrismHomeError},
2325
utils::actix::extract_session_key_from_req,
2426
};
2527

28+
const HOME_SEARCH_QUERY_PARAM: &str = "key";
29+
2630
/// Fetches the data to populate Prism's home
2731
///
2832
///
@@ -37,3 +41,24 @@ pub async fn home_api(req: HttpRequest) -> Result<impl Responder, PrismHomeError
3741

3842
Ok(web::Json(res))
3943
}
44+
45+
pub async fn home_search(req: HttpRequest) -> Result<impl Responder, PrismHomeError> {
46+
let key = extract_session_key_from_req(&req)
47+
.map_err(|err| PrismHomeError::Anyhow(anyhow::Error::msg(err.to_string())))?;
48+
let query_map = web::Query::<HashMap<String, String>>::from_query(req.query_string())
49+
.map_err(|_| PrismHomeError::InvalidQueryParameter(HOME_SEARCH_QUERY_PARAM.to_string()))?;
50+
51+
if query_map.is_empty() {
52+
return Ok(web::Json(serde_json::json!({})));
53+
}
54+
55+
let query_value = query_map
56+
.get(HOME_SEARCH_QUERY_PARAM)
57+
.ok_or_else(|| PrismHomeError::InvalidQueryParameter(HOME_SEARCH_QUERY_PARAM.to_string()))?
58+
.to_lowercase();
59+
let res = generate_home_search_response(&key, &query_value).await?;
60+
let json_res = serde_json::to_value(res)
61+
.map_err(|err| PrismHomeError::Anyhow(anyhow::Error::msg(err.to_string())))?;
62+
63+
Ok(web::Json(json_res))
64+
}

0 commit comments

Comments
 (0)