diff --git a/Cargo.lock b/Cargo.lock
index 076f985..9991f62 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -353,6 +353,17 @@ version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
+[[package]]
+name = "async-channel"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
[[package]]
name = "async-trait"
version = "0.1.63"
@@ -529,6 +540,15 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "concurrent-queue"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e"
+dependencies = [
+ "crossbeam-utils",
+]
+
[[package]]
name = "convert_case"
version = "0.4.0"
@@ -564,6 +584,15 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+dependencies = [
+ "cfg-if",
+]
+
[[package]]
name = "crypto-common"
version = "0.1.6"
@@ -643,6 +672,7 @@ dependencies = [
"actix-web",
"actix-web-lab",
"apache-avro",
+ "async-channel",
"clap",
"clap-verbosity-flag",
"fraction",
@@ -664,6 +694,12 @@ dependencies = [
"tokio",
]
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
[[package]]
name = "fallible-iterator"
version = "0.2.0"
diff --git a/Cargo.toml b/Cargo.toml
index 6db9a5d..da5930e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -29,6 +29,7 @@ actix-web-lab = "0.18.9"
minijinja-autoreload = "0.30.2"
futures = "0.3.26"
actix-files = "0.6.2"
+async-channel = "1.8.0"
[dependencies.apache-avro]
version = "0.14.0"
diff --git a/resources/templates/partials/actions/create_user.html b/resources/templates/partials/actions/create_user.html
index 0df37e0..ecb83a4 100644
--- a/resources/templates/partials/actions/create_user.html
+++ b/resources/templates/partials/actions/create_user.html
@@ -1,10 +1,15 @@
-
-
+
+
+
+
+
{%include "partials/actions/submit_button.html"%}
diff --git a/src/webui/mod.rs b/src/webui/mod.rs
index 09da31c..1d73635 100644
--- a/src/webui/mod.rs
+++ b/src/webui/mod.rs
@@ -1,29 +1,28 @@
#![feature(future_join)]
+use std::{collections::HashMap, env, fs, io, path::PathBuf};
+use std::io::{Error, ErrorKind};
+use std::path::Path;
+
+use actix_files;
+use actix_utils::future::{ready, Ready};
+use actix_web::{
+ App,
+ dev::ServiceResponse,
+ error,
+ FromRequest,
+ http::{header::ContentType, StatusCode}, HttpRequest, HttpResponse, HttpServer, middleware::{ErrorHandlerResponse, ErrorHandlers, Logger}, Responder, Result, web,
+};
+use actix_web_lab::respond::Html;
+use async_channel;
+use futures::{FutureExt, pin_mut, select};
+use minijinja;
+use minijinja_autoreload::AutoReloader;
+use tokio::time::{Duration, sleep};
+
mod views;
mod config;
-use actix_utils::future::{ready, Ready};
-use minijinja;
-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_files;
-
-
-
-use actix_web::{
- dev::ServiceResponse,
- error,
- http::{header::ContentType, StatusCode},
- middleware::{ErrorHandlerResponse, ErrorHandlers, Logger},
- web, App, FromRequest, HttpRequest, HttpResponse, HttpServer, Responder, Result,
-};
-use actix_web_lab::respond::Html;
-
struct MiniJinjaRenderer {
tmpl_env: web::Data,
}
@@ -62,12 +61,16 @@ impl FromRequest for MiniJinjaRenderer {
}
}
-async fn print_shit() -> std::io::Result<()>{
- let mut i = 0;
+async fn worker_loop(r: async_channel::Receiver) -> io::Result<()> {
loop {
- sleep(Duration::from_millis(10_000)).await;
- println!("Loop on a different thread {:?}", i);
- i +=1;
+ let x = r.recv().await;
+ match x {
+ Ok(v) => println!("Processed value: {:?}", v),
+ Err(e) => {
+ println!("Error: {:?}", e);
+ return Ok(())
+ }
+ }
}
}
@@ -88,16 +91,16 @@ pub async fn web_ui_main(port: u16, enable_template_autoreload: bool) -> std::io
Ok(env)
});
+ let (s, r) = async_channel::unbounded::();
+
let tmpl_reloader = web::Data::new(tmpl_reloader);
let server = HttpServer::new(move || {
App::new()
.app_data(tmpl_reloader.clone())
- .service(
- actix_files::Files::new("/static", "./resources/static/")
- .show_files_listing()
- .use_last_modified(true),
- )
+ .app_data(web::Data::new(s.clone()))
+ .service(actix_files::Files::new("/static", "./resources/static/")
+ .use_last_modified(true))
.service(views::index)
.service(views::actions)
.service(views::overview)
@@ -111,7 +114,7 @@ pub async fn web_ui_main(port: u16, enable_template_autoreload: bool) -> std::io
.bind(("0.0.0.0", port))?;
let t1 = server.run().fuse();
- let t2 = print_shit().fuse();
+ let t2 = worker_loop(r).fuse();
pin_mut!(t1, t2);
select!{
diff --git a/src/webui/views.rs b/src/webui/views.rs
index 36e71ff..86047a4 100644
--- a/src/webui/views.rs
+++ b/src/webui/views.rs
@@ -84,10 +84,12 @@ struct CreateEventPayload {
pub async fn push_event(
req: HttpRequest,
tmpl_env: MiniJinjaRenderer,
+ event_channel: web::Data>,
web::Json(form): web::Json,
) -> actix_web::Result {
let shit = req.match_info().get("event_type").unwrap();
println!("payload: {:?}", form);
+ let _ = event_channel.send(56).await;
let ctx = context! {
event_type => shit,
};