You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* web: admin revamp — operator's terminal direction + IA shuffle + bucketed metrics
Visual: replace Inter with JetBrains Mono everywhere; sharper geometry
(rounded-md, 1px borders); rate-first home strip with ↓/↑ as the page's
anchor; full-width host throughput chart; lowercase page titles; hover-
only conn kill; logs zebra rows.
IA: flatten the 8-page / 2-group sidebar to 6 flat items. Home subsumes
the old standalone Node page (host charts embedded). Settings owns the
Updates flow as an embedded panel. /xray/users → /users, /xray/conns →
/conns. Legacy paths redirect.
Metrics store: query API now accepts a `step` (seconds) param. Node
metrics are bucket-averaged via GROUP BY (timestamp/step)*step; rule
metrics keep the last sample per (label,remote,bucket) so the SPA's
delta-on-consecutive-points trend math stays correct. Frontend picks a
step per window so 30d windows return ≤360 points.
New /api/v1/overview aggregate. XrayServer satisfies a new
glue.XrayStatus interface and is wired post-construction so web/
doesn't need to import pkg/xray. Saves the home page three RTs per
poll tick.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* web: fix y-axis truncation, enable metric_reader on darwin, simplify pass
Visual fix: chart y-axis was clipping "12 MB/s" to "2 MB/s" because the
default uPlot gutter is too narrow for 7-char byte labels. New
bytesShort() helper renders compact "12M/s" / "830K/s" form for axes;
keep verbose bytes() for tabular contexts.
Darwin metric_reader: node_darwin.go was a no-op since 2025-11-08 with a
stale "node_exporter has compatibility issues on macOS" comment. v1.10.2
ships working darwin collectors for cpu / meminfo / loadavg / filesystem
/ netdev — verified all the metrics ParseNodeMetrics expects are
emitted. Wire the same NewNodeCollector path as linux, with
--no-collector.thermal to silence "no CPU power status has been
recorded" log noise.
Simplify pass over the PR diff:
- Extract zapLevelToSlogLevel to internal/metrics/log_level.go (was
duplicated verbatim across node_linux.go and node_darwin.go).
- QueryRuleMetric: deduplicate the column list and WHERE filters
between bucketed and raw branches; share whereSQL/whereArgs.
- OverviewResp: drop redundant NetRateIn/NetRateOut — they duplicated
host.network_in/out. SPA reads host() directly.
- Home page: memoize series() (was re-sorting + re-allocating every
read across 3 charts); precompute topUsers scoring (was running
recentBytes(u) O(n log n) times inside sort comparator); extract
<ChartCard> + <ListHeader> components for the three near-identical
card wrappers; delete section-divider comments and dead `void poll`.
- Settings + UpdatesPanel: lowercase CardHeader titles for consistency
with the rest of the revamped pages.
- handler_api.go::Overview: hoist time.Now() to a local.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments