diff --git a/public/analytics.js b/public/analytics.js index f0440bd..d1c1bee 100644 --- a/public/analytics.js +++ b/public/analytics.js @@ -150,13 +150,13 @@ el.innerHTML = `
-
${(rf.totalAllPackets || rf.totalPackets).toLocaleString()}
-
Total Packets
+
${(rf.totalTransmissions || rf.totalAllPackets || rf.totalPackets).toLocaleString()}
+
Total Transmissions
${sparkSvg(rf.packetsPerHour.map(h=>h.count), 'var(--accent)')}
${rf.totalPackets.toLocaleString()}
-
With Signal Data
+
Observations with Signal
${topo.uniqueNodes}
@@ -1167,7 +1167,7 @@ const enriched = nodes.filter(n => healthMap[n.public_key]).map(n => ({ ...n, health: { stats: healthMap[n.public_key].stats, observers: healthMap[n.public_key].observers } })); // Compute rankings - const byPackets = [...enriched].sort((a, b) => (b.health.stats.totalPackets || 0) - (a.health.stats.totalPackets || 0)); + const byPackets = [...enriched].sort((a, b) => (b.health.stats.totalTransmissions || b.health.stats.totalPackets || 0) - (a.health.stats.totalTransmissions || a.health.stats.totalPackets || 0)); const bySnr = [...enriched].filter(n => n.health.stats.avgSnr != null).sort((a, b) => b.health.stats.avgSnr - a.health.stats.avgSnr); const byObservers = [...enriched].sort((a, b) => (b.health.observers?.length || 0) - (a.health.observers?.length || 0)); const byRecent = [...enriched].filter(n => n.health.stats.lastHeard).sort((a, b) => new Date(b.health.stats.lastHeard) - new Date(a.health.stats.lastHeard)); @@ -1223,7 +1223,7 @@ return ` ${nodeLink(n)} ${n.role} - ${s.totalPackets || 0} + ${s.totalTransmissions || s.totalPackets || 0} ${s.avgSnr != null ? s.avgSnr.toFixed(1) + ' dB' : 'โ€”'} ${n.health.observers?.length || 0} ${s.lastHeard ? timeAgo(s.lastHeard) : 'โ€”'} @@ -1240,7 +1240,7 @@ ${i + 1} ${nodeLink(n)}${claimedBadge(n)} ${n.role} - ${n.health.stats.totalPackets || 0} + ${n.health.stats.totalTransmissions || n.health.stats.totalPackets || 0} ${n.health.stats.packetsToday || 0} ๐Ÿ“Š `).join('')} diff --git a/public/home.js b/public/home.js index e75fa5e..b07fb35 100644 --- a/public/home.js +++ b/public/home.js @@ -373,7 +373,7 @@ const el = document.getElementById('homeStats'); if (!el) return; el.innerHTML = ` -
${s.totalPackets ?? 'โ€”'}
Packets
+
${s.totalTransmissions ?? s.totalPackets ?? 'โ€”'}
Transmissions
${s.totalNodes ?? 'โ€”'}
Nodes
${s.totalObservers ?? 'โ€”'}
Observers
${s.packetsLast24h ?? 'โ€”'}
Last 24h
diff --git a/public/index.html b/public/index.html index c64cf4a..34d403e 100644 --- a/public/index.html +++ b/public/index.html @@ -22,7 +22,7 @@ - + - - + + - + - - + + - + diff --git a/public/live.js b/public/live.js index 4f0e72f..8a5eb91 100644 --- a/public/live.js +++ b/public/live.js @@ -1020,7 +1020,7 @@ ${hasLoc ? `Location${n.lat.toFixed(5)}, ${n.lon.toFixed(5)}` : ''} ${stats.avgSnr != null ? `Avg SNR${stats.avgSnr.toFixed(1)} dB` : ''} ${stats.avgHops != null ? `Avg Hops${stats.avgHops.toFixed(1)}` : ''} - ${stats.totalPackets ? `Total Packets${stats.totalPackets}` : ''} + ${stats.totalTransmissions || stats.totalPackets ? `Total Packets${stats.totalTransmissions || stats.totalPackets}` : ''} `; if (observers.length) { @@ -1034,7 +1034,7 @@ html += `

