From e1f927a0a08c2a44032604b5a34cd2e76a45eb91 Mon Sep 17 00:00:00 2001 From: sargonas Date: Fri, 23 Jan 2026 14:17:32 -0800 Subject: [PATCH] added first seen to webui list --- web-interface.go | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/web-interface.go b/web-interface.go index 900f856..f42de91 100644 --- a/web-interface.go +++ b/web-interface.go @@ -26,9 +26,10 @@ type KnownSystemData struct { // PeerData holds peer info plus metadata for the template type PeerData struct { - System *System - LearnedAt int64 - IsNew bool // Discovered within last 24 hours + System *System + LearnedAt int64 + FirstSeenStr string // pre-convert LearnedAt to human readable + IsNew bool // Discovered within last 24 hours } // WebInterfaceData holds data for the web template @@ -136,9 +137,10 @@ func (w *WebInterface) buildTemplateData() WebInterfaceData { peers := make([]PeerData, 0, len(cachedPeers)) for _, cached := range cachedPeers { peers = append(peers, PeerData{ - System: cached.System, - LearnedAt: cached.LearnedAt.Unix(), - IsNew: cached.LearnedAt.After(oneDayAgo), + System: cached.System, + LearnedAt: cached.LearnedAt.Unix(), + FirstSeenStr: cached.LearnedAt.Format("01/02/06"), + IsNew: cached.LearnedAt.After(oneDayAgo), }) } @@ -531,7 +533,9 @@ const indexTemplate = ` 0%, 100% { box-shadow: 0 0 15px #8b5cf6, 0 0 30px #6366f1, 0 0 45px rgba(139, 92, 246, 0.3); } 50% { box-shadow: 0 0 20px #a78bfa, 0 0 40px #8b5cf6, 0 0 60px rgba(139, 92, 246, 0.4); } } - .coords { font-family: monospace; color: #888; font-size: 0.9em; } + .peer-meta { font-size: 0.85em; color: #888; } + .coords { font-family: monospace; } + .first-seen { color: #666; } #galaxy-map { width: 100%; height: 600px; @@ -798,7 +802,7 @@ const indexTemplate = `
{{.System.Name}}{{if .IsNew}} NEW{{end}}
{{.System.ID}}
-
({{printf "%.1f" .System.X}}, {{printf "%.1f" .System.Y}}, {{printf "%.1f" .System.Z}})
+
({{printf "%.1f" .System.X}}, {{printf "%.1f" .System.Y}}, {{printf "%.1f" .System.Z}}) · First seen: {{.FirstSeenStr}}
{{else}}

No peers in routing table

@@ -1576,6 +1580,14 @@ const indexTemplate = ` // Update peer list (sorted alphabetically) const peerListEl = document.getElementById('peer-list'); const oneDayAgo = Math.floor(Date.now() / 1000) - (24 * 60 * 60); + const formatDate = (ts) => { + if (!ts) return 'Unknown'; + const d = new Date(ts * 1000); + const mm = String(d.getMonth() + 1).padStart(2, '0'); + const dd = String(d.getDate()).padStart(2, '0'); + const yy = String(d.getFullYear()).slice(-2); + return mm + '/' + dd + '/' + yy; + }; if (peers.length === 0) { peerListEl.innerHTML = '

No peers in routing table

'; } else { @@ -1583,10 +1595,11 @@ const indexTemplate = ` peerListEl.innerHTML = sortedPeers.map(p => { const isNew = p.learned_at && p.learned_at > oneDayAgo; const newBadge = isNew ? ' NEW' : ''; + const firstSeen = formatDate(p.learned_at); return '
' + '
' + p.name + newBadge + '
' + '
' + p.id + '
' + - '
(' + p.x.toFixed(1) + ', ' + p.y.toFixed(1) + ', ' + p.z.toFixed(1) + ')
' + + '
(' + p.x.toFixed(1) + ', ' + p.y.toFixed(1) + ', ' + p.z.toFixed(1) + ') · First seen: ' + firstSeen + '
' + '
'; }).join(''); }