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