feat: display clock delta history in UI

Co-authored-by: aider (gemini/gemini-2.5-pro-preview-05-06) <aider@aider.chat>
This commit is contained in:
Chaos Rogers 2025-07-28 23:14:31 +01:00
parent 7738d14097
commit b803de93de
3 changed files with 9 additions and 0 deletions

View file

@ -26,6 +26,7 @@ struct ApiStatus {
ntp_active: bool,
interfaces: Vec<String>,
hardware_offset_ms: i64,
clock_delta_history: Vec<i64>,
}
// AppState to hold shared data
@ -76,6 +77,8 @@ async fn get_status(data: web::Data<AppState>) -> impl Responder {
.map(|ifa| ifa.ip().to_string())
.collect();
let clock_delta_history: Vec<i64> = state.clock_delta_history.iter().cloned().collect();
HttpResponse::Ok().json(ApiStatus {
ltc_status,
ltc_timecode,
@ -89,6 +92,7 @@ async fn get_status(data: web::Data<AppState>) -> impl Responder {
ntp_active,
interfaces,
hardware_offset_ms: hw_offset_ms,
clock_delta_history,
})
}
@ -215,6 +219,7 @@ mod tests {
assert_eq!(resp.ltc_timecode, "01:02:03:04");
assert_eq!(resp.frame_rate, "25.00fps");
assert_eq!(resp.hardware_offset_ms, 10);
assert_eq!(resp.clock_delta_history, vec![4, 5, 6]);
}
#[actix_web::test]

View file

@ -32,6 +32,7 @@
<h2>Clock Offset</h2>
<p>Delta: <span id="delta-ms">--</span> ms (<span id="delta-frames">--</span> frames)</p>
<p>Jitter: <span id="jitter-status">--</span></p>
<p>History (ms): <span id="delta-history">--</span></p>
</div>
<!-- Network Interfaces -->

View file

@ -10,6 +10,7 @@ document.addEventListener('DOMContentLoaded', () => {
deltaMs: document.getElementById('delta-ms'),
deltaFrames: document.getElementById('delta-frames'),
jitterStatus: document.getElementById('jitter-status'),
deltaHistory: document.getElementById('delta-history'),
interfaces: document.getElementById('interfaces'),
};
@ -43,6 +44,8 @@ document.addEventListener('DOMContentLoaded', () => {
statusElements.jitterStatus.textContent = data.jitter_status;
statusElements.jitterStatus.className = data.jitter_status.toLowerCase();
statusElements.deltaHistory.textContent = data.clock_delta_history.join(', ');
statusElements.interfaces.innerHTML = '';
if (data.interfaces.length > 0) {
data.interfaces.forEach(ip => {