diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go index d750ecbd59f1fd63af673b32456681aaef36e2b9..3d64f8a55d81a069aee722b80492eaaf2c2e6b32 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