use dioxus::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct OverviewStats { pub total_repositories: u64, pub total_findings: u64, pub critical_findings: u64, pub high_findings: u64, pub medium_findings: u64, pub low_findings: u64, pub total_sbom_entries: u64, pub total_cve_alerts: u64, pub total_issues: u64, } #[server] pub async fn fetch_overview_stats() -> Result { let state: super::server_state::ServerState = dioxus_fullstack::FullstackContext::extract().await?; let url = format!("{}/api/v1/stats/overview", state.agent_api_url); let resp = reqwest::get(&url) .await .map_err(|e| ServerFnError::new(e.to_string()))?; let body: serde_json::Value = resp .json() .await .map_err(|e| ServerFnError::new(e.to_string()))?; let stats: OverviewStats = serde_json::from_value(body["data"].clone()).unwrap_or_default(); Ok(stats) }