Tick service freshness age in dashboard
All checks were successful
deploy / deploy (push) Successful in 35s

Proof: npm test; npm run operator-dashboard:build; PYTHONPATH=. python3 test/render_release_manifest_test.py; PYTHONPATH=. python3 test/repo_deployments_test.py

Assumptions: Service freshness timestamps remain snapshot evidence from service state; the UI should show their advancing age rather than imply a refreshed service poll happened.

Still fake: Service health snapshots are not a venue event stream; exact quote settlement still requires durable inventory movement and no submitted-only evidence is treated as a completed trade.
This commit is contained in:
philipp 2026-04-15 17:08:20 +02:00
parent ddb360a34f
commit b735a54515
2 changed files with 20 additions and 2 deletions

View file

@ -1,8 +1,25 @@
import { useEffect, useState } from 'react';
import Pill from './Pill.jsx';
import { formatAge, formatBoolean, formatTimestamp } from '../lib/format.js';
import { formatAge, formatAgeFromTimestamp, formatBoolean, formatTimestamp } from '../lib/format.js';
function useNow(intervalMs = 1000) {
const [now, setNow] = useState(() => Date.now());
useEffect(() => {
const timer = window.setInterval(() => setNow(Date.now()), intervalMs);
return () => window.clearInterval(timer);
}, [intervalMs]);
return now;
}
export default function ServiceCard({ service }) {
const healthLabel = service.health_label || service.health_status || (service.reachable ? 'online' : 'offline');
const now = useNow();
const freshnessAge = service.freshness_at
? formatAgeFromTimestamp(service.freshness_at, now)
: formatAge(service.freshness_age_ms);
return (
<div className="service-card">
@ -14,7 +31,7 @@ export default function ServiceCard({ service }) {
<div>{`Reachable ${formatBoolean(service.reachable)}`}</div>
<div>{`Paused ${formatBoolean(service.paused)}`}</div>
<div>{`Armed ${formatBoolean(service.armed)}`}</div>
<div>{`Freshness ${formatAge(service.freshness_age_ms)}${service.freshness_age_ms == null ? '' : ' ago'}`}</div>
<div>{`Freshness ${freshnessAge}${freshnessAge === 'Unavailable' ? '' : ' ago'}`}</div>
<div>{`Freshness at ${formatTimestamp(service.freshness_at)}`}</div>
<div className="mono">{service.base_url}</div>
{service.last_error ? <div>{JSON.stringify(service.last_error)}</div> : null}

View file

@ -30,6 +30,7 @@ test('funds page no longer renders duplicate quote and submission tables', () =>
});
test('dashboard freshness surfaces show age and exact timestamp evidence', () => {
assert.match(serviceCardSource, /formatAgeFromTimestamp\(service\.freshness_at, now\)/);
assert.match(serviceCardSource, /formatTimestamp\(service\.freshness_at\)/);
assert.match(serviceCardSource, /Freshness at/);
assert.match(stylesSource, /\.quote-row-flash td/);