diff --git a/plugins/metrics/message.go b/plugins/metrics/message.go index 72319d94ca197a0fb6b1d41657cbf3d25d641f3b..94e1b42125c17f382562d26a50494faf84e1635b 100644 --- a/plugins/metrics/message.go +++ b/plugins/metrics/message.go @@ -12,6 +12,13 @@ var ( // Total number of processed messages since start of the node. messageTotalCount atomic.Uint64 + // Current number of solid messages in the node's database. + messageSolidCount atomic.Uint64 + + messageTotalCountDB atomic.Uint64 + + avgSolidificationTime atomic.Float64 + // current number of message tips. messageTips atomic.Uint64 @@ -62,6 +69,21 @@ func MessageRequestQueueSize() int64 { return requestQueueSize.Load() } +// MessageSolidCount returns the number of messages that are solid. +func MessageSolidCount() uint64 { + return messageSolidCount.Load() +} + +// MessageTotalCountDB returns the number of messages that are stored in the DB. +func MessageTotalCountDB() uint64 { + return messageTotalCountDB.Load() +} + +// AvgSolidificationTime returns the average time it takes for a message to become solid. +func AvgSolidificationTime() float64 { + return avgSolidificationTime.Load() +} + ////// Handling data updates and measuring ////// func increasePerPayloadCounter(p payload.Type) { @@ -106,3 +128,10 @@ func measureRequestQueueSize() { size := int64(messagelayer.MessageRequester().RequestQueueSize()) requestQueueSize.Store(size) } + +func measureDBStats() { + solid, total, avgSolidTime := messagelayer.Tangle().DBStats() + messageSolidCount.Store(uint64(solid)) + messageTotalCountDB.Store(uint64(total)) + avgSolidificationTime.Store(avgSolidTime) +} diff --git a/plugins/metrics/plugin.go b/plugins/metrics/plugin.go index 3e2605be42ef842d2d7314e73ed25b34404b054d..68bedc1b7ca640e1bc6d89afe93d543760ce9e3d 100644 --- a/plugins/metrics/plugin.go +++ b/plugins/metrics/plugin.go @@ -68,6 +68,7 @@ func run(_ *node.Plugin) { measureValueTips() measureReceivedMPS() measureRequestQueueSize() + measureDBStats() // gossip network traffic g := gossipCurrentTraffic() diff --git a/plugins/prometheus/tangle.go b/plugins/prometheus/tangle.go index fc3b48f41670d8798b1ef9bcf47c60bb125455d2..944431338d4c14ee773a99c69a1b00ee7ca731dc 100644 --- a/plugins/prometheus/tangle.go +++ b/plugins/prometheus/tangle.go @@ -7,10 +7,13 @@ import ( ) var ( - messageTips prometheus.Gauge - messagePerTypeCount *prometheus.GaugeVec - messageTotalCount prometheus.Gauge - messageRequestCount prometheus.Gauge + messageTips prometheus.Gauge + messagePerTypeCount *prometheus.GaugeVec + messageTotalCount prometheus.Gauge + messageTotalCountDB prometheus.Gauge + messageSolidCount prometheus.Gauge + avgSolidificationTime prometheus.Gauge + messageRequestCount prometheus.Gauge transactionCounter prometheus.Gauge valueTips prometheus.Gauge @@ -35,6 +38,21 @@ func registerTangleMetrics() { Help: "total number of messages seen since the start of the node", }) + messageTotalCountDB = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "tangle_message_total_count_db", + Help: "total number of messages in the node's database", + }) + + messageSolidCount = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "tangle_message_solid_count", + Help: "number of solid messages on the node's database", + }) + + avgSolidificationTime = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "tangle_message_avg_solidification_time", + Help: "average time it takes for a message to become solid", + }) + transactionCounter = prometheus.NewGauge(prometheus.GaugeOpts{ Name: "tangle_value_transaction_counter", Help: "number of value transactions (value payloads) seen", @@ -53,6 +71,9 @@ func registerTangleMetrics() { registry.MustRegister(messageTips) registry.MustRegister(messagePerTypeCount) registry.MustRegister(messageTotalCount) + registry.MustRegister(messageTotalCountDB) + registry.MustRegister(messageSolidCount) + registry.MustRegister(avgSolidificationTime) registry.MustRegister(messageRequestCount) registry.MustRegister(transactionCounter) registry.MustRegister(valueTips) @@ -67,6 +88,9 @@ func collectTangleMetrics() { messagePerTypeCount.WithLabelValues(payload.Name(payloadType)).Set(float64(count)) } messageTotalCount.Set(float64(metrics.MessageTotalCount())) + messageTotalCountDB.Set(float64(metrics.MessageTotalCountDB())) + messageSolidCount.Set(float64(metrics.MessageSolidCount())) + avgSolidificationTime.Set(metrics.AvgSolidificationTime()) messageRequestCount.Set(float64(metrics.MessageRequestQueueSize())) transactionCounter.Set(float64(metrics.ValueTransactionCounter())) valueTips.Set(float64(metrics.ValueTips()))