Skip to main content

oxanus_web/
lib.rs

1mod error;
2mod filters;
3mod handlers;
4mod templates;
5
6use std::collections::HashMap;
7
8use axum::{
9    Router,
10    extract::Extension,
11    routing::{get, post},
12};
13
14const JOBS_PER_PAGE: usize = 50;
15
16#[derive(Clone)]
17pub struct OxanusWebState {
18    pub storage: oxanus::Storage,
19    pub catalog: oxanus::Catalog,
20    pub base_path: String,
21    pub concurrency_map: HashMap<String, usize>,
22}
23
24impl OxanusWebState {
25    pub fn new(storage: oxanus::Storage, catalog: oxanus::Catalog, base_path: String) -> Self {
26        let concurrency_map = catalog
27            .queues
28            .iter()
29            .map(|q| (q.key.clone(), q.concurrency))
30            .collect();
31        Self {
32            storage,
33            catalog,
34            base_path,
35            concurrency_map,
36        }
37    }
38}
39
40pub fn router(state: OxanusWebState) -> Router {
41    Router::new()
42        .route("/", get(handlers::dashboard))
43        .route("/busy", get(handlers::busy))
44        .route("/queues", get(handlers::queues_list))
45        .route("/cron", get(handlers::cron_jobs))
46        .route("/scheduled", get(handlers::scheduled_jobs))
47        .route("/dead", get(handlers::dead_jobs))
48        .route("/retries", get(handlers::retry_jobs))
49        .route("/queues/{queue_key}", get(handlers::queue_detail))
50        .route("/enqueue", post(handlers::enqueue_job))
51        .route("/queues/{queue_key}/wipe", post(handlers::wipe_queue))
52        .route(
53            "/queues/{queue_key}/jobs/{job_id}/delete",
54            post(handlers::delete_job),
55        )
56        .layer(Extension(state))
57}