Avoid labels in collector manager loop

This commit is contained in:
Holger Obermaier 2022-01-26 15:54:49 +01:00
parent c193b80083
commit 09b7538479
2 changed files with 22 additions and 15 deletions

View File

@ -104,29 +104,33 @@ func (cm *collectorManager) Start() {
cm.wg.Add(1)
tick := make(chan time.Time)
cm.ticker.AddChannel(tick)
go func() {
// Collector manager is done
done := func() {
// close all metric collectors
for _, c := range cm.collectors {
c.Close()
}
cm.wg.Done()
cclog.ComponentDebug("CollectorManager", "DONE")
}
// Wait for done signal or timer event
for {
CollectorManagerLoop:
select {
case <-cm.done:
for _, c := range cm.collectors {
c.Close()
}
cm.wg.Done()
cclog.ComponentDebug("CollectorManager", "DONE")
break CollectorManagerLoop
done()
return
case t := <-tick:
for _, c := range cm.collectors {
CollectorManagerInputLoop:
// Wait for done signal or execute the collector
select {
case <-cm.done:
for _, c := range cm.collectors {
c.Close()
}
cm.wg.Done()
cclog.ComponentDebug("CollectorManager", "DONE")
break CollectorManagerInputLoop
done()
return
default:
// Read metrics from collector c
cclog.ComponentDebug("CollectorManager", c.Name(), t)
c.Read(cm.duration, cm.output)
}
@ -134,6 +138,8 @@ func (cm *collectorManager) Start() {
}
}
}()
// Collector manager is started
cclog.ComponentDebug("CollectorManager", "STARTED")
}

View File

@ -9,6 +9,7 @@ import (
"strconv"
"strings"
"time"
lp "github.com/ClusterCockpit/cc-metric-collector/internal/ccMetric"
)
@ -93,7 +94,7 @@ func (m *MemstatCollector) Read(interval time.Duration, output chan lp.CCMetric)
for match, name := range m.matches {
if _, exists := m.stats[match]; !exists {
err = errors.New(fmt.Sprintf("Parse error for %s : %s", match, name))
err = fmt.Errorf("Parse error for %s : %s", match, name)
log.Print(err)
continue
}