From e7cec774d8c136b44a8aa3fe29d39e00430b0e26 Mon Sep 17 00:00:00 2001 From: didier amyot Date: Sun, 5 Feb 2023 20:13:24 -0500 Subject: [PATCH] more shit. --- Cargo.lock | 93 +++++++++++++++++++++++++++++++++++++--------- Cargo.toml | 1 + src/webui/mod.rs | 30 +++++++++++++-- src/webui/views.rs | 16 ++++---- 4 files changed, 112 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab2ba50..770591d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,6 +645,7 @@ dependencies = [ "clap", "clap-verbosity-flag", "fraction", + "futures", "hex", "home", "lazy_static", @@ -739,32 +740,90 @@ dependencies = [ "libc", ] +[[package]] +name = "futures" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +dependencies = [ + "futures-core", + "futures-sink", +] + [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" [[package]] -name = "futures-sink" -version = "0.3.25" +name = "futures-executor" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" - -[[package]] -name = "futures-task" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" - -[[package]] -name = "futures-util" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" dependencies = [ "futures-core", "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" + +[[package]] +name = "futures-macro" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" + +[[package]] +name = "futures-task" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" + +[[package]] +name = "futures-util" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", "pin-project-lite", "pin-utils", "slab", diff --git a/Cargo.toml b/Cargo.toml index 9ac8095..da60826 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,7 @@ minijinja = { version = "0.30.2", features = ["source"] } actix-utils = "3.0.1" actix-web-lab = "0.18.9" minijinja-autoreload = "0.30.2" +futures = "0.3.26" [dependencies.apache-avro] version = "0.14.0" diff --git a/src/webui/mod.rs b/src/webui/mod.rs index 296a8e7..aeee030 100644 --- a/src/webui/mod.rs +++ b/src/webui/mod.rs @@ -1,3 +1,5 @@ +#![feature(future_join)] + mod views; mod config; @@ -7,6 +9,10 @@ use minijinja_autoreload::AutoReloader; use std::io::{Error, ErrorKind}; use std::path::Path; use std::{collections::HashMap, env, fs, io, path::PathBuf}; +use tokio::time::{sleep, Duration}; +use futures::{pin_mut, select, FutureExt}; + + use actix_web::{ dev::ServiceResponse, @@ -55,6 +61,15 @@ impl FromRequest for MiniJinjaRenderer { } } +async fn print_shit() -> std::io::Result<()>{ + let mut i = 0; + loop { + sleep(Duration::from_millis(1000)).await; + println!("he he! {:?}", i); + i +=1; + } +} + #[tokio::main] pub async fn web_ui_main(port: u16, enable_template_autoreload: bool) -> std::io::Result<()> { // The closure is invoked every time the environment is outdated to recreate it. @@ -74,7 +89,7 @@ pub async fn web_ui_main(port: u16, enable_template_autoreload: bool) -> std::io let tmpl_reloader = web::Data::new(tmpl_reloader); - HttpServer::new(move || { + let server = HttpServer::new(move || { App::new() .app_data(tmpl_reloader.clone()) .service(views::index) @@ -86,9 +101,16 @@ pub async fn web_ui_main(port: u16, enable_template_autoreload: bool) -> std::io .wrap(Logger::default()) }) .workers(2) - .bind(("0.0.0.0", port))? - .run() - .await + .bind(("0.0.0.0", port))?; + + let t1 = server.run().fuse(); + let t2 = print_shit().fuse(); + pin_mut!(t1, t2); + + select!{ + x = t1 => x, + y = t2 => y, + } } /// Error handler for a 404 Page not found error. diff --git a/src/webui/views.rs b/src/webui/views.rs index 2c0907c..acbaa78 100644 --- a/src/webui/views.rs +++ b/src/webui/views.rs @@ -3,6 +3,7 @@ use actix_web::http::header::q; use clap::builder::TypedValueParser; use minijinja::context; use serde::Deserialize; + use std::collections::HashMap; use crate::webui::MiniJinjaRenderer; @@ -10,7 +11,6 @@ use crate::webui::MiniJinjaRenderer; #[actix_web::get("/")] pub async fn index( tmpl_env: MiniJinjaRenderer, - query: web::Query>, ) -> actix_web::Result { tmpl_env.render("index.html", ()) } @@ -18,7 +18,6 @@ pub async fn index( #[actix_web::get("/actions")] pub async fn actions( tmpl_env: MiniJinjaRenderer, - query: web::Query>, ) -> actix_web::Result { tmpl_env.render("actions.html", ()) } @@ -26,7 +25,6 @@ pub async fn actions( #[actix_web::get("/overview")] pub async fn overview( tmpl_env: MiniJinjaRenderer, - query: web::Query>, ) -> actix_web::Result { tmpl_env.render("overview.html", ()) } @@ -35,7 +33,7 @@ pub async fn overview( pub async fn overview_submit_button( req: HttpRequest, tmpl_env: MiniJinjaRenderer, - query: web::Query> + query: web::Query>, ) -> actix_web::Result { let ctx = context! { event_type => query.get("event_type").unwrap_or(&"".to_string()), @@ -43,15 +41,19 @@ pub async fn overview_submit_button( tmpl_env.render("partials/overview/submit_button.html", ctx) } +#[derive(Deserialize, Debug)] +struct CreateEventPayload { + event: String, + event_type: String, +} + #[actix_web::post("/v1/events/{event_type}")] pub async fn push_event( req: HttpRequest, tmpl_env: MiniJinjaRenderer, - query: web::Query>, + web::Form(form): web::Form, ) -> actix_web::Result { - println!(">> {:?}", req); let shit = req.match_info().get("event_type").unwrap(); - let event = req.match_info().get("event").unwrap(); let ctx = context! { event_type => shit, };