From 5e2743cc269af184ea660dcca158f1226ba0cd7a Mon Sep 17 00:00:00 2001
From: Levente Pap <levente.pap@iota.org>
Date: Wed, 15 Jul 2020 17:34:16 +0200
Subject: [PATCH] FIx avgSolidificationTime metrics

---
 plugins/metrics/message.go | 4 +++-
 plugins/metrics/plugin.go  | 6 ++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/plugins/metrics/message.go b/plugins/metrics/message.go
index e09e0168..4737eca7 100644
--- a/plugins/metrics/message.go
+++ b/plugins/metrics/message.go
@@ -97,6 +97,8 @@ func MessageTotalCountDB() uint64 {
 
 // AvgSolidificationTime returns the average time it takes for a message to become solid. [milliseconds]
 func AvgSolidificationTime() float64 {
+	solidTimeMutex.RLock()
+	defer solidTimeMutex.RUnlock()
 	return (initialSumSolidificationTime + float64(sumSolidificationTime.Milliseconds())) / float64(MessageSolidCountDB())
 }
 
@@ -150,5 +152,5 @@ func measureInitialDBStats() {
 	initialMessageSolidCountDB.Store(uint64(solid))
 	initialMessageTotalCountDB.Store(uint64(total))
 	initialAvgSolidificationTime.Store(avgSolidTime)
-	initialSumSolidificationTime = avgSolidTime * float64(total)
+	initialSumSolidificationTime = avgSolidTime * float64(solid)
 }
diff --git a/plugins/metrics/plugin.go b/plugins/metrics/plugin.go
index 25063ec6..0217f968 100644
--- a/plugins/metrics/plugin.go
+++ b/plugins/metrics/plugin.go
@@ -111,13 +111,15 @@ func registerLocalMetrics() {
 	// messages can only become solid once, then they stay like that, hence no .Dec() part
 	messagelayer.Tangle().Events.MessageSolid.Attach(events.NewClosure(func(cachedMessage *message.CachedMessage, cachedMessageMetadata *tangle.CachedMessageMetadata) {
 		cachedMessage.Release()
-		messageSolidCountDBInc.Inc()
 		solidTimeMutex.Lock()
 		defer solidTimeMutex.Unlock()
 		// Consume should release cachedMessageMetadata
 		cachedMessageMetadata.Consume(func(object objectstorage.StorableObject) {
 			msgMetaData := object.(*tangle.MessageMetadata)
-			sumSolidificationTime += msgMetaData.SolidificationTime().Sub(msgMetaData.ReceivedTime())
+			if msgMetaData.IsSolid() {
+				messageSolidCountDBInc.Inc()
+				sumSolidificationTime += msgMetaData.SolidificationTime().Sub(msgMetaData.ReceivedTime())
+			}
 		})
 	}))
 
-- 
GitLab