diff --git a/plugins/metrics/message.go b/plugins/metrics/message.go index e09e01685cbadb3541f71e6be30e36834223e155..4737eca7a52a2aa07808655332b2bfdc2f442e42 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 25063ec6c3ee3b7629c6b040cec077fab314b5fd..0217f968a038c65f57cc8d0cc795efba92cb6a99 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()) + } }) }))