[fix](trx-frontend-http): compress images and fix SSE heartbeat timing

Resize favicon from 1024x1024 to 64x64 and logo from 1024x1024 to
256x256, reducing total image size from ~3 MB to ~70 KB.

Fix SSE heartbeat race condition where the 10s ping interval competed
with the 8s stale threshold, causing spurious reconnects. Now pings
every 5s server-side, with a 15s stale threshold and 5s check interval
client-side.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Stanislaw Grams <stanislawgrams@gmail.com>
This commit is contained in:
2026-02-07 14:50:25 +01:00
parent 2bda78d724
commit 20fbd3c2cd
4 changed files with 3 additions and 3 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 62 KiB

@@ -289,11 +289,11 @@ es.onmessage = (evt) => {
esHeartbeat = setInterval(() => { esHeartbeat = setInterval(() => {
const now = Date.now(); const now = Date.now();
if (now - lastEventAt > 8000) { if (now - lastEventAt > 15000) {
es.close(); es.close();
connect(); connect();
} }
}, 4000); }, 5000);
} }
async function postPath(path) { async function postPath(path) {
@@ -48,7 +48,7 @@ pub async fn events(state: web::Data<watch::Receiver<RigState>>) -> Result<HttpR
.map(|json| Ok::<Bytes, Error>(Bytes::from(format!("data: {json}\n\n")))) .map(|json| Ok::<Bytes, Error>(Bytes::from(format!("data: {json}\n\n"))))
}); });
let pings = IntervalStream::new(time::interval(Duration::from_secs(10))) let pings = IntervalStream::new(time::interval(Duration::from_secs(5)))
.map(|_| Ok::<Bytes, Error>(Bytes::from(": ping\n\n"))); .map(|_| Ok::<Bytes, Error>(Bytes::from(": ping\n\n")));
let stream = initial_stream.chain(select(pings, updates)); let stream = initial_stream.chain(select(pings, updates));