2023-07-14 02:09:56 +03:00
|
|
|
package metrics
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
2023-07-15 00:08:02 +03:00
|
|
|
"github.com/ethereum/go-ethereum/log"
|
2023-07-14 02:09:56 +03:00
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
"github.com/prometheus/client_golang/prometheus/promauto"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
MetricsNamespace = "ufm"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
2023-07-15 00:08:02 +03:00
|
|
|
Debug bool
|
|
|
|
|
2023-07-14 02:09:56 +03:00
|
|
|
errorsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
|
|
|
|
Namespace: MetricsNamespace,
|
|
|
|
Name: "errors_total",
|
|
|
|
Help: "Count of errors.",
|
|
|
|
}, []string{
|
|
|
|
"provider",
|
|
|
|
"error",
|
|
|
|
})
|
|
|
|
|
|
|
|
rpcLatency = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
|
|
|
Namespace: MetricsNamespace,
|
|
|
|
Name: "rpc_latency",
|
|
|
|
Help: "RPC latency per provider, client and method (ms)",
|
|
|
|
}, []string{
|
|
|
|
"provider",
|
|
|
|
"client",
|
|
|
|
"method",
|
|
|
|
})
|
|
|
|
|
|
|
|
roundTripLatency = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
|
|
|
Namespace: MetricsNamespace,
|
|
|
|
Name: "roundtrip_latency",
|
|
|
|
Help: "Round trip latency per provider (ms)",
|
|
|
|
}, []string{
|
|
|
|
"provider",
|
|
|
|
})
|
|
|
|
|
|
|
|
gasUsed = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
|
|
|
Namespace: MetricsNamespace,
|
|
|
|
Name: "gas_used",
|
|
|
|
Help: "Gas used per provider",
|
|
|
|
}, []string{
|
|
|
|
"provider",
|
|
|
|
})
|
|
|
|
|
|
|
|
firstSeenLatency = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
|
|
|
Namespace: MetricsNamespace,
|
|
|
|
Name: "first_seen_latency",
|
|
|
|
Help: "First seen latency latency per provider (ms)",
|
|
|
|
}, []string{
|
|
|
|
"provider_source",
|
|
|
|
"provider_seen",
|
|
|
|
})
|
|
|
|
|
|
|
|
providerToProviderLatency = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
|
|
|
Namespace: MetricsNamespace,
|
|
|
|
Name: "provider_to_provider_latency",
|
|
|
|
Help: "Provider to provider latency (ms)",
|
|
|
|
}, []string{
|
|
|
|
"provider_source",
|
|
|
|
"provider_seen",
|
|
|
|
})
|
|
|
|
|
|
|
|
networkTransactionsInFlight = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
|
|
|
Namespace: MetricsNamespace,
|
|
|
|
Name: "transactions_inflight",
|
|
|
|
Help: "Transactions in flight, per network",
|
|
|
|
}, []string{
|
|
|
|
"network",
|
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
func RecordError(provider string, errorLabel string) {
|
2023-07-15 00:08:02 +03:00
|
|
|
if Debug {
|
|
|
|
log.Debug("metric inc", "m", "errors_total",
|
|
|
|
"provider", provider, "error", errorLabel)
|
|
|
|
}
|
2023-07-14 02:09:56 +03:00
|
|
|
errorsTotal.WithLabelValues(provider, errorLabel).Inc()
|
|
|
|
}
|
|
|
|
|
|
|
|
func RecordRPCLatency(provider string, client string, method string, latency time.Duration) {
|
2023-07-15 00:08:02 +03:00
|
|
|
if Debug {
|
|
|
|
log.Debug("metric set", "m", "rpc_latency",
|
|
|
|
"provider", provider, "client", client, "method", method, "latency", latency)
|
|
|
|
}
|
2023-07-14 02:09:56 +03:00
|
|
|
rpcLatency.WithLabelValues(provider, client, method).Set(float64(latency.Milliseconds()))
|
|
|
|
}
|
|
|
|
|
|
|
|
func RecordRoundTripLatency(provider string, latency time.Duration) {
|
2023-07-15 00:08:02 +03:00
|
|
|
if Debug {
|
|
|
|
log.Debug("metric set", "m", "roundtrip_latency",
|
|
|
|
"provider", provider, "latency", latency)
|
|
|
|
}
|
2023-07-14 02:09:56 +03:00
|
|
|
roundTripLatency.WithLabelValues(provider).Set(float64(latency.Milliseconds()))
|
|
|
|
}
|
|
|
|
|
|
|
|
func RecordGasUsed(provider string, val uint64) {
|
2023-07-15 00:08:02 +03:00
|
|
|
if Debug {
|
|
|
|
log.Debug("metric add", "m", "gas_used",
|
|
|
|
"provider", provider, "val", val)
|
|
|
|
}
|
|
|
|
gasUsed.WithLabelValues(provider).Add(float64(val))
|
2023-07-14 02:09:56 +03:00
|
|
|
}
|
|
|
|
|
2023-07-15 00:08:02 +03:00
|
|
|
func RecordFirstSeenLatency(providerSource string, providerSeen string, latency time.Duration) {
|
|
|
|
if Debug {
|
|
|
|
log.Debug("metric set", "m", "first_seen_latency",
|
|
|
|
"provider_source", providerSource, "provider_seen", providerSeen, "latency", latency)
|
|
|
|
}
|
|
|
|
firstSeenLatency.WithLabelValues(providerSource, providerSeen).Set(float64(latency.Milliseconds()))
|
2023-07-14 02:09:56 +03:00
|
|
|
}
|
|
|
|
|
2023-07-15 00:08:02 +03:00
|
|
|
func RecordProviderToProviderLatency(providerSource string, providerSeen string, latency time.Duration) {
|
|
|
|
if Debug {
|
|
|
|
log.Debug("metric set", "m", "provider_to_provider_latency",
|
|
|
|
"provider_source", providerSource, "provider_seen", providerSeen, "latency", latency)
|
|
|
|
}
|
|
|
|
providerToProviderLatency.WithLabelValues(providerSource, providerSeen).Set(float64(latency.Milliseconds()))
|
2023-07-14 02:09:56 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func RecordTransactionsInFlight(network string, count int) {
|
2023-07-15 00:08:02 +03:00
|
|
|
if Debug {
|
|
|
|
log.Debug("metric set", "m", "transactions_inflight",
|
|
|
|
"network", network, "count", count)
|
|
|
|
}
|
2023-07-14 02:09:56 +03:00
|
|
|
networkTransactionsInFlight.WithLabelValues(network).Set(float64(count))
|
|
|
|
}
|