From 0dd5908be7d03c195e006f528257877bcf2bd504 Mon Sep 17 00:00:00 2001 From: Yureka Date: Thu, 26 Mar 2026 11:58:00 +0100 Subject: [PATCH 1/2] GlobalEvents: Use proper await instead of sleep loop --- vicky/src/bin/vicky/events.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/vicky/src/bin/vicky/events.rs b/vicky/src/bin/vicky/events.rs index 5c89e45..5c87708 100644 --- a/vicky/src/bin/vicky/events.rs +++ b/vicky/src/bin/vicky/events.rs @@ -1,7 +1,6 @@ use rocket::response::stream::{Event, EventStream}; use rocket::{State, get}; -use std::time; -use tokio::sync::broadcast::{self, error::TryRecvError}; +use tokio::sync::broadcast::{self, error::RecvError}; use vickylib::vicky::events::GlobalEvent; #[get("/")] @@ -13,21 +12,18 @@ pub fn get_global_events( let mut global_events_rx = global_events.subscribe(); loop { - - let read_val = global_events_rx.try_recv(); + let read_val = global_events_rx.recv().await; match read_val { Ok(v) => { yield Event::json(&v); }, - Err(TryRecvError::Closed) => { - break; + Err(RecvError::Closed) => { + panic!("global_events closed"); }, - Err(TryRecvError::Lagged(_)) => { + Err(RecvError::Lagged(_)) => { // Immediate Retry, doing our best effort here. - }, - Err(TryRecvError::Empty) => { - tokio::time::sleep(time::Duration::from_millis(100)).await; + }, } } From bbda9954939459b02c7396045ad8ccff4aa7fe08 Mon Sep 17 00:00:00 2001 From: Yureka Date: Thu, 26 Mar 2026 12:10:01 +0100 Subject: [PATCH 2/2] dashboard: refresh when events were missed --- dashboard/src/hooks/useEventSource.tsx | 3 +++ vicky/src/bin/vicky/events.rs | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dashboard/src/hooks/useEventSource.tsx b/dashboard/src/hooks/useEventSource.tsx index 38eeabe..037aa5b 100644 --- a/dashboard/src/hooks/useEventSource.tsx +++ b/dashboard/src/hooks/useEventSource.tsx @@ -60,6 +60,9 @@ const useEventSource = (url: string, callback: (evt: string) => void, allowStart const useEventSourceJSON = (url: string, callback: (evt: T) => void) => { const onMessage = useCallback((evt: string) => { const x = JSON.parse(evt); + if (x === "lagged") { + window.location.reload(); + } return callback(x); }, [callback]) diff --git a/vicky/src/bin/vicky/events.rs b/vicky/src/bin/vicky/events.rs index 5c87708..c06c438 100644 --- a/vicky/src/bin/vicky/events.rs +++ b/vicky/src/bin/vicky/events.rs @@ -22,8 +22,8 @@ pub fn get_global_events( panic!("global_events closed"); }, Err(RecvError::Lagged(_)) => { - // Immediate Retry, doing our best effort here. - + // We missed some events, let the client know + yield Event::json(&"lagged"); }, } }