mirror of
https://github.com/netbirdio/netbird.git
synced 2025-01-20 21:08:45 +01:00
125 lines
2.7 KiB
Go
125 lines
2.7 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
|
||
|
|
||
|
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
|
||
|
}
|
||
|
|
||
|
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,
|
||
|
|
||
|
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,
|
||
|
}
|
||
|
}
|