refactor(proxy): centralise monitoring API contract values

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-05 03:30:40 +00:00
parent d1a899805e
commit 8a9046356e
3 changed files with 48 additions and 13 deletions

View file

@ -28,9 +28,9 @@ func RegisterRoutes(router RouteRegistrar, p *proxy.Proxy) {
if router == nil || p == nil {
return
}
registerJSONGetRoute(router, p, "/1/summary", func() any { return p.SummaryDocument() })
registerJSONGetRoute(router, p, "/1/workers", func() any { return p.WorkersDocument() })
registerJSONGetRoute(router, p, "/1/miners", func() any { return p.MinersDocument() })
registerJSONGetRoute(router, p, proxy.MonitoringRouteSummary, func() any { return p.SummaryDocument() })
registerJSONGetRoute(router, p, proxy.MonitoringRouteWorkers, func() any { return p.WorkersDocument() })
registerJSONGetRoute(router, p, proxy.MonitoringRouteMiners, func() any { return p.MinersDocument() })
}
func registerJSONGetRoute(router RouteRegistrar, proxyInstance *proxy.Proxy, pattern string, renderDocument func() any) {

View file

@ -1,5 +1,36 @@
package proxy
const (
// MonitoringRouteSummary documents the summary endpoint path.
//
// http.Get("http://127.0.0.1:8080" + proxy.MonitoringRouteSummary)
MonitoringRouteSummary = "/1/summary"
// MonitoringRouteWorkers documents the workers endpoint path.
//
// http.Get("http://127.0.0.1:8080" + proxy.MonitoringRouteWorkers)
MonitoringRouteWorkers = "/1/workers"
// MonitoringRouteMiners documents the miners endpoint path.
//
// http.Get("http://127.0.0.1:8080" + proxy.MonitoringRouteMiners)
MonitoringRouteMiners = "/1/miners"
// SummaryDocumentVersion is the monitoring API version.
//
// doc := proxy.SummaryDocument{Version: proxy.SummaryDocumentVersion}
SummaryDocumentVersion = "1.0.0"
)
var (
// MinersDocumentFormat defines the fixed /1/miners column order.
//
// doc := proxy.MinersDocument{Format: append([]string(nil), proxy.MinersDocumentFormat...)}
MinersDocumentFormat = []string{"id", "ip", "tx", "rx", "state", "diff", "user", "password", "rig_id", "agent"}
workerHashrateWindows = [5]int{60, 600, 3600, 43200, 86400}
)
// WorkerRow{"rig-alpha", "10.0.0.1", 1, 10, 0, 0, 10000, 1712232000, 1.0, 1.0, 1.0, 1.0, 1.0}
type WorkerRow [13]any

View file

@ -636,9 +636,9 @@ func (p *Proxy) startMonitoringServer() bool {
return false
}
mux := http.NewServeMux()
p.registerMonitoringRoute(mux, "/1/summary", func() any { return p.SummaryDocument() })
p.registerMonitoringRoute(mux, "/1/workers", func() any { return p.WorkersDocument() })
p.registerMonitoringRoute(mux, "/1/miners", func() any { return p.MinersDocument() })
p.registerMonitoringRoute(mux, MonitoringRouteSummary, func() any { return p.SummaryDocument() })
p.registerMonitoringRoute(mux, MonitoringRouteWorkers, func() any { return p.WorkersDocument() })
p.registerMonitoringRoute(mux, MonitoringRouteMiners, func() any { return p.MinersDocument() })
addr := net.JoinHostPort(p.config.HTTP.Host, strconv.Itoa(int(p.config.HTTP.Port)))
listener, err := net.Listen("tcp", addr)
if err != nil {
@ -710,7 +710,7 @@ func (p *Proxy) SummaryDocument() SummaryDocument {
now, max := p.MinerCount()
upstreams := p.Upstreams()
return SummaryDocument{
Version: "1.0.0",
Version: SummaryDocumentVersion,
Mode: p.Mode(),
Hashrate: HashrateDocument{
Total: summary.Hashrate,
@ -743,6 +743,10 @@ func (p *Proxy) WorkersDocument() WorkersDocument {
records := p.WorkerRecords()
rows := make([]WorkerRow, 0, len(records))
for _, record := range records {
hashrates := make([]float64, len(workerHashrateWindows))
for index, seconds := range workerHashrateWindows {
hashrates[index] = record.Hashrate(seconds)
}
rows = append(rows, WorkerRow{
record.Name,
record.LastIP,
@ -752,11 +756,11 @@ func (p *Proxy) WorkersDocument() WorkersDocument {
record.Invalid,
record.Hashes,
unixOrZero(record.LastHashAt),
record.Hashrate(60),
record.Hashrate(600),
record.Hashrate(3600),
record.Hashrate(43200),
record.Hashrate(86400),
hashrates[0],
hashrates[1],
hashrates[2],
hashrates[3],
hashrates[4],
})
}
return WorkersDocument{
@ -787,7 +791,7 @@ func (p *Proxy) MinersDocument() MinersDocument {
})
}
return MinersDocument{
Format: []string{"id", "ip", "tx", "rx", "state", "diff", "user", "password", "rig_id", "agent"},
Format: append([]string(nil), MinersDocumentFormat...),
Miners: rows,
}
}