From 06cc0182a9b1cec33ea135d1c050dbd21e121e79 Mon Sep 17 00:00:00 2001
From: Levente Pap <levente.pap@iota.org>
Date: Mon, 13 Jul 2020 13:27:23 +0200
Subject: [PATCH] Add DBStats method to msg layer tangle

---
 packages/binary/messagelayer/tangle/tangle.go | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go
index d750ecbd..3d64f8a5 100644
--- a/packages/binary/messagelayer/tangle/tangle.go
+++ b/packages/binary/messagelayer/tangle/tangle.go
@@ -135,6 +135,25 @@ func (tangle *Tangle) Prune() error {
 	return nil
 }
 
+// DBStats returns the number of solid messages and total number of messages in the database, furthermore the average time it takes to solidify messages.
+func (tangle *Tangle) DBStats() (solidCount int, messageCount int, avgSolidificationTime float64) {
+	var sumSolidificationTime time.Duration
+	tangle.messageMetadataStorage.ForEach(func(key []byte, cachedObject objectstorage.CachedObject) bool {
+		defer cachedObject.Release()
+		cachedMessageMetadata := &CachedMessageMetadata{CachedObject: cachedObject}
+		msgMetaData := cachedMessageMetadata.Unwrap()
+		messageCount++
+		received := msgMetaData.ReceivedTime()
+		if msgMetaData.IsSolid() {
+			solidCount++
+			sumSolidificationTime += msgMetaData.solidificationTime.Sub(received)
+		}
+		return true
+	})
+	avgSolidificationTime = float64(sumSolidificationTime.Milliseconds()) / float64(solidCount)
+	return
+}
+
 // worker that stores the message and calls the corresponding storage events.
 func (tangle *Tangle) storeMessageWorker(msg *message.Message) {
 	// store message
-- 
GitLab