nwaku/waku/v2/node/waku_metrics.nim

78 lines
2.4 KiB
Nim
Raw Normal View History

when (NimMajor, NimMinor) < (1, 4):
{.push raises: [Defect].}
else:
{.push raises: [].}
import
stew/shims/net,
chronicles,
chronos,
metrics,
metrics/chronos_httpserver
import
../protocol/waku_filter/protocol_metrics as filter_metrics,
../protocol/waku_swap/waku_swap,
../utils/collector,
./peer_manager/peer_manager,
./waku_node
when defined(rln):
import ../protocol/waku_rln_relay/protocol_metrics as rln_metrics
2022-11-04 09:52:08 +00:00
const LogInterval = 30.seconds
logScope:
topics = "waku node metrics"
proc startMetricsServer*(serverIp: ValidIpAddress, serverPort: Port) =
info "Starting metrics HTTP server", serverIp, serverPort
try:
startMetricsHttpServer($serverIp, serverPort)
except Exception as e:
raiseAssert("Exception while starting metrics HTTP server: " & e.msg)
info "Metrics HTTP server started", serverIp, serverPort
type
# https://github.com/nim-lang/Nim/issues/17369
MetricsLogger = proc(udata: pointer) {.gcsafe, raises: [Defect].}
proc startMetricsLog*() =
var logMetrics: MetricsLogger
var cumulativeErrors = 0.float64
var cumulativeConns = 0.float64
when defined(rln):
let logRlnMetrics = getRlnMetricsLogger()
logMetrics = proc(udata: pointer) =
{.gcsafe.}:
# TODO: libp2p_pubsub_peers is not public, so we need to make this either
# public in libp2p or do our own peer counting after all.
# track cumulative values
let freshErrorCount = parseAndAccumulate(waku_node_errors, cumulativeErrors)
let freshConnCount = parseAndAccumulate(waku_node_conns_initiated, cumulativeConns)
info "Total connections initiated", count = freshConnCount
info "Total messages", count = collectorAsF64(waku_node_messages)
info "Total swap peers", count = collectorAsF64(waku_swap_peers_count)
info "Total filter peers", count = collectorAsF64(waku_filter_peers)
info "Total store peers", count = collectorAsF64(waku_store_peers)
info "Total lightpush peers", count = collectorAsF64(waku_lightpush_peers)
info "Total peer exchange peers", count = collectorAsF64(waku_px_peers)
info "Total errors", count = freshErrorCount
info "Total active filter subscriptions", count = collectorAsF64(waku_filter_subscribers)
# Start protocol specific metrics logging
when defined(rln):
logRlnMetrics()
discard setTimer(Moment.fromNow(LogInterval), logMetrics)
discard setTimer(Moment.fromNow(LogInterval), logMetrics)