aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs
index 0bba960..f8f4fba 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,8 +1,11 @@
+pub mod api;
pub mod helper;
pub mod webui;
+pub mod webui_ws;
pub mod worker_ws;
use anyhow::Result;
+use api::{api_complete_json, api_loading_json, api_queue_json};
use axum::{Router, routing::get};
use log::{debug, info};
use serde_json::{Map, Value};
@@ -15,9 +18,13 @@ use tokio::{
fs::{File, read_to_string, rename},
io::AsyncWriteExt,
net::TcpListener,
- sync::{RwLock, mpsc::Sender},
+ sync::{
+ RwLock, broadcast,
+ mpsc::{self},
+ },
};
use webui::{webui, webui_style};
+use webui_ws::{WebuiEvent, webui_websocket};
use worker_ws::{WorkerID, WorkerResponse, worker_websocket};
pub struct Worker {
@@ -25,13 +32,13 @@ pub struct Worker {
name: String,
task_kinds: Vec<String>,
assigned_tasks: HashSet<String>,
- send: Sender<WorkerResponse>,
+ send: mpsc::Sender<WorkerResponse>,
}
-#[derive(Default)]
pub struct State {
worker_id_counter: WorkerID,
workers: HashMap<WorkerID, Worker>,
+ webui_broadcast: broadcast::Sender<Arc<WebuiEvent>>,
metadata: HashMap<String, Map<String, Value>>,
queue: HashSet<String>,
@@ -47,13 +54,31 @@ async fn main() -> Result<()> {
let router = Router::new()
.route("/", get(webui))
.route("/style.css", get(webui_style))
+ .route("/webui_ws", get(webui_websocket))
.route("/worker_ws", get(worker_websocket))
+ .route("/api/queue.json", get(api_queue_json))
+ .route("/api/complete.json", get(api_complete_json))
+ .route("/api/loading.json", get(api_loading_json))
.with_state(Arc::new(RwLock::new(state)));
let listener = TcpListener::bind("127.0.0.1:8080").await?;
axum::serve(listener, router).await?;
Ok(())
}
+impl Default for State {
+ fn default() -> Self {
+ Self {
+ worker_id_counter: Default::default(),
+ workers: Default::default(),
+ webui_broadcast: broadcast::channel(1024).0,
+ metadata: Default::default(),
+ queue: Default::default(),
+ loading: Default::default(),
+ complete: Default::default(),
+ }
+ }
+}
+
impl State {
pub async fn load(&mut self) -> Result<()> {
debug!("loading state");