mirror of
https://github.com/Noratrieb/haesli.git
synced 2026-01-14 19:55:03 +01:00
add dashboard
This commit is contained in:
parent
077b6fd633
commit
dc8efd4e4e
13 changed files with 777 additions and 33 deletions
78
amqp_dashboard/src/lib.rs
Normal file
78
amqp_dashboard/src/lib.rs
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
use amqp_core::GlobalData;
|
||||
use axum::body::{boxed, Full};
|
||||
use axum::response::{Html, IntoResponse, Response};
|
||||
use axum::routing::get;
|
||||
use axum::{Json, Router};
|
||||
use serde::Serialize;
|
||||
use tracing::info;
|
||||
|
||||
const INDEX_HTML: &str = include_str!("../assets/index.html");
|
||||
const SCRIPT_JS: &str = include_str!("../assets/script.js");
|
||||
const STYLE_CSS: &str = include_str!("../assets/style.css");
|
||||
|
||||
pub async fn dashboard(global_data: GlobalData) {
|
||||
let app = Router::new()
|
||||
.route("/", get(get_index_html))
|
||||
.route("/script.js", get(get_script_js))
|
||||
.route("/style.css", get(get_style_css))
|
||||
.route("/api/data", get(move || get_data(global_data)));
|
||||
|
||||
let socket_addr = "0.0.0.0:3000".parse().unwrap();
|
||||
|
||||
info!(%socket_addr, "Starting up dashboard on address");
|
||||
|
||||
axum::Server::bind(&socket_addr)
|
||||
.serve(app.into_make_service())
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
async fn get_index_html() -> impl IntoResponse {
|
||||
info!("Requesting index.html");
|
||||
Html(INDEX_HTML)
|
||||
}
|
||||
|
||||
async fn get_script_js() -> Response {
|
||||
Response::builder()
|
||||
.header("content-type", "application/javascript")
|
||||
.body(boxed(Full::from(SCRIPT_JS)))
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
async fn get_style_css() -> Response {
|
||||
Response::builder()
|
||||
.header("content-type", "text/css")
|
||||
.body(boxed(Full::from(STYLE_CSS)))
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct Data {
|
||||
connections: Vec<Connection>,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct Connection {
|
||||
id: String,
|
||||
peer_addr: String,
|
||||
}
|
||||
|
||||
async fn get_data(global_data: GlobalData) -> impl IntoResponse {
|
||||
let global_data = global_data.lock();
|
||||
|
||||
let connections = global_data
|
||||
.connections
|
||||
.values()
|
||||
.map(|conn| {
|
||||
let conn = conn.lock();
|
||||
Connection {
|
||||
id: conn.id.to_string(),
|
||||
peer_addr: conn.peer_addr.to_string(),
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
let data = Data { connections };
|
||||
|
||||
Json(data)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue