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}