Skip to content
Snippets Groups Projects
Unverified Commit 8157effa authored by Levente Pap's avatar Levente Pap
Browse files

Measure isSynced

parent a56db05f
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,7 @@ type CollectionEvents struct{
FPCOutboundBytes *events.Event
CPUUsage *events.Event
MemUsage *events.Event
Synced *events.Event
}
func uint64Caller(handler interface{}, params ...interface{}) {
......@@ -17,3 +18,7 @@ func uint64Caller(handler interface{}, params ...interface{}) {
func float64Caller(handler interface{}, params ...interface{}) {
handler.(func(float64))(params[0].(float64))
}
func boolCaller(handler interface{}, params ...interface{}) {
handler.(func(bool))(params[0].(bool))
}
package metrics
import (
"github.com/iotaledger/hive.go/events"
"sync"
"github.com/iotaledger/hive.go/events"
)
var (
......@@ -16,6 +17,7 @@ func new()*CollectionEvents {
events.NewEvent(uint64Caller),
events.NewEvent(float64Caller),
events.NewEvent(uint64Caller),
events.NewEvent(boolCaller),
}
}
......
package metrics
import (
"github.com/iotaledger/goshimmer/packages/metrics"
"sync/atomic"
"time"
"github.com/iotaledger/goshimmer/packages/binary/messagelayer/message"
"github.com/iotaledger/goshimmer/packages/binary/messagelayer/tangle"
"github.com/iotaledger/goshimmer/packages/metrics"
"github.com/iotaledger/goshimmer/packages/shutdown"
"github.com/iotaledger/goshimmer/plugins/messagelayer"
"github.com/iotaledger/hive.go/daemon"
......@@ -24,8 +24,6 @@ var Plugin = node.NewPlugin(PluginName, node.Enabled, configure, run)
var log *logger.Logger
func configure(_ *node.Plugin) {
log = logger.NewLogger(PluginName)
// increase received MPS counter whenever we attached a message
......@@ -50,6 +48,11 @@ func configure(_ *node.Plugin) {
defer memUsageLock.Unlock()
_memUsageBytes = memAllocBytes
}))
metrics.Events().Synced.Attach(events.NewClosure(func(synced bool) {
syncLock.Lock()
defer syncLock.Unlock()
isSynced = synced
}))
}
func run(_ *node.Plugin) {
......@@ -57,6 +60,8 @@ func run(_ *node.Plugin) {
if err := daemon.BackgroundWorker("Metrics Updater", func(shutdownSignal <-chan struct{}) {
timeutil.Ticker(measureReceivedMPS, 1*time.Second, shutdownSignal)
timeutil.Ticker(measureCPUUsage, 1*time.Second, shutdownSignal)
timeutil.Ticker(measureMemUsage, 1*time.Second, shutdownSignal)
timeutil.Ticker(measureSynced, 1*time.Second, shutdownSignal)
}, shutdown.PriorityMetrics); err != nil {
log.Panicf("Failed to start as daemon: %s", err)
}
......
package metrics
import (
"runtime"
"time"
"github.com/iotaledger/goshimmer/packages/metrics"
"github.com/iotaledger/hive.go/syncutils"
"github.com/shirou/gopsutil/cpu"
"runtime"
"time"
)
var (
......@@ -15,6 +16,7 @@ var (
memUsageLock syncutils.RWMutex
)
// CpuUsage returns the current cpu usage
func CpuUsage() float64 {
cpuLock.RLock()
defer cpuLock.RUnlock()
......@@ -34,12 +36,11 @@ func measureCPUUsage() {
func measureMemUsage() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
metrics.Events().MemUsage.Trigger(m.Alloc)
}
// MemUsage returns the current memory allocated as bytes
func MemUsage() uint64 {
memUsageLock.RLock()
defer memUsageLock.RUnlock()
......
package metrics
import (
"sync"
"testing"
"github.com/iotaledger/goshimmer/packages/metrics"
"github.com/iotaledger/hive.go/events"
"github.com/stretchr/testify/assert"
"sync"
"testing"
)
func TestCpuUsage(t *testing.T) {
var wg sync.WaitGroup
metrics.Events().CPUUsage.Attach(events.NewClosure(func(cpuPercentage float64) {
......
package metrics
import (
"github.com/iotaledger/goshimmer/packages/metrics"
"github.com/iotaledger/goshimmer/plugins/sync"
"github.com/iotaledger/hive.go/syncutils"
)
var (
isSynced bool
syncLock syncutils.RWMutex
)
func measureSynced() {
s := sync.Synced()
metrics.Events().Synced.Trigger(s)
}
// Synced returns if the node is synced.
func Synced() bool {
syncLock.RLock()
defer syncLock.RUnlock()
return isSynced
}
package metrics
import (
"sync"
"testing"
"github.com/iotaledger/goshimmer/packages/metrics"
"github.com/iotaledger/hive.go/events"
"github.com/stretchr/testify/assert"
)
func TestSynced(t *testing.T) {
var wg sync.WaitGroup
metrics.Events().Synced.Attach(events.NewClosure(func(synced bool) {
// sync plugin and node not run, so we expect synced to be false
assert.Equal(t, false, synced)
wg.Done()
}))
wg.Add(1)
measureSynced()
wg.Wait()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment