refactor(proxy): centralise monitoring API contract values
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
d1a899805e
commit
8a9046356e
3 changed files with 48 additions and 13 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
31
api_rows.go
31
api_rows.go
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue