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