/* === CoreScope β observers.js === */ 'use strict'; (function () { let observers = []; let obsSkewMap = {}; // observerID β {offsetSec, samples} let wsHandler = null; let refreshTimer = null; let regionChangeHandler = null; function init(app) { app.innerHTML = `
| Status | Name | Region | Last Status | Last Packet | Packet Health | Total Packets | Packets/Hour | Clock Offset | Uptime |
|---|---|---|---|---|---|---|---|---|---|
| ${shape} ${h.label} | ${o.name || o.id} | ${o.iata ? `${o.iata}` : 'β'} | ${timeAgo(o.last_seen)} | ${o.last_packet_at ? timeAgo(o.last_packet_at) : 'β'} | ${packetBadge(o)} | ${(o.packet_count || 0).toLocaleString()} | ${sparkBar(o.packetsLastHour || 0, maxPktsHr)} | ${(function() { var sk = obsSkewMap[o.id]; if (!sk || sk.samples == null || sk.samples === 0) return 'β'; var sev = observerSkewSeverity(sk.offsetSec); return renderSkewBadge(sev, sk.offsetSec) + ' (' + sk.samples + ')'; })()} | ${uptimeStr(o.first_seen)} |