2023-11-16 18:21:52 +01:00
|
|
|
package telemetry
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"go.opentelemetry.io/otel/attribute"
|
|
|
|
"go.opentelemetry.io/otel/metric"
|
|
|
|
"go.opentelemetry.io/otel/metric/instrument/syncint64"
|
|
|
|
)
|
|
|
|
|
|
|
|
// UpdateChannelMetrics represents all metrics related to the UpdateChannel
|
|
|
|
type UpdateChannelMetrics struct {
|
|
|
|
createChannelDurationMicro syncint64.Histogram
|
|
|
|
closeChannelDurationMicro syncint64.Histogram
|
|
|
|
closeChannelsDurationMicro syncint64.Histogram
|
|
|
|
closeChannels syncint64.Histogram
|
|
|
|
sendUpdateDurationMicro syncint64.Histogram
|
|
|
|
getAllConnectedPeersDurationMicro syncint64.Histogram
|
|
|
|
getAllConnectedPeers syncint64.Histogram
|
2023-12-05 14:17:56 +01:00
|
|
|
hasChannelDurationMicro syncint64.Histogram
|
2023-11-16 18:21:52 +01:00
|
|
|
ctx context.Context
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewUpdateChannelMetrics creates an instance of UpdateChannel
|
|
|
|
func NewUpdateChannelMetrics(ctx context.Context, meter metric.Meter) (*UpdateChannelMetrics, error) {
|
|
|
|
createChannelDurationMicro, err := meter.SyncInt64().Histogram("management.updatechannel.create.duration.micro")
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
closeChannelDurationMicro, err := meter.SyncInt64().Histogram("management.updatechannel.close.one.duration.micro")
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
closeChannelsDurationMicro, err := meter.SyncInt64().Histogram("management.updatechannel.close.multiple.duration.micro")
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
closeChannels, err := meter.SyncInt64().Histogram("management.updatechannel.close.multiple.channels")
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
sendUpdateDurationMicro, err := meter.SyncInt64().Histogram("management.updatechannel.send.duration.micro")
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2023-12-05 14:17:56 +01:00
|
|
|
getAllConnectedPeersDurationMicro, err := meter.SyncInt64().Histogram("management.updatechannel.get.all.duration.micro")
|
2023-11-16 18:21:52 +01:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2023-12-05 14:17:56 +01:00
|
|
|
getAllConnectedPeers, err := meter.SyncInt64().Histogram("management.updatechannel.get.all.peers")
|
2023-11-16 18:21:52 +01:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2023-12-05 14:17:56 +01:00
|
|
|
hasChannelDurationMicro, err := meter.SyncInt64().Histogram("management.updatechannel.haschannel.duration.micro")
|
2023-11-16 18:21:52 +01:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return &UpdateChannelMetrics{
|
|
|
|
createChannelDurationMicro: createChannelDurationMicro,
|
|
|
|
closeChannelDurationMicro: closeChannelDurationMicro,
|
|
|
|
closeChannelsDurationMicro: closeChannelsDurationMicro,
|
|
|
|
closeChannels: closeChannels,
|
|
|
|
sendUpdateDurationMicro: sendUpdateDurationMicro,
|
|
|
|
getAllConnectedPeersDurationMicro: getAllConnectedPeersDurationMicro,
|
|
|
|
getAllConnectedPeers: getAllConnectedPeers,
|
2023-12-05 14:17:56 +01:00
|
|
|
hasChannelDurationMicro: hasChannelDurationMicro,
|
2023-11-16 18:21:52 +01:00
|
|
|
ctx: ctx,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// CountCreateChannelDuration counts the duration of the CreateChannel method,
|
|
|
|
// closed indicates if existing channel was closed before creation of a new one
|
|
|
|
func (metrics *UpdateChannelMetrics) CountCreateChannelDuration(duration time.Duration, closed bool) {
|
|
|
|
metrics.createChannelDurationMicro.Record(metrics.ctx, duration.Microseconds(), attribute.Bool("closed", closed))
|
|
|
|
}
|
|
|
|
|
|
|
|
// CountCloseChannelDuration counts the duration of the CloseChannel method
|
|
|
|
func (metrics *UpdateChannelMetrics) CountCloseChannelDuration(duration time.Duration) {
|
|
|
|
metrics.closeChannelDurationMicro.Record(metrics.ctx, duration.Microseconds())
|
|
|
|
}
|
|
|
|
|
|
|
|
// CountCloseChannelsDuration counts the duration of the CloseChannels method and the number of channels have been closed
|
|
|
|
func (metrics *UpdateChannelMetrics) CountCloseChannelsDuration(duration time.Duration, channels int) {
|
|
|
|
metrics.closeChannelsDurationMicro.Record(metrics.ctx, duration.Microseconds())
|
|
|
|
metrics.closeChannels.Record(metrics.ctx, int64(channels))
|
|
|
|
}
|
|
|
|
|
|
|
|
// CountSendUpdateDuration counts the duration of the SendUpdate method
|
|
|
|
// found indicates if peer had channel, dropped indicates if the message was dropped due channel buffer overload
|
|
|
|
func (metrics *UpdateChannelMetrics) CountSendUpdateDuration(duration time.Duration, found, dropped bool) {
|
|
|
|
attrs := []attribute.KeyValue{attribute.Bool("found", found), attribute.Bool("dropped", dropped)}
|
|
|
|
metrics.sendUpdateDurationMicro.Record(metrics.ctx, duration.Microseconds(), attrs...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// CountGetAllConnectedPeersDuration counts the duration of the GetAllConnectedPeers method and the number of peers have been returned
|
|
|
|
func (metrics *UpdateChannelMetrics) CountGetAllConnectedPeersDuration(duration time.Duration, peers int) {
|
|
|
|
metrics.getAllConnectedPeersDurationMicro.Record(metrics.ctx, duration.Microseconds())
|
|
|
|
metrics.getAllConnectedPeers.Record(metrics.ctx, int64(peers))
|
|
|
|
}
|
2023-12-05 14:17:56 +01:00
|
|
|
|
|
|
|
// CountHasChannelDuration counts the duration of the HasChannel method
|
|
|
|
func (metrics *UpdateChannelMetrics) CountHasChannelDuration(duration time.Duration) {
|
|
|
|
metrics.hasChannelDurationMicro.Record(metrics.ctx, duration.Microseconds())
|
|
|
|
}
|