- Run cargo fmt on all crates - Fix regex patterns using unsupported lookahead in patterns.rs - Replace unwrap() calls with compile_regex() helper - Fix never type fallback in GitHub tracker - Fix redundant field name in findings page - Allow enum_variant_names for Dioxus Route enum - Fix &mut Vec -> &mut [T] clippy lint in sbom.rs - Mark unused-but-intended APIs with #[allow(dead_code)] Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
33 lines
1.0 KiB
Rust
33 lines
1.0 KiB
Rust
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<OverviewStats, ServerFnError> {
|
|
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)
|
|
}
|