mirror of
https://github.com/logos-messaging/storenode-messages-counter.git
synced 2026-01-03 22:53:07 +00:00
146 lines
3.8 KiB
Go
146 lines
3.8 KiB
Go
package metrics
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/libp2p/go-libp2p/core/peer"
|
|
"github.com/libp2p/go-libp2p/p2p/metricshelper"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var missingMessages = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "msgcounter_missing_messages",
|
|
Help: "The messages identified as missing and the reason why they're missing",
|
|
},
|
|
[]string{"storenode", "status"},
|
|
)
|
|
|
|
var totalMissingMessages = prometheus.NewGauge(
|
|
prometheus.GaugeOpts{
|
|
Name: "msgcounter_total_missing_messages",
|
|
Help: "The global total number of missing messages",
|
|
},
|
|
)
|
|
|
|
var storenodeAvailability = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "msgcounter_storenode_availability",
|
|
Help: "Indicate whether a store node is available or not",
|
|
},
|
|
[]string{"storenode"},
|
|
)
|
|
|
|
var topicLastSync = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "msgcounter_topic_lastsyncdate_seconds",
|
|
Help: "Indicates the last syncdate for a pubsubtopic",
|
|
},
|
|
[]string{"pubsubtopic"},
|
|
)
|
|
|
|
var missingMessagesLastDay = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "msgcounter_missing_messages_last_day",
|
|
Help: "The number of messages missing in last 24hr (with 2hr delay)",
|
|
},
|
|
[]string{"storenode"},
|
|
)
|
|
|
|
var missingMessagesLastWeek = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "msgcounter_missing_messages_last_week",
|
|
Help: "The number of messages missing in last week (with 2hr delay)",
|
|
},
|
|
[]string{"storenode"},
|
|
)
|
|
|
|
var missingMessagesPreviousHour = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "msgcounter_missing_messages_prev_hour",
|
|
Help: "The number of messages missing in the previous hour",
|
|
},
|
|
[]string{"storenode"},
|
|
)
|
|
|
|
var collectors = []prometheus.Collector{
|
|
missingMessages,
|
|
storenodeAvailability,
|
|
totalMissingMessages,
|
|
topicLastSync,
|
|
missingMessagesPreviousHour,
|
|
missingMessagesLastDay,
|
|
missingMessagesLastWeek,
|
|
}
|
|
|
|
// Metrics exposes the functions required to update prometheus metrics for relay protocol
|
|
type Metrics interface {
|
|
RecordMissingMessages(peerID peer.ID, status string, length int)
|
|
RecordStorenodeAvailability(peerID peer.ID, available bool)
|
|
RecordTotalMissingMessages(cnt int)
|
|
RecordLastSyncDate(topic string, date time.Time)
|
|
RecordMissingMessagesLastDay(peerID peer.ID, cnt int)
|
|
RecordMissingMessagesLastWeek(peerID peer.ID, cnt int)
|
|
RecordMissingMessagesPrevHour(peerID peer.ID, cnt int)
|
|
}
|
|
|
|
type metricsImpl struct {
|
|
log *zap.Logger
|
|
reg prometheus.Registerer
|
|
}
|
|
|
|
func NewMetrics(reg prometheus.Registerer, logger *zap.Logger) Metrics {
|
|
metricshelper.RegisterCollectors(reg, collectors...)
|
|
return &metricsImpl{
|
|
log: logger,
|
|
reg: reg,
|
|
}
|
|
}
|
|
|
|
func (m *metricsImpl) RecordMissingMessages(peerID peer.ID, status string, length int) {
|
|
go func() {
|
|
missingMessages.WithLabelValues(peerID.String(), status).Set(float64(length))
|
|
}()
|
|
}
|
|
|
|
func (m *metricsImpl) RecordStorenodeAvailability(peerID peer.ID, available bool) {
|
|
go func() {
|
|
gaugeValue := float64(1)
|
|
if !available {
|
|
gaugeValue = 0
|
|
}
|
|
storenodeAvailability.WithLabelValues(peerID.String()).Set(gaugeValue)
|
|
}()
|
|
}
|
|
|
|
func (m *metricsImpl) RecordTotalMissingMessages(cnt int) {
|
|
go func() {
|
|
totalMissingMessages.Set(float64(cnt))
|
|
}()
|
|
}
|
|
|
|
func (m *metricsImpl) RecordLastSyncDate(topic string, date time.Time) {
|
|
go func() {
|
|
topicLastSync.WithLabelValues(topic).Set(float64(date.Unix()))
|
|
}()
|
|
}
|
|
|
|
func (m *metricsImpl) RecordMissingMessagesLastDay(peerID peer.ID, cnt int) {
|
|
go func() {
|
|
missingMessagesLastDay.WithLabelValues(peerID.String()).Set(float64(cnt))
|
|
}()
|
|
}
|
|
|
|
func (m *metricsImpl) RecordMissingMessagesLastWeek(peerID peer.ID, cnt int) {
|
|
go func() {
|
|
missingMessagesLastWeek.WithLabelValues(peerID.String()).Set(float64(cnt))
|
|
}()
|
|
}
|
|
|
|
func (m *metricsImpl) RecordMissingMessagesPrevHour(peerID peer.ID, cnt int) {
|
|
go func() {
|
|
missingMessagesPreviousHour.WithLabelValues(peerID.String()).Set(float64(cnt))
|
|
}()
|
|
}
|