STUFUFUFUFF

This commit is contained in:
2024-09-21 14:08:24 +02:00
parent d180e72373
commit 7110a9e8f6
21 changed files with 1190 additions and 370 deletions

View 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
},
)))
}