use crate::{config::*, utils::EpochTimestamp, State}; use actix_web::{ error::ErrorInternalServerError, web::Data, Error as WebError, HttpResponse, Result as WebResult, }; use serde::Serialize; use tera::{Context, Tera}; #[derive(Clone, Serialize, Default, Debug)] pub struct Status { pub status: u8, pub location: String, pub domain: String, pub endpoint: String, pub error: Option, } #[derive(Serialize, Debug)] pub struct QueryResults { pub last_update: EpochTimestamp, pub refresh_time: u64, pub config: Config, pub statuses: Vec, } pub fn index(tmpl: Data, state: Data) -> WebResult { let state = state.read().unwrap(); let mut ctx = Context::new(); ctx.insert("results", &*state); let s = tmpl.render("index.html", &ctx).map_err(|e| { println!("{:?}", e); ErrorInternalServerError("Template error") })?; Ok(HttpResponse::Ok().content_type("text/html").body(s)) } pub fn json_endpoint(state: Data) -> HttpResponse { let state = state.read().unwrap(); HttpResponse::Ok().json(&state.statuses) }