endstat/src/main.rs

51 lines
1.3 KiB
Rust

extern crate actix_web;
extern crate env_logger;
extern crate reqwest;
extern crate ron;
extern crate serde;
#[macro_use]
extern crate tera;
mod config;
mod handlers;
mod utils;
use self::config::*;
use self::handlers::*;
use self::utils::EpochTimestamp;
use actix_web::{middleware::Logger, web::resource, App, HttpServer};
use ron::de::from_str;
use std::{
error::Error,
fs::read_to_string,
sync::{Arc, Mutex},
};
fn main() -> Result<(), Box<Error>> {
let config = from_str::<Config>(&read_to_string("./endstat_conf.ron")?)?;
let bind_addr = config.bind_address.clone();
std::env::set_var("RUST_LOG", "actix_web=info");
env_logger::init();
HttpServer::new(move || {
let state = Arc::from(Mutex::from(FetchResults {
last_update: EpochTimestamp::now(),
refresh_time: config.refresh_time.clone(),
config: config.clone(),
statuses: vec![],
}));
let tera = compile_templates!(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/**/*"));
App::new()
.data(state)
.data(tera)
.wrap(Logger::default())
.service(resource("/").to(index))
.service(resource("/api").to(json_endpoint))
})
.bind(&bind_addr)?
.run()?;
Ok(())
}