STUFUFUFUFF
This commit is contained in:
47
snitch-web/src/dashboard.rs
Normal file
47
snitch-web/src/dashboard.rs
Normal file
@ -0,0 +1,47 @@
|
||||
use rocket::{http::Status, response::content::RawHtml, State};
|
||||
use rocket_dyn_templates::{context, Template};
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::database::Database;
|
||||
|
||||
#[get("/")]
|
||||
pub async fn index(db: &State<Database>) -> Result<RawHtml<Template>, Status> {
|
||||
// TODO:
|
||||
// maybe only show most recent error for each service in dashboard view, i.e.:
|
||||
// select distinct on (service) time, message from (select * from record order by time desc) as foo;
|
||||
let messages = db.get_all_log_messages().map_err(|e| {
|
||||
log::error!("failed to query database: {e}");
|
||||
Status::InternalServerError
|
||||
})?;
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct Record {
|
||||
time: String,
|
||||
severity: String,
|
||||
service: String,
|
||||
message: String,
|
||||
location: String,
|
||||
}
|
||||
|
||||
let messages: Vec<_> = messages
|
||||
.into_iter()
|
||||
.map(|(_id, record)| Record {
|
||||
time: record.time.map(|time| time.to_string()).unwrap_or_default(),
|
||||
severity: record.severity.as_str().to_string(),
|
||||
service: record.service,
|
||||
message: record.message,
|
||||
location: record
|
||||
.file
|
||||
.zip(record.line)
|
||||
.map(|(path, line)| format!("{path}:{line}"))
|
||||
.unwrap_or_default(),
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(RawHtml(Template::render(
|
||||
"index",
|
||||
context! {
|
||||
messages: &messages
|
||||
},
|
||||
)))
|
||||
}
|
||||
Reference in New Issue
Block a user