this repo has no description
1use crate::auth::BearerAuthAdmin; 2use crate::state::AppState; 3use axum::{ 4 Json, 5 extract::State, 6 response::{IntoResponse, Response}, 7}; 8use serde::Serialize; 9 10#[derive(Serialize)] 11#[serde(rename_all = "camelCase")] 12pub struct ServerStatsResponse { 13 pub user_count: i64, 14 pub repo_count: i64, 15 pub record_count: i64, 16 pub blob_storage_bytes: i64, 17} 18 19pub async fn get_server_stats( 20 State(state): State<AppState>, 21 _auth: BearerAuthAdmin, 22) -> Response { 23 let user_count: i64 = match sqlx::query_scalar!("SELECT COUNT(*) FROM users") 24 .fetch_one(&state.db) 25 .await 26 { 27 Ok(Some(count)) => count, 28 Ok(None) => 0, 29 Err(_) => 0, 30 }; 31 32 let repo_count: i64 = match sqlx::query_scalar!("SELECT COUNT(*) FROM repos") 33 .fetch_one(&state.db) 34 .await 35 { 36 Ok(Some(count)) => count, 37 Ok(None) => 0, 38 Err(_) => 0, 39 }; 40 41 let record_count: i64 = match sqlx::query_scalar!("SELECT COUNT(*) FROM records") 42 .fetch_one(&state.db) 43 .await 44 { 45 Ok(Some(count)) => count, 46 Ok(None) => 0, 47 Err(_) => 0, 48 }; 49 50 let blob_storage_bytes: i64 = match sqlx::query_scalar!("SELECT COALESCE(SUM(size_bytes), 0)::BIGINT FROM blobs") 51 .fetch_one(&state.db) 52 .await 53 { 54 Ok(Some(bytes)) => bytes, 55 Ok(None) => 0, 56 Err(_) => 0, 57 }; 58 59 Json(ServerStatsResponse { 60 user_count, 61 repo_count, 62 record_count, 63 blob_storage_bytes, 64 }) 65 .into_response() 66}