From eb6c3ec014e2673877c6f56d0c7c3c173ff12334 Mon Sep 17 00:00:00 2001
From: Levente Pap <levente.pap@iota.org>
Date: Wed, 15 Jul 2020 17:52:17 +0200
Subject: [PATCH] Fix avgSolidificationTime calc

---
 packages/binary/messagelayer/tangle/tangle.go | 4 +++-
 plugins/metrics/message.go                    | 8 ++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go
index 5935619c..66dc3aff 100644
--- a/packages/binary/messagelayer/tangle/tangle.go
+++ b/packages/binary/messagelayer/tangle/tangle.go
@@ -159,7 +159,9 @@ func (tangle *Tangle) DBStats() (solidCount int, messageCount int, avgSolidifica
 		})
 		return true
 	})
-	avgSolidificationTime = float64(sumSolidificationTime.Milliseconds()) / float64(solidCount)
+	if solidCount > 0 {
+		avgSolidificationTime = float64(sumSolidificationTime.Milliseconds()) / float64(solidCount)
+	}
 	// TODO: get rid of console printing
 	fmt.Println("solid", solidCount, "message", messageCount, "iterations", iterations)
 	return
diff --git a/plugins/metrics/message.go b/plugins/metrics/message.go
index 4737eca7..a552571d 100644
--- a/plugins/metrics/message.go
+++ b/plugins/metrics/message.go
@@ -96,10 +96,14 @@ func MessageTotalCountDB() uint64 {
 }
 
 // AvgSolidificationTime returns the average time it takes for a message to become solid. [milliseconds]
-func AvgSolidificationTime() float64 {
+func AvgSolidificationTime() (result float64) {
 	solidTimeMutex.RLock()
 	defer solidTimeMutex.RUnlock()
-	return (initialSumSolidificationTime + float64(sumSolidificationTime.Milliseconds())) / float64(MessageSolidCountDB())
+	totalSolid := MessageSolidCountDB()
+	if totalSolid > 0 {
+		result = (initialSumSolidificationTime + float64(sumSolidificationTime.Milliseconds())) / float64(totalSolid)
+	}
+	return
 }
 
 // ReceivedMessagesPerSecond retrieves the current messages per second number.
-- 
GitLab