2024-06-13 01:20:46 +02:00
|
|
|
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
|
2024-07-16 15:36:51 +02:00
|
|
|
GetRegistrationDelay metric.Float64Histogram
|
2024-06-13 01:20:46 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2024-07-16 15:36:51 +02:00
|
|
|
getRegistrationDelay, err := meter.Float64Histogram("get_registration_delay_milliseconds",
|
|
|
|
metric.WithExplicitBucketBoundaries(getStandardBucketBoundaries()...))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2024-06-13 01:20:46 +02:00
|
|
|
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,
|
2024-07-16 15:36:51 +02:00
|
|
|
GetRegistrationDelay: getRegistrationDelay,
|
2024-06-13 01:20:46 +02:00
|
|
|
|
|
|
|
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,
|
|
|
|
}
|
|
|
|
}
|