graphile_worker_admin_ui 0.2.1

Embedded Leptos admin UI for graphile_worker
Documentation
use std::sync::Arc;

use axum::extract::State;
use axum::Json;
use graphile_worker::recovery::WorkerRecoveryConfig;
use graphile_worker_admin_api::queries::overview::{get_stats, list_queues};
use graphile_worker_admin_api::queries::workers::list_locked_workers;

use super::super::error::ApiError;
use super::super::state::AppState;
use super::super::types::{ActiveWorkerRow, OverviewResponse};

pub(crate) async fn overview(
    State(state): State<Arc<AppState>>,
) -> Result<Json<OverviewResponse>, ApiError> {
    let stats = get_stats(&state.pool, &state.schema).await?;
    let queues = list_queues(&state.pool, &state.schema).await?;
    let workers = list_locked_workers(&state.pool, &state.schema).await?;
    let recovery_defaults = WorkerRecoveryConfig::default();
    let active_workers = state
        .utils
        .list_active_workers(recovery_defaults.sweep_threshold)
        .await
        .map_err(ApiError::internal)?
        .into_iter()
        .map(|worker| ActiveWorkerRow {
            worker_id: worker.worker_id,
            last_heartbeat_at: worker.last_heartbeat_at,
            started_at: worker.started_at,
            metadata: worker.metadata,
            is_stale: worker.is_stale,
        })
        .collect();
    Ok(Json(OverviewResponse {
        stats,
        queues,
        workers,
        active_workers,
    }))
}