Recent Packets

` + recent.slice(0, 10).map(p => `
- ${escapeHtml(p.payload_type || '?')} + ${escapeHtml(p.payload_type || '?')}${p.observation_count > 1 ? ' ๐Ÿ‘ ' + p.observation_count + '' : ''} ${p.timestamp ? timeAgo(p.timestamp) : 'โ€”'}
`).join('') + '
'; @@ -1474,6 +1474,7 @@ const text = payload.text || payload.name || ''; const preview = text ? ' ' + (text.length > 35 ? text.slice(0, 35) + 'โ€ฆ' : text) : ''; const hopStr = hops.length ? `${hops.length}โ‡ข` : ''; + const obsBadge = pkt.observation_count > 1 ? `๐Ÿ‘ ${pkt.observation_count}` : ''; const item = document.createElement('div'); item.className = 'live-feed-item live-feed-enter'; @@ -1483,7 +1484,7 @@ item.innerHTML = ` ${icon} ${typeName} - ${hopStr} + ${hopStr}${obsBadge} ${escapeHtml(preview)} ${new Date(pkt._ts || Date.now()).toLocaleTimeString([], {hour:'2-digit',minute:'2-digit',second:'2-digit'})} `; diff --git a/public/node-analytics.js b/public/node-analytics.js index 20d9a8e..db87bc2 100644 --- a/public/node-analytics.js +++ b/public/node-analytics.js @@ -55,7 +55,7 @@
โ† Back to ${nodeName}

๐Ÿ“Š ${nodeName} โ€” Analytics

-
${n.role || 'Unknown role'} ยท ${s.totalPackets} packets in ${days}d window
+
${n.role || 'Unknown role'} ยท ${s.totalTransmissions || s.totalPackets} packets in ${days}d window
diff --git a/public/nodes.js b/public/nodes.js index 11c07b3..a9f2621 100644 --- a/public/nodes.js +++ b/public/nodes.js @@ -128,7 +128,7 @@
Last Heard
${lastHeard ? timeAgo(lastHeard) : (n.last_seen ? timeAgo(n.last_seen) : 'โ€”')}
First Seen
${n.first_seen ? new Date(n.first_seen).toLocaleString() : 'โ€”'}
-
Total Packets
${stats.totalPackets || n.advert_count || 0}
+
Total Packets
${stats.totalTransmissions || stats.totalPackets || n.advert_count || 0}${stats.totalObservations && stats.totalObservations !== (stats.totalTransmissions || stats.totalPackets) ? ' (seen ' + stats.totalObservations + 'ร—)' : ''}
Packets Today
${stats.packetsToday || 0}
${stats.avgSnr != null ? `
Avg SNR
${stats.avgSnr.toFixed(1)} dB
` : ''} ${stats.avgHops ? `
Avg Hops
${stats.avgHops}
` : ''} @@ -161,9 +161,10 @@ const obs = p.observer_name || p.observer_id; const snr = p.snr != null ? ` ยท SNR ${p.snr}dB` : ''; const rssi = p.rssi != null ? ` ยท RSSI ${p.rssi}dBm` : ''; + const obsBadge = p.observation_count > 1 ? ` ๐Ÿ‘ ${p.observation_count}` : ''; return `
${timeAgo(p.timestamp)} - ${typeLabel}${detail}${obs ? ' via ' + escapeHtml(obs) : ''}${snr}${rssi} + ${typeLabel}${detail}${obsBadge}${obs ? ' via ' + escapeHtml(obs) : ''}${snr}${rssi} Analyze โ†’
`; }).join('') : '
No recent packets
'} @@ -426,7 +427,7 @@ const role = (n.role || '').toLowerCase(); const { degradedMs, silentMs } = getHealthThresholds(role); const statusLabel = statusAge < degradedMs ? '๐ŸŸข Active' : statusAge < silentMs ? '๐ŸŸก Degraded' : '๐Ÿ”ด Silent'; - const totalPackets = stats.totalPackets || n.advert_count || 0; + const totalPackets = stats.totalTransmissions || stats.totalPackets || n.advert_count || 0; panel.innerHTML = `
@@ -480,6 +481,7 @@