diff --git a/Cargo.lock b/Cargo.lock index bba58cd..bcf80e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,30 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "actix" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "actix-rt 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "actix_derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "derive_more 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", + "hashbrown 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "trust-dns-resolver 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "actix-codec" version = "0.1.2" @@ -215,6 +240,16 @@ dependencies = [ "syn 0.15.33 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "actix_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.29 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.33 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "adler32" version = "1.0.3" @@ -465,6 +500,15 @@ dependencies = [ "cfg-if 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "crossbeam-channel" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crossbeam-deque" version = "0.7.1" @@ -607,6 +651,7 @@ dependencies = [ name = "endstat" version = "0.1.0" dependencies = [ + "actix 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-web 1.0.0-beta.2 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2275,6 +2320,7 @@ dependencies = [ ] [metadata] +"checksum actix 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "409b193241782089260e5567aa8ac607a7607153613dbe8a15170ed3b29984fd" "checksum actix-codec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9f2c11af4b06dc935d8e1b1491dad56bfb32febc49096a91e773f8535c176453" "checksum actix-connect 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0dc9fb88787e5904e5030cae7d395f9908c2118ed655e48905f37febcad9a653" "checksum actix-http 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "23f726f551edcf2ddfd9d56261aedede5337e5ed1eee17b66304b7c9f62458ca" @@ -2287,6 +2333,7 @@ dependencies = [ "checksum actix-utils 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "80b12b95a3550c49b8f75e80341608bceaa6c544b0c754a0a6ffcf89bdd6d723" "checksum actix-web 1.0.0-beta.2 (registry+https://github.com/rust-lang/crates.io-index)" = "07bedc2058b6fb05ef5e600653141e51ea588b68f8e7a82358e098965deaae48" "checksum actix-web-codegen 0.1.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b26f9ce2dff34bda98b3c5b3ec2467a8f1bf08c69b0ae8ff02bc7d74d6af9d84" +"checksum actix_derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0bf5f6d7bf2d220ae8b4a7ae02a572bb35b7c4806b24049af905ab8110de156c" "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" "checksum aho-corasick 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e6f484ae0c99fec2e858eb6134949117399f222608d84cadb3f58c1f97c2364c" "checksum arc-swap 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "bc4662175ead9cd84451d5c35070517777949a2ed84551764129cedb88384841" @@ -2317,6 +2364,7 @@ dependencies = [ "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" "checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" +"checksum crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0f0ed1a4de2235cabda8558ff5840bffb97fcb64c97827f354a451307df5f72b" "checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" "checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4" "checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" diff --git a/Cargo.toml b/Cargo.toml index b65c834..1288c82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,10 +5,11 @@ authors = ["Edward Shen "] edition = "2018" [dependencies] -reqwest = "0.9.15" -serde = { version = "1.0.90", features = ["derive"] } +reqwest = "0.9" +serde = { version = "1.0", features = ["derive"] } ron = "0.5" actix-web = "1.0.0-beta.2" +actix = "0.8" tokio = "0.1" tera = "0.11" -env_logger = "0.6.1" +env_logger = "0.6" diff --git a/src/main.rs b/src/main.rs index 4bcdc4d..4dc73f4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,10 @@ +extern crate actix; extern crate actix_web; extern crate env_logger; extern crate reqwest; extern crate ron; extern crate serde; +extern crate tokio; #[macro_use] extern crate tera; @@ -12,9 +14,12 @@ mod utils; use self::config::*; use self::handlers::*; +use actix::System; use actix_web::{middleware::Logger, web::resource, App, HttpServer}; use ron::de::from_str; -use std::{error::Error, fs::read_to_string}; +use std::{error::Error, fs::read_to_string, time::Duration}; +use tokio::prelude::{Future, Stream}; +use tokio::timer::Interval; fn main() -> Result<(), Box> { let config = from_str::(&read_to_string("./endstat_conf.ron")?)?; @@ -22,18 +27,30 @@ fn main() -> Result<(), Box> { std::env::set_var("RUST_LOG", "actix_web=info"); env_logger::init(); - HttpServer::new(move || { - let tera = compile_templates!(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/**/*")); + System::run(move || { + HttpServer::new(move || { + let tera = compile_templates!(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/**/*")); - App::new() - .data(State::new(&config)) - .data(tera) - .wrap(Logger::default()) - .service(resource("/").to(index)) - .service(resource("/api").to(json_endpoint)) - }) - .bind(&bind_addr)? - .run()?; + App::new() + .data(State::new(&config)) + .data(tera) + .wrap(Logger::default()) + .service(resource("/").to(index)) + .service(resource("/api").to(json_endpoint)) + }) + .bind(&bind_addr) + .expect("Could not bind to address!") + .start(); + + tokio::spawn( + Interval::new_interval(Duration::from_millis(5000)) + .for_each(|_| { + println!("Every 5 seconds"); + Ok(()) + }) + .map_err(|_| ()), + ); + })?; Ok(()) }