Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s
73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
package monitor
|
|
|
|
import (
|
|
"context"
|
|
"runtime"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/cortezaproject/corteza/server/pkg/logger"
|
|
"github.com/cortezaproject/corteza/server/pkg/options"
|
|
)
|
|
|
|
var (
|
|
// Holds options for monitor
|
|
opt options.MonitorOpt
|
|
|
|
log *zap.Logger
|
|
)
|
|
|
|
func Setup(logger *zap.Logger, o options.MonitorOpt) {
|
|
log = logger.Named("monitor")
|
|
opt = o
|
|
}
|
|
|
|
func Watcher(ctx context.Context) {
|
|
if opt.Interval == 0 {
|
|
return
|
|
}
|
|
|
|
if opt.Interval < time.Second {
|
|
log.Warn("monitoring interval less than 1 second, disabling")
|
|
return
|
|
}
|
|
|
|
go NewMonitor(ctx, opt.Interval)
|
|
log.Debug("watcher initialized", zap.Duration("interval", opt.Interval))
|
|
}
|
|
|
|
func NewMonitor(ctx context.Context, interval time.Duration) {
|
|
var (
|
|
ticker = time.NewTicker(interval)
|
|
)
|
|
|
|
defer ticker.Stop()
|
|
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
// Read full mem stats
|
|
m := new(runtime.MemStats)
|
|
runtime.ReadMemStats(m)
|
|
|
|
log.With(
|
|
logger.Uint64("alloc", m.HeapAlloc),
|
|
logger.Uint64("totalAlloc", m.TotalAlloc),
|
|
logger.Uint64("sys", m.Sys),
|
|
logger.Uint64("mallocs", m.Mallocs),
|
|
logger.Uint64("frees", m.Frees),
|
|
|
|
logger.Uint64("liveObjects", m.Mallocs-m.Frees),
|
|
logger.Uint64("pauseTotalNs", m.PauseTotalNs),
|
|
zap.Uint32("numGC", m.NumGC),
|
|
zap.Int("numGoRoutines", runtime.NumGoroutine()),
|
|
).Info("tick")
|
|
|
|
case <-ctx.Done():
|
|
return
|
|
}
|
|
|
|
}
|
|
}
|