netbird/signal/metrics/app.go

133 lines
3.0 KiB
Go

package metrics
import (
"go.opentelemetry.io/otel/metric"
)
// AppMetrics holds all the application metrics
type AppMetrics struct {
metric.Meter
ActivePeers metric.Int64UpDownCounter
PeerConnectionDuration metric.Int64Histogram
Registrations metric.Int64Counter
Deregistrations metric.Int64Counter
RegistrationFailures metric.Int64Counter
RegistrationDelay metric.Float64Histogram
GetRegistrationDelay metric.Float64Histogram
MessagesForwarded metric.Int64Counter
MessageForwardFailures metric.Int64Counter
MessageForwardLatency metric.Float64Histogram
}
func NewAppMetrics(meter metric.Meter) (*AppMetrics, error) {
activePeers, err := meter.Int64UpDownCounter("active_peers")
if err != nil {
return nil, err
}
peerConnectionDuration, err := meter.Int64Histogram("peer_connection_duration_seconds",
metric.WithExplicitBucketBoundaries(getPeerConnectionDurationBucketBoundaries()...))
if err != nil {
return nil, err
}
registrations, err := meter.Int64Counter("registrations_total")
if err != nil {
return nil, err
}
deregistrations, err := meter.Int64Counter("deregistrations_total")
if err != nil {
return nil, err
}
registrationFailures, err := meter.Int64Counter("registration_failures_total")
if err != nil {
return nil, err
}
registrationDelay, err := meter.Float64Histogram("registration_delay_milliseconds",
metric.WithExplicitBucketBoundaries(getStandardBucketBoundaries()...))
if err != nil {
return nil, err
}
getRegistrationDelay, err := meter.Float64Histogram("get_registration_delay_milliseconds",
metric.WithExplicitBucketBoundaries(getStandardBucketBoundaries()...))
if err != nil {
return nil, err
}
messagesForwarded, err := meter.Int64Counter("messages_forwarded_total")
if err != nil {
return nil, err
}
messageForwardFailures, err := meter.Int64Counter("message_forward_failures_total")
if err != nil {
return nil, err
}
messageForwardLatency, err := meter.Float64Histogram("message_forward_latency_milliseconds",
metric.WithExplicitBucketBoundaries(getStandardBucketBoundaries()...))
if err != nil {
return nil, err
}
return &AppMetrics{
Meter: meter,
ActivePeers: activePeers,
PeerConnectionDuration: peerConnectionDuration,
Registrations: registrations,
Deregistrations: deregistrations,
RegistrationFailures: registrationFailures,
RegistrationDelay: registrationDelay,
GetRegistrationDelay: getRegistrationDelay,
MessagesForwarded: messagesForwarded,
MessageForwardFailures: messageForwardFailures,
MessageForwardLatency: messageForwardLatency,
}, nil
}
func getStandardBucketBoundaries() []float64 {
return []float64{
0.1,
0.5,
1,
5,
10,
50,
100,
500,
1000,
5000,
10000,
}
}
func getPeerConnectionDurationBucketBoundaries() []float64 {
return []float64{
1,
60,
// 10m
600,
// 1h
3600,
// 2h,
7200,
// 6h,
21600,
// 12h,
43200,
// 24h,
86400,
// 48h,
172800,
}
}