diff --git a/src/handlers.rs b/src/handlers.rs index a6438be..e62b3a1 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -1,96 +1,10 @@ -use crate::{config::*, updater::update_status, State}; +use crate::State; use actix_web::{ error::ErrorInternalServerError, web::Data, Error as WebError, HttpResponse, Result as WebResult, }; -use chrono::prelude::*; -use serde::Serialize; use tera::{Context, Tera}; -#[derive(Clone, Serialize, Default, Debug)] -pub struct EndpointStatus { - pub status: u8, - pub location: String, - pub endpoint: String, - pub rtt: Option, - pub error: Option, -} - -impl EndpointStatus { - pub fn ok(location: String, endpoint: String, rtt: String) -> Self { - EndpointStatus { - status: 0, - location, - endpoint, - rtt: Some(rtt), - error: None, - } - } - - pub fn warn(location: String, endpoint: String, rtt: String, error: Option) -> Self { - EndpointStatus { - status: 1, - location, - endpoint, - rtt: Some(rtt), - error, - } - } - - pub fn error(location: String, endpoint: String, error: Option) -> Self { - EndpointStatus { - status: 2, - location, - endpoint, - rtt: None, - error, - } - } -} - -#[derive(Serialize, Debug)] -pub struct StatusGroup { - pub label: String, - pub endpoints: Vec, -} - -#[derive(Serialize, Debug)] -pub struct QueryResults { - pub timestamp: DateTime, - pub timestamp_str: String, - pub refresh_time: u64, - pub config: Config, - pub groups: Vec, -} - -impl QueryResults { - pub fn new(config: Config) -> Self { - let time = Utc::now(); - QueryResults { - timestamp: time, - timestamp_str: Self::format_timestamp(time), - refresh_time: config.refresh_time, - config: config.clone(), - groups: update_status(&config), - } - } - - pub fn update(&mut self, updated_groups: Vec) { - self.update_timestamp(); - self.groups = updated_groups; - } - - fn update_timestamp(&mut self) { - let current_time = Utc::now(); - self.timestamp = current_time; - self.timestamp_str = Self::format_timestamp(current_time); - } - - fn format_timestamp(timestamp: DateTime) -> String { - timestamp.format("%Y-%m-%d %H:%M:%S").to_string() - } -} - pub fn index(tmpl: Data, state: Data) -> WebResult { let state = state.read().unwrap(); let mut ctx = Context::new(); diff --git a/src/main.rs b/src/main.rs index 51bb966..1f98822 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,8 +15,9 @@ extern crate ring; mod config; mod handlers; mod updater; +mod results; -use self::{config::*, handlers::*, updater::*}; +use self::{config::*, handlers::*, updater::*, results::QueryResults}; use actix::System; use actix_web::{middleware::Logger, web::resource, App, HttpServer}; use ron::de::from_str; diff --git a/src/results.rs b/src/results.rs new file mode 100644 index 0000000..1d755db --- /dev/null +++ b/src/results.rs @@ -0,0 +1,87 @@ +use crate::{config::*, updater::update_status}; +use chrono::prelude::*; +use serde::Serialize; + +#[derive(Clone, Serialize, Default, Debug)] +pub struct EndpointStatus { + pub status: u8, + pub location: String, + pub endpoint: String, + pub rtt: Option, + pub error: Option, +} + +impl EndpointStatus { + pub fn ok(location: String, endpoint: String, rtt: String) -> Self { + EndpointStatus { + status: 0, + location, + endpoint, + rtt: Some(rtt), + error: None, + } + } + + pub fn warn(location: String, endpoint: String, rtt: String, error: Option) -> Self { + EndpointStatus { + status: 1, + location, + endpoint, + rtt: Some(rtt), + error, + } + } + + pub fn error(location: String, endpoint: String, error: Option) -> Self { + EndpointStatus { + status: 2, + location, + endpoint, + rtt: None, + error, + } + } +} + +#[derive(Serialize, Debug)] +pub struct StatusGroup { + pub label: String, + pub endpoints: Vec, +} + +#[derive(Serialize, Debug)] +pub struct QueryResults { + pub timestamp: DateTime, + pub timestamp_str: String, + pub refresh_time: u64, + pub config: Config, + pub groups: Vec, +} + +impl QueryResults { + pub fn new(config: Config) -> Self { + let time = Utc::now(); + QueryResults { + timestamp: time, + timestamp_str: Self::format_timestamp(time), + refresh_time: config.refresh_time, + config: config.clone(), + groups: update_status(&config), + } + } + + pub fn update(&mut self, updated_groups: Vec) { + self.update_timestamp(); + self.groups = updated_groups; + } + + fn update_timestamp(&mut self) { + let current_time = Utc::now(); + self.timestamp = current_time; + self.timestamp_str = Self::format_timestamp(current_time); + } + + fn format_timestamp(timestamp: DateTime) -> String { + timestamp.format("%Y-%m-%d %H:%M:%S").to_string() + } +} diff --git a/src/updater.rs b/src/updater.rs index 659074d..52bf390 100644 --- a/src/updater.rs +++ b/src/updater.rs @@ -1,6 +1,6 @@ use crate::{ config::*, - handlers::{EndpointStatus, StatusGroup}, + results::{EndpointStatus, StatusGroup}, State, }; use chrono::Utc;