add observer count

This commit is contained in:
Edgar 2023-10-04 10:39:07 +02:00
parent 457c4c7bf4
commit 73321366ce
No known key found for this signature in database
GPG Key ID: 70ADAE8F35904387
4 changed files with 37 additions and 8 deletions

30
Cargo.lock generated
View File

@ -1151,9 +1151,9 @@ dependencies = [
[[package]]
name = "moka"
version = "0.12.0"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8dc65d4615c08c8a13d91fd404b5a2a4485ba35b4091e3315cf8798d280c2f29"
checksum = "d8017ec3548ffe7d4cef7ac0e12b044c01164a74c0f3119420faeaf13490ad8b"
dependencies = [
"async-lock",
"async-trait",
@ -1606,9 +1606,9 @@ checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
[[package]]
name = "reqwest"
version = "0.11.20"
version = "0.11.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
dependencies = [
"base64",
"bytes",
@ -1631,6 +1631,7 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
"system-configuration",
"tokio",
"tokio-native-tls",
"tower-service",
@ -2254,6 +2255,27 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
name = "system-configuration"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
dependencies = [
"bitflags 1.3.2",
"core-foundation",
"system-configuration-sys",
]
[[package]]
name = "system-configuration-sys"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "tagptr"
version = "0.2.0"

View File

@ -9,6 +9,9 @@ homepage = "https://github.com/edg-l/teeobserver"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[profile.release]
lto = "fat"
[profile.dev.package.sqlx-macros]
opt-level = 3

View File

@ -51,6 +51,7 @@ Useful typescript interfaces:
// Event structure send to the websocket
export interface MasterEvent {
observers: number
event: Event
time: string
}

View File

@ -9,8 +9,8 @@ use axum::{
TypedHeader,
};
use serde_json::json;
use time::{OffsetDateTime, format_description};
use tokio::sync::broadcast;
use time::{format_description, OffsetDateTime};
use tokio::sync::broadcast::{self, Sender};
use tracing::{error, info};
use crate::{structures::MasterEvent, AppState};
@ -34,7 +34,7 @@ pub async fn ws_handler(
ws.on_failed_upgrade(|error| {
error!("error upgrading connection: {error}");
})
.on_upgrade(move |socket| handle_socket(socket, addr, rx))
.on_upgrade(move |socket| handle_socket(socket, addr, rx, state.events_sender))
}
/// Actual websocket statemachine (one will be spawned per connection)
@ -42,6 +42,7 @@ async fn handle_socket(
mut socket: WebSocket,
who: SocketAddr,
mut events_rx: broadcast::Receiver<Arc<(MasterEvent, OffsetDateTime)>>,
events_tx: Arc<Sender<Arc<(MasterEvent, OffsetDateTime)>>>,
) {
loop {
tokio::select! {
@ -57,7 +58,7 @@ async fn handle_socket(
}
},
Ok(event) = events_rx.recv() => {
if let Err(e) = handle_event(&mut socket, event).await {
if let Err(e) = handle_event(&mut socket, &events_tx, event).await {
error!("error sending event: {e}");
}
}
@ -67,9 +68,11 @@ async fn handle_socket(
async fn handle_event(
sock: &mut WebSocket,
sender: &Sender<Arc<(MasterEvent, OffsetDateTime)>>,
event: Arc<(MasterEvent, OffsetDateTime)>,
) -> Result<(), axum::Error> {
let payload = json!({
"observers": sender.receiver_count(),
"time": event.1.format(&format_description::well_known::Iso8601::DEFAULT).unwrap(),
"event": event.0
});