diff --git a/cc-metric-collector.go b/cc-metric-collector.go index 5544af8..823cb5e 100644 --- a/cc-metric-collector.go +++ b/cc-metric-collector.go @@ -17,7 +17,7 @@ import ( mr "github.com/ClusterCockpit/cc-metric-collector/internal/metricRouter" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" mct "github.com/ClusterCockpit/cc-metric-collector/pkg/multiChanTicker" ) @@ -54,7 +54,7 @@ type RuntimeConfig struct { ReceiveManager receivers.ReceiveManager MultiChanTicker mct.MultiChanTicker - Channels []chan lp.CCMetric + Channels []chan lp.CCMessage Sync sync.WaitGroup } @@ -242,7 +242,7 @@ func mainFunc() int { } // Connect metric router to sink manager - RouterToSinksChannel := make(chan lp.CCMetric, 200) + RouterToSinksChannel := make(chan lp.CCMessage, 200) rcfg.SinkManager.AddInput(RouterToSinksChannel) rcfg.MetricRouter.AddOutput(RouterToSinksChannel) @@ -254,7 +254,7 @@ func mainFunc() int { } // Connect collector manager to metric router - CollectToRouterChannel := make(chan lp.CCMetric, 200) + CollectToRouterChannel := make(chan lp.CCMessage, 200) rcfg.CollectManager.AddOutput(CollectToRouterChannel) rcfg.MetricRouter.AddCollectorInput(CollectToRouterChannel) @@ -267,7 +267,7 @@ func mainFunc() int { } // Connect receive manager to metric router - ReceiveToRouterChannel := make(chan lp.CCMetric, 200) + ReceiveToRouterChannel := make(chan lp.CCMessage, 200) rcfg.ReceiveManager.AddOutput(ReceiveToRouterChannel) rcfg.MetricRouter.AddReceiverInput(ReceiveToRouterChannel) use_recv = true diff --git a/collectors/beegfsmetaMetric.go b/collectors/beegfsmetaMetric.go index d202773..553c158 100644 --- a/collectors/beegfsmetaMetric.go +++ b/collectors/beegfsmetaMetric.go @@ -15,7 +15,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const DEFAULT_BEEGFS_CMD = "beegfs-ctl" @@ -110,7 +110,7 @@ func (m *BeegfsMetaCollector) Init(config json.RawMessage) error { return nil } -func (m *BeegfsMetaCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *BeegfsMetaCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -216,7 +216,7 @@ func (m *BeegfsMetaCollector) Read(interval time.Duration, output chan lp.CCMetr for key, data := range m.matches { value, _ := strconv.ParseFloat(data, 32) - y, err := lp.New(key, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) + y, err := lp.NewMessage(key, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) if err == nil { output <- y } diff --git a/collectors/beegfsstorageMetric.go b/collectors/beegfsstorageMetric.go index be57e0f..2ca5dc9 100644 --- a/collectors/beegfsstorageMetric.go +++ b/collectors/beegfsstorageMetric.go @@ -15,7 +15,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // Struct for the collector-specific JSON config @@ -103,7 +103,7 @@ func (m *BeegfsStorageCollector) Init(config json.RawMessage) error { return nil } -func (m *BeegfsStorageCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *BeegfsStorageCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -208,7 +208,7 @@ func (m *BeegfsStorageCollector) Read(interval time.Duration, output chan lp.CCM for key, data := range m.matches { value, _ := strconv.ParseFloat(data, 32) - y, err := lp.New(key, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) + y, err := lp.NewMessage(key, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) if err == nil { output <- y } diff --git a/collectors/collectorManager.go b/collectors/collectorManager.go index 4cf3435..8dc5d49 100644 --- a/collectors/collectorManager.go +++ b/collectors/collectorManager.go @@ -7,7 +7,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" mct "github.com/ClusterCockpit/cc-metric-collector/pkg/multiChanTicker" ) @@ -47,7 +47,7 @@ var AvailableCollectors = map[string]MetricCollector{ type collectorManager struct { collectors []MetricCollector // List of metric collectors to read in parallel serial []MetricCollector // List of metric collectors to read serially - output chan lp.CCMetric // Output channels + output chan lp.CCMessage // Output channels done chan bool // channel to finish / stop metric collector manager ticker mct.MultiChanTicker // periodically ticking once each interval duration time.Duration // duration (for metrics that measure over a given duration) @@ -60,7 +60,7 @@ type collectorManager struct { // Metric collector manager access functions type CollectorManager interface { Init(ticker mct.MultiChanTicker, duration time.Duration, wg *sync.WaitGroup, collectConfigFile string) error - AddOutput(output chan lp.CCMetric) + AddOutput(output chan lp.CCMessage) Start() Close() } @@ -187,7 +187,7 @@ func (cm *collectorManager) Start() { } // AddOutput adds the output channel to the metric collector manager -func (cm *collectorManager) AddOutput(output chan lp.CCMetric) { +func (cm *collectorManager) AddOutput(output chan lp.CCMessage) { cm.output = output } diff --git a/collectors/cpufreqCpuinfoMetric.go b/collectors/cpufreqCpuinfoMetric.go index ce3e1dd..415e018 100644 --- a/collectors/cpufreqCpuinfoMetric.go +++ b/collectors/cpufreqCpuinfoMetric.go @@ -10,8 +10,8 @@ import ( "strings" "time" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" ) // CPUFreqCollector @@ -112,14 +112,14 @@ func (m *CPUFreqCpuInfoCollector) Init(config json.RawMessage) error { // Check if at least one CPU with frequency information was detected if len(m.topology) == 0 { - return fmt.Errorf("No CPU frequency info found in %s", cpuInfoFile) + return fmt.Errorf("no CPU frequency info found in %s", cpuInfoFile) } m.init = true return nil } -func (m *CPUFreqCpuInfoCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *CPUFreqCpuInfoCollector) Read(interval time.Duration, output chan lp.CCMessage) { // Check if already initialized if !m.init { return @@ -154,7 +154,7 @@ func (m *CPUFreqCpuInfoCollector) Read(interval time.Duration, output chan lp.CC fmt.Sprintf("Read(): Failed to convert cpu MHz '%s' to float64: %v", lineSplit[1], err)) return } - if y, err := lp.New("cpufreq", t.tagSet, m.meta, map[string]interface{}{"value": value}, now); err == nil { + if y, err := lp.NewMessage("cpufreq", t.tagSet, m.meta, map[string]interface{}{"value": value}, now); err == nil { output <- y } } diff --git a/collectors/cpufreqMetric.go b/collectors/cpufreqMetric.go index 61caf10..033445c 100644 --- a/collectors/cpufreqMetric.go +++ b/collectors/cpufreqMetric.go @@ -10,7 +10,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" "github.com/ClusterCockpit/cc-metric-collector/pkg/ccTopology" "golang.org/x/sys/unix" ) @@ -91,7 +91,7 @@ func (m *CPUFreqCollector) Init(config json.RawMessage) error { return nil } -func (m *CPUFreqCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *CPUFreqCollector) Read(interval time.Duration, output chan lp.CCMessage) { // Check if already initialized if !m.init { return @@ -117,7 +117,7 @@ func (m *CPUFreqCollector) Read(interval time.Duration, output chan lp.CCMetric) continue } - if y, err := lp.New("cpufreq", t.tagSet, m.meta, map[string]interface{}{"value": cpuFreq}, now); err == nil { + if y, err := lp.NewMessage("cpufreq", t.tagSet, m.meta, map[string]interface{}{"value": cpuFreq}, now); err == nil { output <- y } } diff --git a/collectors/cpustatMetric.go b/collectors/cpustatMetric.go index 2b1756f..c7afebc 100644 --- a/collectors/cpustatMetric.go +++ b/collectors/cpustatMetric.go @@ -10,7 +10,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" sysconf "github.com/tklauser/go-sysconf" ) @@ -105,7 +105,7 @@ func (m *CpustatCollector) Init(config json.RawMessage) error { return nil } -func (m *CpustatCollector) parseStatLine(linefields []string, tags map[string]string, output chan lp.CCMetric, now time.Time, tsdelta time.Duration) { +func (m *CpustatCollector) parseStatLine(linefields []string, tags map[string]string, output chan lp.CCMessage, now time.Time, tsdelta time.Duration) { values := make(map[string]float64) clktck, _ := sysconf.Sysconf(sysconf.SC_CLK_TCK) for match, index := range m.matches { @@ -122,21 +122,21 @@ func (m *CpustatCollector) parseStatLine(linefields []string, tags map[string]st sum := float64(0) for name, value := range values { sum += value - y, err := lp.New(name, tags, m.meta, map[string]interface{}{"value": value * 100}, now) + y, err := lp.NewMessage(name, tags, m.meta, map[string]interface{}{"value": value * 100}, now) if err == nil { output <- y } } if v, ok := values["cpu_idle"]; ok { sum -= v - y, err := lp.New("cpu_used", tags, m.meta, map[string]interface{}{"value": sum * 100}, now) + y, err := lp.NewMessage("cpu_used", tags, m.meta, map[string]interface{}{"value": sum * 100}, now) if err == nil { output <- y } } } -func (m *CpustatCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *CpustatCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -162,7 +162,7 @@ func (m *CpustatCollector) Read(interval time.Duration, output chan lp.CCMetric) } } - num_cpus_metric, err := lp.New("num_cpus", + num_cpus_metric, err := lp.NewMessage("num_cpus", m.nodetags, m.meta, map[string]interface{}{"value": int(num_cpus)}, diff --git a/collectors/customCmdMetric.go b/collectors/customCmdMetric.go index ae205f1..c9a50cf 100644 --- a/collectors/customCmdMetric.go +++ b/collectors/customCmdMetric.go @@ -9,7 +9,7 @@ import ( "strings" "time" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" influx "github.com/influxdata/line-protocol" ) @@ -75,7 +75,7 @@ var DefaultTime = func() time.Time { return time.Unix(42, 0) } -func (m *CustomCmdCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *CustomCmdCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } diff --git a/collectors/diskstatMetric.go b/collectors/diskstatMetric.go index d1ec4fc..0298362 100644 --- a/collectors/diskstatMetric.go +++ b/collectors/diskstatMetric.go @@ -9,7 +9,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // "log" @@ -48,7 +48,7 @@ func (m *DiskstatCollector) Init(config json.RawMessage) error { return nil } -func (m *DiskstatCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *DiskstatCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -92,13 +92,13 @@ func (m *DiskstatCollector) Read(interval time.Duration, output chan lp.CCMetric } tags := map[string]string{"type": "node", "device": linefields[0]} total := (stat.Blocks * uint64(stat.Bsize)) / uint64(1000000000) - y, err := lp.New("disk_total", tags, m.meta, map[string]interface{}{"value": total}, time.Now()) + y, err := lp.NewMessage("disk_total", tags, m.meta, map[string]interface{}{"value": total}, time.Now()) if err == nil { y.AddMeta("unit", "GBytes") output <- y } free := (stat.Bfree * uint64(stat.Bsize)) / uint64(1000000000) - y, err = lp.New("disk_free", tags, m.meta, map[string]interface{}{"value": free}, time.Now()) + y, err = lp.NewMessage("disk_free", tags, m.meta, map[string]interface{}{"value": free}, time.Now()) if err == nil { y.AddMeta("unit", "GBytes") output <- y @@ -110,7 +110,7 @@ func (m *DiskstatCollector) Read(interval time.Duration, output chan lp.CCMetric } } } - y, err := lp.New("part_max_used", map[string]string{"type": "node"}, m.meta, map[string]interface{}{"value": int(part_max_used)}, time.Now()) + y, err := lp.NewMessage("part_max_used", map[string]string{"type": "node"}, m.meta, map[string]interface{}{"value": int(part_max_used)}, time.Now()) if err == nil { y.AddMeta("unit", "percent") output <- y diff --git a/collectors/gpfsMetric.go b/collectors/gpfsMetric.go index 98720b8..31856cb 100644 --- a/collectors/gpfsMetric.go +++ b/collectors/gpfsMetric.go @@ -14,7 +14,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const DEFAULT_GPFS_CMD = "mmpmon" @@ -94,7 +94,7 @@ func (m *GpfsCollector) Init(config json.RawMessage) error { return nil } -func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMessage) { // Check if already initialized if !m.init { return @@ -218,7 +218,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { continue } if y, err := - lp.New( + lp.NewMessage( "gpfs_bytes_read", m.tags, m.meta, @@ -234,7 +234,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { if lastBytesRead := m.lastState[filesystem].bytesRead; lastBytesRead >= 0 { bwRead := float64(bytesRead-lastBytesRead) / timeDiff if y, err := - lp.New( + lp.NewMessage( "gpfs_bw_read", m.tags, m.meta, @@ -258,7 +258,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { continue } if y, err := - lp.New( + lp.NewMessage( "gpfs_bytes_written", m.tags, m.meta, @@ -274,7 +274,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { if lastBytesWritten := m.lastState[filesystem].bytesRead; lastBytesWritten >= 0 { bwWrite := float64(bytesWritten-lastBytesWritten) / timeDiff if y, err := - lp.New( + lp.NewMessage( "gpfs_bw_write", m.tags, m.meta, @@ -304,7 +304,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { fmt.Sprintf("Read(): Failed to convert number of opens '%s' to int64: %v", key_value["_oc_"], err)) continue } - if y, err := lp.New("gpfs_num_opens", m.tags, m.meta, map[string]interface{}{"value": numOpens}, timestamp); err == nil { + if y, err := lp.NewMessage("gpfs_num_opens", m.tags, m.meta, map[string]interface{}{"value": numOpens}, timestamp); err == nil { output <- y } @@ -316,7 +316,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { fmt.Sprintf("Read(): Failed to convert number of closes: '%s' to int64: %v", key_value["_cc_"], err)) continue } - if y, err := lp.New("gpfs_num_closes", m.tags, m.meta, map[string]interface{}{"value": numCloses}, timestamp); err == nil { + if y, err := lp.NewMessage("gpfs_num_closes", m.tags, m.meta, map[string]interface{}{"value": numCloses}, timestamp); err == nil { output <- y } @@ -328,7 +328,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { fmt.Sprintf("Read(): Failed to convert number of reads: '%s' to int64: %v", key_value["_rdc_"], err)) continue } - if y, err := lp.New("gpfs_num_reads", m.tags, m.meta, map[string]interface{}{"value": numReads}, timestamp); err == nil { + if y, err := lp.NewMessage("gpfs_num_reads", m.tags, m.meta, map[string]interface{}{"value": numReads}, timestamp); err == nil { output <- y } @@ -340,7 +340,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { fmt.Sprintf("Read(): Failed to convert number of writes: '%s' to int64: %v", key_value["_wc_"], err)) continue } - if y, err := lp.New("gpfs_num_writes", m.tags, m.meta, map[string]interface{}{"value": numWrites}, timestamp); err == nil { + if y, err := lp.NewMessage("gpfs_num_writes", m.tags, m.meta, map[string]interface{}{"value": numWrites}, timestamp); err == nil { output <- y } @@ -352,7 +352,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { fmt.Sprintf("Read(): Failed to convert number of read directories: '%s' to int64: %v", key_value["_dir_"], err)) continue } - if y, err := lp.New("gpfs_num_readdirs", m.tags, m.meta, map[string]interface{}{"value": numReaddirs}, timestamp); err == nil { + if y, err := lp.NewMessage("gpfs_num_readdirs", m.tags, m.meta, map[string]interface{}{"value": numReaddirs}, timestamp); err == nil { output <- y } @@ -364,7 +364,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { fmt.Sprintf("Read(): Failed to convert number of inode updates: '%s' to int: %v", key_value["_iu_"], err)) continue } - if y, err := lp.New("gpfs_num_inode_updates", m.tags, m.meta, map[string]interface{}{"value": numInodeUpdates}, timestamp); err == nil { + if y, err := lp.NewMessage("gpfs_num_inode_updates", m.tags, m.meta, map[string]interface{}{"value": numInodeUpdates}, timestamp); err == nil { output <- y } @@ -372,7 +372,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { if m.config.SendTotalValues { bytesTotal := bytesRead + bytesWritten if y, err := - lp.New("gpfs_bytes_total", + lp.NewMessage("gpfs_bytes_total", m.tags, m.meta, map[string]interface{}{ @@ -385,7 +385,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { } iops := numReads + numWrites if y, err := - lp.New("gpfs_iops", + lp.NewMessage("gpfs_iops", m.tags, m.meta, map[string]interface{}{ @@ -397,7 +397,7 @@ func (m *GpfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { } metaops := numInodeUpdates + numCloses + numOpens + numReaddirs if y, err := - lp.New("gpfs_metaops", + lp.NewMessage("gpfs_metaops", m.tags, m.meta, map[string]interface{}{ diff --git a/collectors/infinibandMetric.go b/collectors/infinibandMetric.go index 13b76a0..f0d5e49 100644 --- a/collectors/infinibandMetric.go +++ b/collectors/infinibandMetric.go @@ -5,7 +5,7 @@ import ( "os" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" "golang.org/x/sys/unix" "encoding/json" @@ -182,7 +182,7 @@ func (m *InfinibandCollector) Init(config json.RawMessage) error { } // Read reads Infiniband counter files below IB_BASEPATH -func (m *InfinibandCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *InfinibandCollector) Read(interval time.Duration, output chan lp.CCMessage) { // Check if already initialized if !m.init { @@ -230,7 +230,7 @@ func (m *InfinibandCollector) Read(interval time.Duration, output chan lp.CCMetr // Send absolut values if m.config.SendAbsoluteValues { if y, err := - lp.New( + lp.NewMessage( counterDef.name, info.tagSet, m.meta, @@ -248,7 +248,7 @@ func (m *InfinibandCollector) Read(interval time.Duration, output chan lp.CCMetr if counterDef.lastState >= 0 { rate := float64((counterDef.currentState - counterDef.lastState)) / timeDiff if y, err := - lp.New( + lp.NewMessage( counterDef.name+"_bw", info.tagSet, m.meta, @@ -278,7 +278,7 @@ func (m *InfinibandCollector) Read(interval time.Duration, output chan lp.CCMetr // Send total values if m.config.SendTotalValues { if y, err := - lp.New( + lp.NewMessage( "ib_total", info.tagSet, m.meta, @@ -291,7 +291,7 @@ func (m *InfinibandCollector) Read(interval time.Duration, output chan lp.CCMetr } if y, err := - lp.New( + lp.NewMessage( "ib_total_pkts", info.tagSet, m.meta, diff --git a/collectors/iostatMetric.go b/collectors/iostatMetric.go index 4d1dbd1..8715d7e 100644 --- a/collectors/iostatMetric.go +++ b/collectors/iostatMetric.go @@ -5,7 +5,7 @@ import ( "os" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" // "log" "encoding/json" @@ -107,7 +107,7 @@ func (m *IOstatCollector) Init(config json.RawMessage) error { return err } -func (m *IOstatCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *IOstatCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -139,7 +139,7 @@ func (m *IOstatCollector) Read(interval time.Duration, output chan lp.CCMetric) x, err := strconv.ParseInt(linefields[idx], 0, 64) if err == nil { diff := x - entry.lastValues[name] - y, err := lp.New(name, entry.tags, m.meta, map[string]interface{}{"value": int(diff)}, time.Now()) + y, err := lp.NewMessage(name, entry.tags, m.meta, map[string]interface{}{"value": int(diff)}, time.Now()) if err == nil { output <- y } diff --git a/collectors/ipmiMetric.go b/collectors/ipmiMetric.go index d53d8af..d8b3599 100644 --- a/collectors/ipmiMetric.go +++ b/collectors/ipmiMetric.go @@ -13,7 +13,7 @@ import ( "strings" "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const IPMISENSORS_PATH = `ipmi-sensors` @@ -67,7 +67,7 @@ func (m *IpmiCollector) Init(config json.RawMessage) error { return nil } -func (m *IpmiCollector) readIpmiTool(cmd string, output chan lp.CCMetric) { +func (m *IpmiCollector) readIpmiTool(cmd string, output chan lp.CCMessage) { // Setup ipmitool command command := exec.Command(cmd, "sensor") @@ -105,7 +105,7 @@ func (m *IpmiCollector) readIpmiTool(cmd string, output chan lp.CCMetric) { unit = "Watts" } - y, err := lp.New(name, map[string]string{"type": "node"}, m.meta, map[string]interface{}{"value": v}, time.Now()) + y, err := lp.NewMessage(name, map[string]string{"type": "node"}, m.meta, map[string]interface{}{"value": v}, time.Now()) if err == nil { y.AddMeta("unit", unit) output <- y @@ -125,7 +125,7 @@ func (m *IpmiCollector) readIpmiTool(cmd string, output chan lp.CCMetric) { } } -func (m *IpmiCollector) readIpmiSensors(cmd string, output chan lp.CCMetric) { +func (m *IpmiCollector) readIpmiSensors(cmd string, output chan lp.CCMessage) { command := exec.Command(cmd, "--comma-separated-output", "--sdr-cache-recreate") command.Wait() @@ -143,7 +143,7 @@ func (m *IpmiCollector) readIpmiSensors(cmd string, output chan lp.CCMetric) { v, err := strconv.ParseFloat(lv[3], 64) if err == nil { name := strings.ToLower(strings.Replace(lv[1], " ", "_", -1)) - y, err := lp.New(name, map[string]string{"type": "node"}, m.meta, map[string]interface{}{"value": v}, time.Now()) + y, err := lp.NewMessage(name, map[string]string{"type": "node"}, m.meta, map[string]interface{}{"value": v}, time.Now()) if err == nil { if len(lv) > 4 { y.AddMeta("unit", lv[4]) @@ -155,7 +155,7 @@ func (m *IpmiCollector) readIpmiSensors(cmd string, output chan lp.CCMetric) { } } -func (m *IpmiCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *IpmiCollector) Read(interval time.Duration, output chan lp.CCMessage) { // Check if already initialized if !m.init { diff --git a/collectors/likwidMetric.go b/collectors/likwidMetric.go index 606f6a6..4f93ff2 100644 --- a/collectors/likwidMetric.go +++ b/collectors/likwidMetric.go @@ -24,9 +24,9 @@ import ( "time" "unsafe" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" agg "github.com/ClusterCockpit/cc-metric-collector/internal/metricAggregator" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" topo "github.com/ClusterCockpit/cc-metric-collector/pkg/ccTopology" "github.com/NVIDIA/go-nvml/pkg/dl" "github.com/fsnotify/fsnotify" @@ -382,9 +382,9 @@ func (m *LikwidCollector) takeMeasurement(evidx int, evset LikwidEventsetConfig, if uid != uint32(os.Getuid()) { usr, err := user.LookupId(fmt.Sprint(uid)) if err == nil { - return true, fmt.Errorf("Access to performance counters locked by %s", usr.Username) + return true, fmt.Errorf("access to performance counters locked by %s", usr.Username) } else { - return true, fmt.Errorf("Access to performance counters locked by %d", uid) + return true, fmt.Errorf("access to performance counters locked by %d", uid) } } err = watcher.Add(m.config.LockfilePath) @@ -424,9 +424,7 @@ func (m *LikwidCollector) takeMeasurement(evidx int, evset LikwidEventsetConfig, gid = C.perfmon_addEventSet(evset.estr) } if gid < 0 { - return true, fmt.Errorf("failed to add events %s, error %d", evset.go_estr, gid) - } else { - evset.gid = gid + return true, fmt.Errorf("failed to add events %s, id %d, error %d", evset.go_estr, evidx, gid) } // Setup all performance monitoring counters of an eventSet @@ -537,11 +535,12 @@ func (m *LikwidCollector) takeMeasurement(evidx int, evset LikwidEventsetConfig, } // Get all measurement results for an event set, derive the metric values out of the measurement results and send it -func (m *LikwidCollector) calcEventsetMetrics(evset LikwidEventsetConfig, interval time.Duration, output chan lp.CCMetric) error { +func (m *LikwidCollector) calcEventsetMetrics(evset LikwidEventsetConfig, interval time.Duration, output chan lp.CCMessage) error { invClock := float64(1.0 / m.basefreq) for _, tid := range m.cpu2tid { evset.results[tid]["inverseClock"] = invClock + evset.results[tid]["gotime"] = interval.Seconds() } // Go over the event set metrics, derive the value out of the event:counter values and send it @@ -570,7 +569,7 @@ func (m *LikwidCollector) calcEventsetMetrics(evset LikwidEventsetConfig, interv if !math.IsNaN(value) && metric.Publish { fields := map[string]interface{}{"value": value} y, err := - lp.New( + lp.NewMessage( metric.Name, map[string]string{ "type": metric.Type, @@ -607,7 +606,7 @@ func (m *LikwidCollector) calcEventsetMetrics(evset LikwidEventsetConfig, interv for coreID, value := range totalCoreValues { y, err := - lp.New( + lp.NewMessage( metric.Name, map[string]string{ "type": "core", @@ -644,7 +643,7 @@ func (m *LikwidCollector) calcEventsetMetrics(evset LikwidEventsetConfig, interv for socketID, value := range totalSocketValues { y, err := - lp.New( + lp.NewMessage( metric.Name, map[string]string{ "type": "socket", @@ -679,7 +678,7 @@ func (m *LikwidCollector) calcEventsetMetrics(evset LikwidEventsetConfig, interv } y, err := - lp.New( + lp.NewMessage( metric.Name, map[string]string{ "type": "node", @@ -704,7 +703,7 @@ func (m *LikwidCollector) calcEventsetMetrics(evset LikwidEventsetConfig, interv } // Go over the global metrics, derive the value out of the event sets' metric values and send it -func (m *LikwidCollector) calcGlobalMetrics(groups []LikwidEventsetConfig, interval time.Duration, output chan lp.CCMetric) error { +func (m *LikwidCollector) calcGlobalMetrics(groups []LikwidEventsetConfig, interval time.Duration, output chan lp.CCMessage) error { // Send all metrics with same time stamp // This function does only computiation, counter measurement is done before now := time.Now() @@ -725,6 +724,7 @@ func (m *LikwidCollector) calcGlobalMetrics(groups []LikwidEventsetConfig, inter params[mname] = mres } } + params["gotime"] = interval.Seconds() // Evaluate the metric value, err := agg.EvalFloat64Condition(metric.Calc, params) if err != nil { @@ -738,7 +738,7 @@ func (m *LikwidCollector) calcGlobalMetrics(groups []LikwidEventsetConfig, inter if !math.IsNaN(value) { if metric.Publish { y, err := - lp.New( + lp.NewMessage( metric.Name, map[string]string{ "type": metric.Type, @@ -766,7 +766,7 @@ func (m *LikwidCollector) calcGlobalMetrics(groups []LikwidEventsetConfig, inter return nil } -func (m *LikwidCollector) ReadThread(interval time.Duration, output chan lp.CCMetric) { +func (m *LikwidCollector) ReadThread(interval time.Duration, output chan lp.CCMessage) { var err error = nil groups := make([]LikwidEventsetConfig, 0) @@ -794,7 +794,7 @@ func (m *LikwidCollector) ReadThread(interval time.Duration, output chan lp.CCMe } // main read function taking multiple measurement rounds, each 'interval' seconds long -func (m *LikwidCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *LikwidCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } diff --git a/collectors/loadavgMetric.go b/collectors/loadavgMetric.go index 887e63e..03bd37e 100644 --- a/collectors/loadavgMetric.go +++ b/collectors/loadavgMetric.go @@ -8,18 +8,16 @@ import ( "strings" "time" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" ) -// // LoadavgCollector collects: // * load average of last 1, 5 & 15 minutes // * number of processes currently runnable // * total number of processes in system // // See: https://www.kernel.org/doc/html/latest/filesystems/proc.html -// const LOADAVGFILE = "/proc/loadavg" type LoadavgCollector struct { @@ -68,17 +66,15 @@ func (m *LoadavgCollector) Init(config json.RawMessage) error { return nil } -func (m *LoadavgCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *LoadavgCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } buffer, err := os.ReadFile(LOADAVGFILE) if err != nil { - if err != nil { - cclog.ComponentError( - m.name, - fmt.Sprintf("Read(): Failed to read file '%s': %v", LOADAVGFILE, err)) - } + cclog.ComponentError( + m.name, + fmt.Sprintf("Read(): Failed to read file '%s': %v", LOADAVGFILE, err)) return } now := time.Now() @@ -96,7 +92,7 @@ func (m *LoadavgCollector) Read(interval time.Duration, output chan lp.CCMetric) if m.load_skips[i] { continue } - y, err := lp.New(name, m.tags, m.meta, map[string]interface{}{"value": x}, now) + y, err := lp.NewMessage(name, m.tags, m.meta, map[string]interface{}{"value": x}, now) if err == nil { output <- y } @@ -115,7 +111,7 @@ func (m *LoadavgCollector) Read(interval time.Duration, output chan lp.CCMetric) if m.proc_skips[i] { continue } - y, err := lp.New(name, m.tags, m.meta, map[string]interface{}{"value": x}, now) + y, err := lp.NewMessage(name, m.tags, m.meta, map[string]interface{}{"value": x}, now) if err == nil { output <- y } diff --git a/collectors/lustreMetric.go b/collectors/lustreMetric.go index 02ce572..f6d6ef6 100644 --- a/collectors/lustreMetric.go +++ b/collectors/lustreMetric.go @@ -11,7 +11,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const LUSTRE_SYSFS = `/sys/fs/lustre` @@ -377,7 +377,7 @@ func (m *LustreCollector) Init(config json.RawMessage) error { return nil } -func (m *LustreCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *LustreCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -388,7 +388,7 @@ func (m *LustreCollector) Read(interval time.Duration, output chan lp.CCMetric) for _, def := range m.definitions { var use_x int64 var err error - var y lp.CCMetric + var y lp.CCMessage x, err := getMetricData(data, def.lineprefix, def.lineoffset) if err == nil { use_x = x @@ -399,19 +399,19 @@ func (m *LustreCollector) Read(interval time.Duration, output chan lp.CCMetric) switch def.calc { case "none": value = use_x - y, err = lp.New(def.name, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) + y, err = lp.NewMessage(def.name, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) case "difference": value = use_x - devData[def.name] if value.(int64) < 0 { value = 0 } - y, err = lp.New(def.name, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) + y, err = lp.NewMessage(def.name, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) case "derivative": value = float64(use_x-devData[def.name]) / tdiff.Seconds() if value.(float64) < 0 { value = 0 } - y, err = lp.New(def.name, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) + y, err = lp.NewMessage(def.name, m.tags, m.meta, map[string]interface{}{"value": value}, time.Now()) } if err == nil { y.AddTag("device", device) diff --git a/collectors/memstatMetric.go b/collectors/memstatMetric.go index 4aec4c8..795e030 100644 --- a/collectors/memstatMetric.go +++ b/collectors/memstatMetric.go @@ -13,7 +13,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const MEMSTATFILE = "/proc/meminfo" @@ -159,7 +159,7 @@ func (m *MemstatCollector) Init(config json.RawMessage) error { return err } -func (m *MemstatCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *MemstatCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -175,7 +175,7 @@ func (m *MemstatCollector) Read(interval time.Duration, output chan lp.CCMetric) } } - y, err := lp.New(name, tags, m.meta, map[string]interface{}{"value": value}, time.Now()) + y, err := lp.NewMessage(name, tags, m.meta, map[string]interface{}{"value": value}, time.Now()) if err == nil { if len(unit) > 0 { y.AddMeta("unit", unit) @@ -208,7 +208,7 @@ func (m *MemstatCollector) Read(interval time.Duration, output chan lp.CCMetric) } } } - y, err := lp.New("mem_used", tags, m.meta, map[string]interface{}{"value": memUsed}, time.Now()) + y, err := lp.NewMessage("mem_used", tags, m.meta, map[string]interface{}{"value": memUsed}, time.Now()) if err == nil { if len(unit) > 0 { y.AddMeta("unit", unit) diff --git a/collectors/metricCollector.go b/collectors/metricCollector.go index f09fa61..b8da524 100644 --- a/collectors/metricCollector.go +++ b/collectors/metricCollector.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) type MetricCollector interface { @@ -13,7 +13,7 @@ type MetricCollector interface { Init(config json.RawMessage) error // Initialize metric collector Initialized() bool // Is metric collector initialized? Parallel() bool - Read(duration time.Duration, output chan lp.CCMetric) // Read metrics from metric collector + Read(duration time.Duration, output chan lp.CCMessage) // Read metrics from metric collector Close() // Close / finish metric collector } diff --git a/collectors/netstatMetric.go b/collectors/netstatMetric.go index 2ae1764..7933e53 100644 --- a/collectors/netstatMetric.go +++ b/collectors/netstatMetric.go @@ -10,7 +10,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const NETSTATFILE = "/proc/net/dev" @@ -153,7 +153,7 @@ func (m *NetstatCollector) Init(config json.RawMessage) error { return nil } -func (m *NetstatCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *NetstatCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -197,14 +197,14 @@ func (m *NetstatCollector) Read(interval time.Duration, output chan lp.CCMetric) continue } if m.config.SendAbsoluteValues { - if y, err := lp.New(metric.name, metric.tags, metric.meta, map[string]interface{}{"value": v}, now); err == nil { + if y, err := lp.NewMessage(metric.name, metric.tags, metric.meta, map[string]interface{}{"value": v}, now); err == nil { output <- y } } if m.config.SendDerivedValues { if metric.lastValue >= 0 { rate := float64(v-metric.lastValue) / timeDiff - if y, err := lp.New(metric.name+"_bw", metric.tags, metric.meta_rates, map[string]interface{}{"value": rate}, now); err == nil { + if y, err := lp.NewMessage(metric.name+"_bw", metric.tags, metric.meta_rates, map[string]interface{}{"value": rate}, now); err == nil { output <- y } } diff --git a/collectors/nfsMetric.go b/collectors/nfsMetric.go index 7dca096..019e25c 100644 --- a/collectors/nfsMetric.go +++ b/collectors/nfsMetric.go @@ -11,7 +11,7 @@ import ( "strings" "time" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // First part contains the code for the general NfsCollector. @@ -118,7 +118,7 @@ func (m *nfsCollector) MainInit(config json.RawMessage) error { return nil } -func (m *nfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *nfsCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -140,7 +140,7 @@ func (m *nfsCollector) Read(interval time.Duration, output chan lp.CCMetric) { continue } value := data.current - data.last - y, err := lp.New(fmt.Sprintf("%s_%s", prefix, name), m.tags, m.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage(fmt.Sprintf("%s_%s", prefix, name), m.tags, m.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { y.AddMeta("version", m.version) output <- y diff --git a/collectors/nfsiostatMetric.go b/collectors/nfsiostatMetric.go index 810215c..09686e9 100644 --- a/collectors/nfsiostatMetric.go +++ b/collectors/nfsiostatMetric.go @@ -10,7 +10,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // These are the fields we read from the JSON configuration @@ -114,7 +114,7 @@ func (m *NfsIOStatCollector) Init(config json.RawMessage) error { return err } -func (m *NfsIOStatCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *NfsIOStatCollector) Read(interval time.Duration, output chan lp.CCMessage) { timestamp := time.Now() // Get the current values for all mountpoints @@ -126,7 +126,7 @@ func (m *NfsIOStatCollector) Read(interval time.Duration, output chan lp.CCMetri // Calculate the difference of old and new values for i := range values { x := values[i] - old[i] - y, err := lp.New(fmt.Sprintf("nfsio_%s", i), m.tags, m.meta, map[string]interface{}{"value": x}, timestamp) + y, err := lp.NewMessage(fmt.Sprintf("nfsio_%s", i), m.tags, m.meta, map[string]interface{}{"value": x}, timestamp) if err == nil { if strings.HasPrefix(i, "page") { y.AddMeta("unit", "4K_Pages") diff --git a/collectors/numastatsMetric.go b/collectors/numastatsMetric.go index f79b45b..20b000c 100644 --- a/collectors/numastatsMetric.go +++ b/collectors/numastatsMetric.go @@ -11,7 +11,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // Non-Uniform Memory Access (NUMA) policy hit/miss statistics @@ -97,7 +97,7 @@ func (m *NUMAStatsCollector) Init(config json.RawMessage) error { return nil } -func (m *NUMAStatsCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *NUMAStatsCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -130,7 +130,7 @@ func (m *NUMAStatsCollector) Read(interval time.Duration, output chan lp.CCMetri fmt.Sprintf("Read(): Failed to convert %s='%s' to int64: %v", key, split[1], err)) continue } - y, err := lp.New( + y, err := lp.NewMessage( "numastats_"+key, t.tagSet, m.meta, diff --git a/collectors/nvidiaMetric.go b/collectors/nvidiaMetric.go index 369f12b..eb6d49b 100644 --- a/collectors/nvidiaMetric.go +++ b/collectors/nvidiaMetric.go @@ -9,7 +9,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" "github.com/NVIDIA/go-nvml/pkg/nvml" ) @@ -206,7 +206,7 @@ func (m *NvidiaCollector) Init(config json.RawMessage) error { return nil } -func readMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_fb_mem_total"] || !device.excludeMetrics["nv_fb_mem_used"] || !device.excludeMetrics["nv_fb_mem_reserved"] { var total uint64 var used uint64 @@ -222,7 +222,7 @@ func readMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) error if !device.excludeMetrics["nv_fb_mem_total"] { t := float64(total) / (1024 * 1024) - y, err := lp.New("nv_fb_mem_total", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_fb_mem_total", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "MByte") output <- y @@ -231,7 +231,7 @@ func readMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) error if !device.excludeMetrics["nv_fb_mem_used"] { f := float64(used) / (1024 * 1024) - y, err := lp.New("nv_fb_mem_used", device.tags, device.meta, map[string]interface{}{"value": f}, time.Now()) + y, err := lp.NewMessage("nv_fb_mem_used", device.tags, device.meta, map[string]interface{}{"value": f}, time.Now()) if err == nil { y.AddMeta("unit", "MByte") output <- y @@ -240,7 +240,7 @@ func readMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) error if v2 && !device.excludeMetrics["nv_fb_mem_reserved"] { r := float64(reserved) / (1024 * 1024) - y, err := lp.New("nv_fb_mem_reserved", device.tags, device.meta, map[string]interface{}{"value": r}, time.Now()) + y, err := lp.NewMessage("nv_fb_mem_reserved", device.tags, device.meta, map[string]interface{}{"value": r}, time.Now()) if err == nil { y.AddMeta("unit", "MByte") output <- y @@ -250,7 +250,7 @@ func readMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) error return nil } -func readBarMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readBarMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_bar1_mem_total"] || !device.excludeMetrics["nv_bar1_mem_used"] { meminfo, ret := nvml.DeviceGetBAR1MemoryInfo(device.device) if ret != nvml.SUCCESS { @@ -259,7 +259,7 @@ func readBarMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) er } if !device.excludeMetrics["nv_bar1_mem_total"] { t := float64(meminfo.Bar1Total) / (1024 * 1024) - y, err := lp.New("nv_bar1_mem_total", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_bar1_mem_total", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "MByte") output <- y @@ -267,7 +267,7 @@ func readBarMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) er } if !device.excludeMetrics["nv_bar1_mem_used"] { t := float64(meminfo.Bar1Used) / (1024 * 1024) - y, err := lp.New("nv_bar1_mem_used", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_bar1_mem_used", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "MByte") output <- y @@ -277,7 +277,7 @@ func readBarMemoryInfo(device NvidiaCollectorDevice, output chan lp.CCMetric) er return nil } -func readUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readUtilization(device NvidiaCollectorDevice, output chan lp.CCMessage) error { isMig, ret := nvml.DeviceIsMigDeviceHandle(device.device) if ret != nvml.SUCCESS { err := errors.New(nvml.ErrorString(ret)) @@ -301,14 +301,14 @@ func readUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) erro util, ret := nvml.DeviceGetUtilizationRates(device.device) if ret == nvml.SUCCESS { if !device.excludeMetrics["nv_util"] { - y, err := lp.New("nv_util", device.tags, device.meta, map[string]interface{}{"value": float64(util.Gpu)}, time.Now()) + y, err := lp.NewMessage("nv_util", device.tags, device.meta, map[string]interface{}{"value": float64(util.Gpu)}, time.Now()) if err == nil { y.AddMeta("unit", "%") output <- y } } if !device.excludeMetrics["nv_mem_util"] { - y, err := lp.New("nv_mem_util", device.tags, device.meta, map[string]interface{}{"value": float64(util.Memory)}, time.Now()) + y, err := lp.NewMessage("nv_mem_util", device.tags, device.meta, map[string]interface{}{"value": float64(util.Memory)}, time.Now()) if err == nil { y.AddMeta("unit", "%") output <- y @@ -319,7 +319,7 @@ func readUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) erro return nil } -func readTemp(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readTemp(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_temp"] { // Retrieves the current temperature readings for the device, in degrees C. // @@ -328,7 +328,7 @@ func readTemp(device NvidiaCollectorDevice, output chan lp.CCMetric) error { // * NVML_TEMPERATURE_COUNT temp, ret := nvml.DeviceGetTemperature(device.device, nvml.TEMPERATURE_GPU) if ret == nvml.SUCCESS { - y, err := lp.New("nv_temp", device.tags, device.meta, map[string]interface{}{"value": float64(temp)}, time.Now()) + y, err := lp.NewMessage("nv_temp", device.tags, device.meta, map[string]interface{}{"value": float64(temp)}, time.Now()) if err == nil { y.AddMeta("unit", "degC") output <- y @@ -338,7 +338,7 @@ func readTemp(device NvidiaCollectorDevice, output chan lp.CCMetric) error { return nil } -func readFan(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readFan(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_fan"] { // Retrieves the intended operating speed of the device's fan. // @@ -351,7 +351,7 @@ func readFan(device NvidiaCollectorDevice, output chan lp.CCMetric) error { // This value may exceed 100% in certain cases. fan, ret := nvml.DeviceGetFanSpeed(device.device) if ret == nvml.SUCCESS { - y, err := lp.New("nv_fan", device.tags, device.meta, map[string]interface{}{"value": float64(fan)}, time.Now()) + y, err := lp.NewMessage("nv_fan", device.tags, device.meta, map[string]interface{}{"value": float64(fan)}, time.Now()) if err == nil { y.AddMeta("unit", "%") output <- y @@ -361,14 +361,14 @@ func readFan(device NvidiaCollectorDevice, output chan lp.CCMetric) error { return nil } -// func readFans(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +// func readFans(device NvidiaCollectorDevice, output chan lp.CCMessage) error { // if !device.excludeMetrics["nv_fan"] { // numFans, ret := nvml.DeviceGetNumFans(device.device) // if ret == nvml.SUCCESS { // for i := 0; i < numFans; i++ { // fan, ret := nvml.DeviceGetFanSpeed_v2(device.device, i) // if ret == nvml.SUCCESS { -// y, err := lp.New("nv_fan", device.tags, device.meta, map[string]interface{}{"value": float64(fan)}, time.Now()) +// y, err := lp.NewMessage("nv_fan", device.tags, device.meta, map[string]interface{}{"value": float64(fan)}, time.Now()) // if err == nil { // y.AddMeta("unit", "%") // y.AddTag("stype", "fan") @@ -382,7 +382,7 @@ func readFan(device NvidiaCollectorDevice, output chan lp.CCMetric) error { // return nil // } -func readEccMode(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readEccMode(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_ecc_mode"] { // Retrieves the current and pending ECC modes for the device. // @@ -393,21 +393,21 @@ func readEccMode(device NvidiaCollectorDevice, output chan lp.CCMetric) error { // The "pending" ECC mode refers to the target mode following the next reboot. _, ecc_pend, ret := nvml.DeviceGetEccMode(device.device) if ret == nvml.SUCCESS { - var y lp.CCMetric + var y lp.CCMessage var err error switch ecc_pend { case nvml.FEATURE_DISABLED: - y, err = lp.New("nv_ecc_mode", device.tags, device.meta, map[string]interface{}{"value": "OFF"}, time.Now()) + y, err = lp.NewMessage("nv_ecc_mode", device.tags, device.meta, map[string]interface{}{"value": "OFF"}, time.Now()) case nvml.FEATURE_ENABLED: - y, err = lp.New("nv_ecc_mode", device.tags, device.meta, map[string]interface{}{"value": "ON"}, time.Now()) + y, err = lp.NewMessage("nv_ecc_mode", device.tags, device.meta, map[string]interface{}{"value": "ON"}, time.Now()) default: - y, err = lp.New("nv_ecc_mode", device.tags, device.meta, map[string]interface{}{"value": "UNKNOWN"}, time.Now()) + y, err = lp.NewMessage("nv_ecc_mode", device.tags, device.meta, map[string]interface{}{"value": "UNKNOWN"}, time.Now()) } if err == nil { output <- y } } else if ret == nvml.ERROR_NOT_SUPPORTED { - y, err := lp.New("nv_ecc_mode", device.tags, device.meta, map[string]interface{}{"value": "N/A"}, time.Now()) + y, err := lp.NewMessage("nv_ecc_mode", device.tags, device.meta, map[string]interface{}{"value": "N/A"}, time.Now()) if err == nil { output <- y } @@ -416,7 +416,7 @@ func readEccMode(device NvidiaCollectorDevice, output chan lp.CCMetric) error { return nil } -func readPerfState(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readPerfState(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_perf_state"] { // Retrieves the current performance state for the device. // @@ -427,7 +427,7 @@ func readPerfState(device NvidiaCollectorDevice, output chan lp.CCMetric) error // 32: Unknown performance state. pState, ret := nvml.DeviceGetPerformanceState(device.device) if ret == nvml.SUCCESS { - y, err := lp.New("nv_perf_state", device.tags, device.meta, map[string]interface{}{"value": fmt.Sprintf("P%d", int(pState))}, time.Now()) + y, err := lp.NewMessage("nv_perf_state", device.tags, device.meta, map[string]interface{}{"value": fmt.Sprintf("P%d", int(pState))}, time.Now()) if err == nil { output <- y } @@ -436,7 +436,7 @@ func readPerfState(device NvidiaCollectorDevice, output chan lp.CCMetric) error return nil } -func readPowerUsage(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readPowerUsage(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_power_usage"] { // Retrieves power usage for this GPU in milliwatts and its associated circuitry (e.g. memory) // @@ -450,7 +450,7 @@ func readPowerUsage(device NvidiaCollectorDevice, output chan lp.CCMetric) error if mode == nvml.FEATURE_ENABLED { power, ret := nvml.DeviceGetPowerUsage(device.device) if ret == nvml.SUCCESS { - y, err := lp.New("nv_power_usage", device.tags, device.meta, map[string]interface{}{"value": float64(power) / 1000}, time.Now()) + y, err := lp.NewMessage("nv_power_usage", device.tags, device.meta, map[string]interface{}{"value": float64(power) / 1000}, time.Now()) if err == nil { y.AddMeta("unit", "watts") output <- y @@ -461,7 +461,7 @@ func readPowerUsage(device NvidiaCollectorDevice, output chan lp.CCMetric) error return nil } -func readClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readClocks(device NvidiaCollectorDevice, output chan lp.CCMessage) error { // Retrieves the current clock speeds for the device. // // Available clock information: @@ -471,7 +471,7 @@ func readClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error { if !device.excludeMetrics["nv_graphics_clock"] { graphicsClock, ret := nvml.DeviceGetClockInfo(device.device, nvml.CLOCK_GRAPHICS) if ret == nvml.SUCCESS { - y, err := lp.New("nv_graphics_clock", device.tags, device.meta, map[string]interface{}{"value": float64(graphicsClock)}, time.Now()) + y, err := lp.NewMessage("nv_graphics_clock", device.tags, device.meta, map[string]interface{}{"value": float64(graphicsClock)}, time.Now()) if err == nil { y.AddMeta("unit", "MHz") output <- y @@ -482,7 +482,7 @@ func readClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error { if !device.excludeMetrics["nv_sm_clock"] { smCock, ret := nvml.DeviceGetClockInfo(device.device, nvml.CLOCK_SM) if ret == nvml.SUCCESS { - y, err := lp.New("nv_sm_clock", device.tags, device.meta, map[string]interface{}{"value": float64(smCock)}, time.Now()) + y, err := lp.NewMessage("nv_sm_clock", device.tags, device.meta, map[string]interface{}{"value": float64(smCock)}, time.Now()) if err == nil { y.AddMeta("unit", "MHz") output <- y @@ -493,7 +493,7 @@ func readClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error { if !device.excludeMetrics["nv_mem_clock"] { memClock, ret := nvml.DeviceGetClockInfo(device.device, nvml.CLOCK_MEM) if ret == nvml.SUCCESS { - y, err := lp.New("nv_mem_clock", device.tags, device.meta, map[string]interface{}{"value": float64(memClock)}, time.Now()) + y, err := lp.NewMessage("nv_mem_clock", device.tags, device.meta, map[string]interface{}{"value": float64(memClock)}, time.Now()) if err == nil { y.AddMeta("unit", "MHz") output <- y @@ -503,7 +503,7 @@ func readClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error { if !device.excludeMetrics["nv_video_clock"] { memClock, ret := nvml.DeviceGetClockInfo(device.device, nvml.CLOCK_VIDEO) if ret == nvml.SUCCESS { - y, err := lp.New("nv_video_clock", device.tags, device.meta, map[string]interface{}{"value": float64(memClock)}, time.Now()) + y, err := lp.NewMessage("nv_video_clock", device.tags, device.meta, map[string]interface{}{"value": float64(memClock)}, time.Now()) if err == nil { y.AddMeta("unit", "MHz") output <- y @@ -513,7 +513,7 @@ func readClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error { return nil } -func readMaxClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readMaxClocks(device NvidiaCollectorDevice, output chan lp.CCMessage) error { // Retrieves the maximum clock speeds for the device. // // Available clock information: @@ -528,7 +528,7 @@ func readMaxClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error if !device.excludeMetrics["nv_max_graphics_clock"] { max_gclk, ret := nvml.DeviceGetMaxClockInfo(device.device, nvml.CLOCK_GRAPHICS) if ret == nvml.SUCCESS { - y, err := lp.New("nv_max_graphics_clock", device.tags, device.meta, map[string]interface{}{"value": float64(max_gclk)}, time.Now()) + y, err := lp.NewMessage("nv_max_graphics_clock", device.tags, device.meta, map[string]interface{}{"value": float64(max_gclk)}, time.Now()) if err == nil { y.AddMeta("unit", "MHz") output <- y @@ -539,7 +539,7 @@ func readMaxClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error if !device.excludeMetrics["nv_max_sm_clock"] { maxSmClock, ret := nvml.DeviceGetClockInfo(device.device, nvml.CLOCK_SM) if ret == nvml.SUCCESS { - y, err := lp.New("nv_max_sm_clock", device.tags, device.meta, map[string]interface{}{"value": float64(maxSmClock)}, time.Now()) + y, err := lp.NewMessage("nv_max_sm_clock", device.tags, device.meta, map[string]interface{}{"value": float64(maxSmClock)}, time.Now()) if err == nil { y.AddMeta("unit", "MHz") output <- y @@ -550,7 +550,7 @@ func readMaxClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error if !device.excludeMetrics["nv_max_mem_clock"] { maxMemClock, ret := nvml.DeviceGetClockInfo(device.device, nvml.CLOCK_MEM) if ret == nvml.SUCCESS { - y, err := lp.New("nv_max_mem_clock", device.tags, device.meta, map[string]interface{}{"value": float64(maxMemClock)}, time.Now()) + y, err := lp.NewMessage("nv_max_mem_clock", device.tags, device.meta, map[string]interface{}{"value": float64(maxMemClock)}, time.Now()) if err == nil { y.AddMeta("unit", "MHz") output <- y @@ -561,7 +561,7 @@ func readMaxClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error if !device.excludeMetrics["nv_max_video_clock"] { maxMemClock, ret := nvml.DeviceGetClockInfo(device.device, nvml.CLOCK_VIDEO) if ret == nvml.SUCCESS { - y, err := lp.New("nv_max_video_clock", device.tags, device.meta, map[string]interface{}{"value": float64(maxMemClock)}, time.Now()) + y, err := lp.NewMessage("nv_max_video_clock", device.tags, device.meta, map[string]interface{}{"value": float64(maxMemClock)}, time.Now()) if err == nil { y.AddMeta("unit", "MHz") output <- y @@ -571,7 +571,7 @@ func readMaxClocks(device NvidiaCollectorDevice, output chan lp.CCMetric) error return nil } -func readEccErrors(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readEccErrors(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_ecc_uncorrected_error"] { // Retrieves the total ECC error counts for the device. // @@ -584,7 +584,7 @@ func readEccErrors(device NvidiaCollectorDevice, output chan lp.CCMetric) error // i.e. the total set of errors across the entire device. ecc_db, ret := nvml.DeviceGetTotalEccErrors(device.device, nvml.MEMORY_ERROR_TYPE_UNCORRECTED, nvml.AGGREGATE_ECC) if ret == nvml.SUCCESS { - y, err := lp.New("nv_ecc_uncorrected_error", device.tags, device.meta, map[string]interface{}{"value": float64(ecc_db)}, time.Now()) + y, err := lp.NewMessage("nv_ecc_uncorrected_error", device.tags, device.meta, map[string]interface{}{"value": float64(ecc_db)}, time.Now()) if err == nil { output <- y } @@ -593,7 +593,7 @@ func readEccErrors(device NvidiaCollectorDevice, output chan lp.CCMetric) error if !device.excludeMetrics["nv_ecc_corrected_error"] { ecc_sb, ret := nvml.DeviceGetTotalEccErrors(device.device, nvml.MEMORY_ERROR_TYPE_CORRECTED, nvml.AGGREGATE_ECC) if ret == nvml.SUCCESS { - y, err := lp.New("nv_ecc_corrected_error", device.tags, device.meta, map[string]interface{}{"value": float64(ecc_sb)}, time.Now()) + y, err := lp.NewMessage("nv_ecc_corrected_error", device.tags, device.meta, map[string]interface{}{"value": float64(ecc_sb)}, time.Now()) if err == nil { output <- y } @@ -602,7 +602,7 @@ func readEccErrors(device NvidiaCollectorDevice, output chan lp.CCMetric) error return nil } -func readPowerLimit(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readPowerLimit(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_power_max_limit"] { // Retrieves the power management limit associated with this device. // @@ -612,7 +612,7 @@ func readPowerLimit(device NvidiaCollectorDevice, output chan lp.CCMetric) error // If the card's total power draw reaches this limit the power management algorithm kicks in. pwr_limit, ret := nvml.DeviceGetPowerManagementLimit(device.device) if ret == nvml.SUCCESS { - y, err := lp.New("nv_power_max_limit", device.tags, device.meta, map[string]interface{}{"value": float64(pwr_limit) / 1000}, time.Now()) + y, err := lp.NewMessage("nv_power_max_limit", device.tags, device.meta, map[string]interface{}{"value": float64(pwr_limit) / 1000}, time.Now()) if err == nil { y.AddMeta("unit", "watts") output <- y @@ -622,7 +622,7 @@ func readPowerLimit(device NvidiaCollectorDevice, output chan lp.CCMetric) error return nil } -func readEncUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readEncUtilization(device NvidiaCollectorDevice, output chan lp.CCMessage) error { isMig, ret := nvml.DeviceIsMigDeviceHandle(device.device) if ret != nvml.SUCCESS { err := errors.New(nvml.ErrorString(ret)) @@ -639,7 +639,7 @@ func readEncUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) e // Note: On MIG-enabled GPUs, querying encoder utilization is not currently supported. enc_util, _, ret := nvml.DeviceGetEncoderUtilization(device.device) if ret == nvml.SUCCESS { - y, err := lp.New("nv_encoder_util", device.tags, device.meta, map[string]interface{}{"value": float64(enc_util)}, time.Now()) + y, err := lp.NewMessage("nv_encoder_util", device.tags, device.meta, map[string]interface{}{"value": float64(enc_util)}, time.Now()) if err == nil { y.AddMeta("unit", "%") output <- y @@ -649,7 +649,7 @@ func readEncUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) e return nil } -func readDecUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readDecUtilization(device NvidiaCollectorDevice, output chan lp.CCMessage) error { isMig, ret := nvml.DeviceIsMigDeviceHandle(device.device) if ret != nvml.SUCCESS { err := errors.New(nvml.ErrorString(ret)) @@ -666,7 +666,7 @@ func readDecUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) e // Note: On MIG-enabled GPUs, querying encoder utilization is not currently supported. dec_util, _, ret := nvml.DeviceGetDecoderUtilization(device.device) if ret == nvml.SUCCESS { - y, err := lp.New("nv_decoder_util", device.tags, device.meta, map[string]interface{}{"value": float64(dec_util)}, time.Now()) + y, err := lp.NewMessage("nv_decoder_util", device.tags, device.meta, map[string]interface{}{"value": float64(dec_util)}, time.Now()) if err == nil { y.AddMeta("unit", "%") output <- y @@ -676,7 +676,7 @@ func readDecUtilization(device NvidiaCollectorDevice, output chan lp.CCMetric) e return nil } -func readRemappedRows(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readRemappedRows(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_remapped_rows_corrected"] || !device.excludeMetrics["nv_remapped_rows_uncorrected"] || !device.excludeMetrics["nv_remapped_rows_pending"] || @@ -693,13 +693,13 @@ func readRemappedRows(device NvidiaCollectorDevice, output chan lp.CCMetric) err corrected, uncorrected, pending, failure, ret := nvml.DeviceGetRemappedRows(device.device) if ret == nvml.SUCCESS { if !device.excludeMetrics["nv_remapped_rows_corrected"] { - y, err := lp.New("nv_remapped_rows_corrected", device.tags, device.meta, map[string]interface{}{"value": float64(corrected)}, time.Now()) + y, err := lp.NewMessage("nv_remapped_rows_corrected", device.tags, device.meta, map[string]interface{}{"value": float64(corrected)}, time.Now()) if err == nil { output <- y } } if !device.excludeMetrics["nv_remapped_rows_uncorrected"] { - y, err := lp.New("nv_remapped_rows_corrected", device.tags, device.meta, map[string]interface{}{"value": float64(uncorrected)}, time.Now()) + y, err := lp.NewMessage("nv_remapped_rows_corrected", device.tags, device.meta, map[string]interface{}{"value": float64(uncorrected)}, time.Now()) if err == nil { output <- y } @@ -709,7 +709,7 @@ func readRemappedRows(device NvidiaCollectorDevice, output chan lp.CCMetric) err if pending { p = 1 } - y, err := lp.New("nv_remapped_rows_pending", device.tags, device.meta, map[string]interface{}{"value": p}, time.Now()) + y, err := lp.NewMessage("nv_remapped_rows_pending", device.tags, device.meta, map[string]interface{}{"value": p}, time.Now()) if err == nil { output <- y } @@ -719,7 +719,7 @@ func readRemappedRows(device NvidiaCollectorDevice, output chan lp.CCMetric) err if failure { f = 1 } - y, err := lp.New("nv_remapped_rows_failure", device.tags, device.meta, map[string]interface{}{"value": f}, time.Now()) + y, err := lp.NewMessage("nv_remapped_rows_failure", device.tags, device.meta, map[string]interface{}{"value": f}, time.Now()) if err == nil { output <- y } @@ -729,7 +729,7 @@ func readRemappedRows(device NvidiaCollectorDevice, output chan lp.CCMetric) err return nil } -func readProcessCounts(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readProcessCounts(device NvidiaCollectorDevice, output chan lp.CCMessage) error { if !device.excludeMetrics["nv_compute_processes"] { // Get information about processes with a compute context on a device // @@ -753,7 +753,7 @@ func readProcessCounts(device NvidiaCollectorDevice, output chan lp.CCMetric) er // Querying per-instance information using MIG device handles is not supported if the device is in vGPU Host virtualization mode. procList, ret := nvml.DeviceGetComputeRunningProcesses(device.device) if ret == nvml.SUCCESS { - y, err := lp.New("nv_compute_processes", device.tags, device.meta, map[string]interface{}{"value": len(procList)}, time.Now()) + y, err := lp.NewMessage("nv_compute_processes", device.tags, device.meta, map[string]interface{}{"value": len(procList)}, time.Now()) if err == nil { output <- y } @@ -782,7 +782,7 @@ func readProcessCounts(device NvidiaCollectorDevice, output chan lp.CCMetric) er // Querying per-instance information using MIG device handles is not supported if the device is in vGPU Host virtualization mode. procList, ret := nvml.DeviceGetGraphicsRunningProcesses(device.device) if ret == nvml.SUCCESS { - y, err := lp.New("nv_graphics_processes", device.tags, device.meta, map[string]interface{}{"value": len(procList)}, time.Now()) + y, err := lp.NewMessage("nv_graphics_processes", device.tags, device.meta, map[string]interface{}{"value": len(procList)}, time.Now()) if err == nil { output <- y } @@ -812,7 +812,7 @@ func readProcessCounts(device NvidiaCollectorDevice, output chan lp.CCMetric) er // // Querying per-instance information using MIG device handles is not supported if the device is in vGPU Host virtualization mode. // procList, ret := nvml.DeviceGetMPSComputeRunningProcesses(device.device) // if ret == nvml.SUCCESS { - // y, err := lp.New("nv_mps_compute_processes", device.tags, device.meta, map[string]interface{}{"value": len(procList)}, time.Now()) + // y, err := lp.NewMessage("nv_mps_compute_processes", device.tags, device.meta, map[string]interface{}{"value": len(procList)}, time.Now()) // if err == nil { // output <- y // } @@ -821,7 +821,7 @@ func readProcessCounts(device NvidiaCollectorDevice, output chan lp.CCMetric) er return nil } -func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMessage) error { var violTime nvml.ViolationTime var ret nvml.Return @@ -840,7 +840,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e violTime, ret = nvml.DeviceGetViolationStatus(device.device, nvml.PERF_POLICY_POWER) if ret == nvml.SUCCESS { t := float64(violTime.ViolationTime) * 1e-9 - y, err := lp.New("nv_violation_power", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_violation_power", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "sec") output <- y @@ -852,7 +852,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e violTime, ret = nvml.DeviceGetViolationStatus(device.device, nvml.PERF_POLICY_THERMAL) if ret == nvml.SUCCESS { t := float64(violTime.ViolationTime) * 1e-9 - y, err := lp.New("nv_violation_thermal", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_violation_thermal", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "sec") output <- y @@ -864,7 +864,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e violTime, ret = nvml.DeviceGetViolationStatus(device.device, nvml.PERF_POLICY_SYNC_BOOST) if ret == nvml.SUCCESS { t := float64(violTime.ViolationTime) * 1e-9 - y, err := lp.New("nv_violation_sync_boost", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_violation_sync_boost", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "sec") output <- y @@ -876,7 +876,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e violTime, ret = nvml.DeviceGetViolationStatus(device.device, nvml.PERF_POLICY_BOARD_LIMIT) if ret == nvml.SUCCESS { t := float64(violTime.ViolationTime) * 1e-9 - y, err := lp.New("nv_violation_board_limit", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_violation_board_limit", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "sec") output <- y @@ -888,7 +888,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e violTime, ret = nvml.DeviceGetViolationStatus(device.device, nvml.PERF_POLICY_LOW_UTILIZATION) if ret == nvml.SUCCESS { t := float64(violTime.ViolationTime) * 1e-9 - y, err := lp.New("nv_violation_low_util", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_violation_low_util", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "sec") output <- y @@ -900,7 +900,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e violTime, ret = nvml.DeviceGetViolationStatus(device.device, nvml.PERF_POLICY_RELIABILITY) if ret == nvml.SUCCESS { t := float64(violTime.ViolationTime) * 1e-9 - y, err := lp.New("nv_violation_reliability", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_violation_reliability", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "sec") output <- y @@ -912,7 +912,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e violTime, ret = nvml.DeviceGetViolationStatus(device.device, nvml.PERF_POLICY_TOTAL_APP_CLOCKS) if ret == nvml.SUCCESS { t := float64(violTime.ViolationTime) * 1e-9 - y, err := lp.New("nv_violation_below_app_clock", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_violation_below_app_clock", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "sec") output <- y @@ -924,7 +924,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e violTime, ret = nvml.DeviceGetViolationStatus(device.device, nvml.PERF_POLICY_TOTAL_BASE_CLOCKS) if ret == nvml.SUCCESS { t := float64(violTime.ViolationTime) * 1e-9 - y, err := lp.New("nv_violation_below_base_clock", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) + y, err := lp.NewMessage("nv_violation_below_base_clock", device.tags, device.meta, map[string]interface{}{"value": t}, time.Now()) if err == nil { y.AddMeta("unit", "sec") output <- y @@ -935,7 +935,7 @@ func readViolationStats(device NvidiaCollectorDevice, output chan lp.CCMetric) e return nil } -func readNVLinkStats(device NvidiaCollectorDevice, output chan lp.CCMetric) error { +func readNVLinkStats(device NvidiaCollectorDevice, output chan lp.CCMessage) error { // Retrieves the specified error counter value // Please refer to \a nvmlNvLinkErrorCounter_t for error counters that are available // @@ -949,7 +949,7 @@ func readNVLinkStats(device NvidiaCollectorDevice, output chan lp.CCMetric) erro // Data link receive data CRC error counter count, ret := nvml.DeviceGetNvLinkErrorCounter(device.device, i, nvml.NVLINK_ERROR_DL_CRC_DATA) if ret == nvml.SUCCESS { - y, err := lp.New("nv_nvlink_crc_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) + y, err := lp.NewMessage("nv_nvlink_crc_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) if err == nil { y.AddTag("stype", "nvlink") y.AddTag("stype-id", fmt.Sprintf("%d", i)) @@ -961,7 +961,7 @@ func readNVLinkStats(device NvidiaCollectorDevice, output chan lp.CCMetric) erro // Data link receive data ECC error counter count, ret := nvml.DeviceGetNvLinkErrorCounter(device.device, i, nvml.NVLINK_ERROR_DL_ECC_DATA) if ret == nvml.SUCCESS { - y, err := lp.New("nv_nvlink_ecc_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) + y, err := lp.NewMessage("nv_nvlink_ecc_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) if err == nil { y.AddTag("stype", "nvlink") y.AddTag("stype-id", fmt.Sprintf("%d", i)) @@ -973,7 +973,7 @@ func readNVLinkStats(device NvidiaCollectorDevice, output chan lp.CCMetric) erro // Data link transmit replay error counter count, ret := nvml.DeviceGetNvLinkErrorCounter(device.device, i, nvml.NVLINK_ERROR_DL_REPLAY) if ret == nvml.SUCCESS { - y, err := lp.New("nv_nvlink_replay_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) + y, err := lp.NewMessage("nv_nvlink_replay_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) if err == nil { y.AddTag("stype", "nvlink") y.AddTag("stype-id", fmt.Sprintf("%d", i)) @@ -985,7 +985,7 @@ func readNVLinkStats(device NvidiaCollectorDevice, output chan lp.CCMetric) erro // Data link transmit recovery error counter count, ret := nvml.DeviceGetNvLinkErrorCounter(device.device, i, nvml.NVLINK_ERROR_DL_RECOVERY) if ret == nvml.SUCCESS { - y, err := lp.New("nv_nvlink_recovery_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) + y, err := lp.NewMessage("nv_nvlink_recovery_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) if err == nil { y.AddTag("stype", "nvlink") y.AddTag("stype-id", fmt.Sprintf("%d", i)) @@ -997,7 +997,7 @@ func readNVLinkStats(device NvidiaCollectorDevice, output chan lp.CCMetric) erro // Data link receive flow control digit CRC error counter count, ret := nvml.DeviceGetNvLinkErrorCounter(device.device, i, nvml.NVLINK_ERROR_DL_CRC_FLIT) if ret == nvml.SUCCESS { - y, err := lp.New("nv_nvlink_crc_flit_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) + y, err := lp.NewMessage("nv_nvlink_crc_flit_errors", device.tags, device.meta, map[string]interface{}{"value": count}, time.Now()) if err == nil { y.AddTag("stype", "nvlink") y.AddTag("stype-id", fmt.Sprintf("%d", i)) @@ -1011,13 +1011,13 @@ func readNVLinkStats(device NvidiaCollectorDevice, output chan lp.CCMetric) erro return nil } -func (m *NvidiaCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *NvidiaCollector) Read(interval time.Duration, output chan lp.CCMessage) { var err error if !m.init { return } - readAll := func(device NvidiaCollectorDevice, output chan lp.CCMetric) { + readAll := func(device NvidiaCollectorDevice, output chan lp.CCMessage) { name, ret := nvml.DeviceGetName(device.device) if ret != nvml.SUCCESS { name = "NoName" diff --git a/collectors/raplMetric.go b/collectors/raplMetric.go index 57c456b..7800288 100644 --- a/collectors/raplMetric.go +++ b/collectors/raplMetric.go @@ -10,7 +10,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // running average power limit (RAPL) monitoring attributes for a zone @@ -214,7 +214,7 @@ func (m *RAPLCollector) Init(config json.RawMessage) error { // Read reads running average power limit (RAPL) monitoring attributes for all initialized zones // See: https://www.kernel.org/doc/html/latest/power/powercap/powercap.html#monitoring-attributes -func (m *RAPLCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *RAPLCollector) Read(interval time.Duration, output chan lp.CCMessage) { for i := range m.RAPLZoneInfo { p := &m.RAPLZoneInfo[i] @@ -237,7 +237,7 @@ func (m *RAPLCollector) Read(interval time.Duration, output chan lp.CCMetric) { timeDiff := energyTimestamp.Sub(p.energyTimestamp) averagePower := float64(energyDiff) / float64(timeDiff.Microseconds()) - y, err := lp.New( + y, err := lp.NewMessage( "rapl_average_power", p.tags, m.meta, diff --git a/collectors/rocmsmiMetric.go b/collectors/rocmsmiMetric.go index 9d8625d..32b3eca 100644 --- a/collectors/rocmsmiMetric.go +++ b/collectors/rocmsmiMetric.go @@ -7,7 +7,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" "github.com/ClusterCockpit/go-rocm-smi/pkg/rocm_smi" ) @@ -162,7 +162,7 @@ func (m *RocmSmiCollector) Init(config json.RawMessage) error { // Read collects all metrics belonging to the sample collector // and sends them through the output channel to the collector manager -func (m *RocmSmiCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *RocmSmiCollector) Read(interval time.Duration, output chan lp.CCMessage) { // Create a sample metric timestamp := time.Now() @@ -175,119 +175,119 @@ func (m *RocmSmiCollector) Read(interval time.Duration, output chan lp.CCMetric) if !dev.excludeMetrics["rocm_gfx_util"] { value := metrics.Average_gfx_activity - y, err := lp.New("rocm_gfx_util", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_gfx_util", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_umc_util"] { value := metrics.Average_umc_activity - y, err := lp.New("rocm_umc_util", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_umc_util", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_mm_util"] { value := metrics.Average_mm_activity - y, err := lp.New("rocm_mm_util", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_mm_util", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_avg_power"] { value := metrics.Average_socket_power - y, err := lp.New("rocm_avg_power", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_avg_power", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_temp_mem"] { value := metrics.Temperature_mem - y, err := lp.New("rocm_temp_mem", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_temp_mem", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_temp_hotspot"] { value := metrics.Temperature_hotspot - y, err := lp.New("rocm_temp_hotspot", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_temp_hotspot", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_temp_edge"] { value := metrics.Temperature_edge - y, err := lp.New("rocm_temp_edge", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_temp_edge", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_temp_vrgfx"] { value := metrics.Temperature_vrgfx - y, err := lp.New("rocm_temp_vrgfx", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_temp_vrgfx", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_temp_vrsoc"] { value := metrics.Temperature_vrsoc - y, err := lp.New("rocm_temp_vrsoc", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_temp_vrsoc", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_temp_vrmem"] { value := metrics.Temperature_vrmem - y, err := lp.New("rocm_temp_vrmem", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_temp_vrmem", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_gfx_clock"] { value := metrics.Average_gfxclk_frequency - y, err := lp.New("rocm_gfx_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_gfx_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_soc_clock"] { value := metrics.Average_socclk_frequency - y, err := lp.New("rocm_soc_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_soc_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_u_clock"] { value := metrics.Average_uclk_frequency - y, err := lp.New("rocm_u_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_u_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_v0_clock"] { value := metrics.Average_vclk0_frequency - y, err := lp.New("rocm_v0_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_v0_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_v1_clock"] { value := metrics.Average_vclk1_frequency - y, err := lp.New("rocm_v1_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_v1_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_d0_clock"] { value := metrics.Average_dclk0_frequency - y, err := lp.New("rocm_d0_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_d0_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } } if !dev.excludeMetrics["rocm_d1_clock"] { value := metrics.Average_dclk1_frequency - y, err := lp.New("rocm_d1_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_d1_clock", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { output <- y } @@ -295,7 +295,7 @@ func (m *RocmSmiCollector) Read(interval time.Duration, output chan lp.CCMetric) if !dev.excludeMetrics["rocm_temp_hbm"] { for i := 0; i < rocm_smi.NUM_HBM_INSTANCES; i++ { value := metrics.Temperature_hbm[i] - y, err := lp.New("rocm_temp_hbm", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("rocm_temp_hbm", dev.tags, dev.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { y.AddTag("stype", "device") y.AddTag("stype-id", fmt.Sprintf("%d", i)) diff --git a/collectors/sampleMetric.go b/collectors/sampleMetric.go index 4c3ac66..7f0f33c 100644 --- a/collectors/sampleMetric.go +++ b/collectors/sampleMetric.go @@ -5,7 +5,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // These are the fields we read from the JSON configuration @@ -74,7 +74,7 @@ func (m *SampleCollector) Init(config json.RawMessage) error { // Read collects all metrics belonging to the sample collector // and sends them through the output channel to the collector manager -func (m *SampleCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *SampleCollector) Read(interval time.Duration, output chan lp.CCMessage) { // Create a sample metric timestamp := time.Now() @@ -85,7 +85,7 @@ func (m *SampleCollector) Read(interval time.Duration, output chan lp.CCMetric) // stop := readState() // value = (stop - start) / interval.Seconds() - y, err := lp.New("sample_metric", m.tags, m.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("sample_metric", m.tags, m.meta, map[string]interface{}{"value": value}, timestamp) if err == nil { // Send it to output channel output <- y diff --git a/collectors/sampleTimerMetric.go b/collectors/sampleTimerMetric.go index dfac808..cea5520 100644 --- a/collectors/sampleTimerMetric.go +++ b/collectors/sampleTimerMetric.go @@ -6,7 +6,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // These are the fields we read from the JSON configuration @@ -25,7 +25,7 @@ type SampleTimerCollector struct { config SampleTimerCollectorConfig // the configuration structure interval time.Duration // the interval parsed from configuration ticker *time.Ticker // own timer - output chan lp.CCMetric // own internal output channel + output chan lp.CCMessage // own internal output channel } func (m *SampleTimerCollector) Init(name string, config json.RawMessage) error { @@ -100,14 +100,14 @@ func (m *SampleTimerCollector) ReadMetrics(timestamp time.Time) { // stop := readState() // value = (stop - start) / interval.Seconds() - y, err := lp.New("sample_metric", m.tags, m.meta, map[string]interface{}{"value": value}, timestamp) + y, err := lp.NewMessage("sample_metric", m.tags, m.meta, map[string]interface{}{"value": value}, timestamp) if err == nil && m.output != nil { // Send it to output channel if we have a valid channel m.output <- y } } -func (m *SampleTimerCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *SampleTimerCollector) Read(interval time.Duration, output chan lp.CCMessage) { // Capture output channel m.output = output } diff --git a/collectors/schedstatMetric.go b/collectors/schedstatMetric.go index 8c010ed..d098804 100644 --- a/collectors/schedstatMetric.go +++ b/collectors/schedstatMetric.go @@ -11,7 +11,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const SCHEDSTATFILE = `/proc/schedstat` @@ -96,7 +96,7 @@ func (m *SchedstatCollector) Init(config json.RawMessage) error { return err } -func (m *SchedstatCollector) ParseProcLine(linefields []string, tags map[string]string, output chan lp.CCMetric, now time.Time, tsdelta time.Duration) { +func (m *SchedstatCollector) ParseProcLine(linefields []string, tags map[string]string, output chan lp.CCMessage, now time.Time, tsdelta time.Duration) { running, _ := strconv.ParseInt(linefields[7], 10, 64) waiting, _ := strconv.ParseInt(linefields[8], 10, 64) diff_running := running - m.olddata[linefields[0]]["running"] @@ -109,7 +109,7 @@ func (m *SchedstatCollector) ParseProcLine(linefields []string, tags map[string] m.olddata[linefields[0]]["waiting"] = waiting value := l_running + l_waiting - y, err := lp.New("cpu_load_core", tags, m.meta, map[string]interface{}{"value": value}, now) + y, err := lp.NewMessage("cpu_load_core", tags, m.meta, map[string]interface{}{"value": value}, now) if err == nil { // Send it to output channel output <- y @@ -118,7 +118,7 @@ func (m *SchedstatCollector) ParseProcLine(linefields []string, tags map[string] // Read collects all metrics belonging to the sample collector // and sends them through the output channel to the collector manager -func (m *SchedstatCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *SchedstatCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } diff --git a/collectors/selfMetric.go b/collectors/selfMetric.go index 4fc95c0..6dd99db 100644 --- a/collectors/selfMetric.go +++ b/collectors/selfMetric.go @@ -7,7 +7,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) type SelfCollectorConfig struct { @@ -42,56 +42,56 @@ func (m *SelfCollector) Init(config json.RawMessage) error { return err } -func (m *SelfCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *SelfCollector) Read(interval time.Duration, output chan lp.CCMessage) { timestamp := time.Now() if m.config.MemStats { var memstats runtime.MemStats runtime.ReadMemStats(&memstats) - y, err := lp.New("total_alloc", m.tags, m.meta, map[string]interface{}{"value": memstats.TotalAlloc}, timestamp) + y, err := lp.NewMessage("total_alloc", m.tags, m.meta, map[string]interface{}{"value": memstats.TotalAlloc}, timestamp) if err == nil { y.AddMeta("unit", "Bytes") output <- y } - y, err = lp.New("heap_alloc", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapAlloc}, timestamp) + y, err = lp.NewMessage("heap_alloc", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapAlloc}, timestamp) if err == nil { y.AddMeta("unit", "Bytes") output <- y } - y, err = lp.New("heap_sys", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapSys}, timestamp) + y, err = lp.NewMessage("heap_sys", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapSys}, timestamp) if err == nil { y.AddMeta("unit", "Bytes") output <- y } - y, err = lp.New("heap_idle", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapIdle}, timestamp) + y, err = lp.NewMessage("heap_idle", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapIdle}, timestamp) if err == nil { y.AddMeta("unit", "Bytes") output <- y } - y, err = lp.New("heap_inuse", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapInuse}, timestamp) + y, err = lp.NewMessage("heap_inuse", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapInuse}, timestamp) if err == nil { y.AddMeta("unit", "Bytes") output <- y } - y, err = lp.New("heap_released", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapReleased}, timestamp) + y, err = lp.NewMessage("heap_released", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapReleased}, timestamp) if err == nil { y.AddMeta("unit", "Bytes") output <- y } - y, err = lp.New("heap_objects", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapObjects}, timestamp) + y, err = lp.NewMessage("heap_objects", m.tags, m.meta, map[string]interface{}{"value": memstats.HeapObjects}, timestamp) if err == nil { output <- y } } if m.config.GoRoutines { - y, err := lp.New("num_goroutines", m.tags, m.meta, map[string]interface{}{"value": runtime.NumGoroutine()}, timestamp) + y, err := lp.NewMessage("num_goroutines", m.tags, m.meta, map[string]interface{}{"value": runtime.NumGoroutine()}, timestamp) if err == nil { output <- y } } if m.config.CgoCalls { - y, err := lp.New("num_cgo_calls", m.tags, m.meta, map[string]interface{}{"value": runtime.NumCgoCall()}, timestamp) + y, err := lp.NewMessage("num_cgo_calls", m.tags, m.meta, map[string]interface{}{"value": runtime.NumCgoCall()}, timestamp) if err == nil { output <- y } @@ -102,35 +102,35 @@ func (m *SelfCollector) Read(interval time.Duration, output chan lp.CCMetric) { if err == nil { sec, nsec := rusage.Utime.Unix() t := float64(sec) + (float64(nsec) * 1e-9) - y, err := lp.New("rusage_user_time", m.tags, m.meta, map[string]interface{}{"value": t}, timestamp) + y, err := lp.NewMessage("rusage_user_time", m.tags, m.meta, map[string]interface{}{"value": t}, timestamp) if err == nil { y.AddMeta("unit", "seconds") output <- y } sec, nsec = rusage.Stime.Unix() t = float64(sec) + (float64(nsec) * 1e-9) - y, err = lp.New("rusage_system_time", m.tags, m.meta, map[string]interface{}{"value": t}, timestamp) + y, err = lp.NewMessage("rusage_system_time", m.tags, m.meta, map[string]interface{}{"value": t}, timestamp) if err == nil { y.AddMeta("unit", "seconds") output <- y } - y, err = lp.New("rusage_vol_ctx_switch", m.tags, m.meta, map[string]interface{}{"value": rusage.Nvcsw}, timestamp) + y, err = lp.NewMessage("rusage_vol_ctx_switch", m.tags, m.meta, map[string]interface{}{"value": rusage.Nvcsw}, timestamp) if err == nil { output <- y } - y, err = lp.New("rusage_invol_ctx_switch", m.tags, m.meta, map[string]interface{}{"value": rusage.Nivcsw}, timestamp) + y, err = lp.NewMessage("rusage_invol_ctx_switch", m.tags, m.meta, map[string]interface{}{"value": rusage.Nivcsw}, timestamp) if err == nil { output <- y } - y, err = lp.New("rusage_signals", m.tags, m.meta, map[string]interface{}{"value": rusage.Nsignals}, timestamp) + y, err = lp.NewMessage("rusage_signals", m.tags, m.meta, map[string]interface{}{"value": rusage.Nsignals}, timestamp) if err == nil { output <- y } - y, err = lp.New("rusage_major_pgfaults", m.tags, m.meta, map[string]interface{}{"value": rusage.Majflt}, timestamp) + y, err = lp.NewMessage("rusage_major_pgfaults", m.tags, m.meta, map[string]interface{}{"value": rusage.Majflt}, timestamp) if err == nil { output <- y } - y, err = lp.New("rusage_minor_pgfaults", m.tags, m.meta, map[string]interface{}{"value": rusage.Minflt}, timestamp) + y, err = lp.NewMessage("rusage_minor_pgfaults", m.tags, m.meta, map[string]interface{}{"value": rusage.Minflt}, timestamp) if err == nil { output <- y } diff --git a/collectors/tempMetric.go b/collectors/tempMetric.go index 303be4a..6ee9829 100644 --- a/collectors/tempMetric.go +++ b/collectors/tempMetric.go @@ -10,7 +10,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) // See: https://www.kernel.org/doc/html/latest/hwmon/sysfs-interface.html @@ -171,7 +171,7 @@ func (m *TempCollector) Init(config json.RawMessage) error { return nil } -func (m *TempCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *TempCollector) Read(interval time.Duration, output chan lp.CCMessage) { for _, sensor := range m.sensors { // Read sensor file @@ -190,7 +190,7 @@ func (m *TempCollector) Read(interval time.Duration, output chan lp.CCMetric) { continue } x /= 1000 - y, err := lp.New( + y, err := lp.NewMessage( sensor.metricName, sensor.tags, m.meta, @@ -203,7 +203,7 @@ func (m *TempCollector) Read(interval time.Duration, output chan lp.CCMetric) { // max temperature if m.config.ReportMaxTemp && sensor.maxTemp != 0 { - y, err := lp.New( + y, err := lp.NewMessage( sensor.maxTempName, sensor.tags, m.meta, @@ -217,7 +217,7 @@ func (m *TempCollector) Read(interval time.Duration, output chan lp.CCMetric) { // critical temperature if m.config.ReportCriticalTemp && sensor.critTemp != 0 { - y, err := lp.New( + y, err := lp.NewMessage( sensor.critTempName, sensor.tags, m.meta, diff --git a/collectors/topprocsMetric.go b/collectors/topprocsMetric.go index 08dbae0..edfd755 100644 --- a/collectors/topprocsMetric.go +++ b/collectors/topprocsMetric.go @@ -9,7 +9,7 @@ import ( "strings" "time" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const MAX_NUM_PROCS = 10 @@ -53,7 +53,7 @@ func (m *TopProcsCollector) Init(config json.RawMessage) error { return nil } -func (m *TopProcsCollector) Read(interval time.Duration, output chan lp.CCMetric) { +func (m *TopProcsCollector) Read(interval time.Duration, output chan lp.CCMessage) { if !m.init { return } @@ -68,7 +68,7 @@ func (m *TopProcsCollector) Read(interval time.Duration, output chan lp.CCMetric lines := strings.Split(string(stdout), "\n") for i := 1; i < m.config.Num_procs+1; i++ { name := fmt.Sprintf("topproc%d", i) - y, err := lp.New(name, m.tags, m.meta, map[string]interface{}{"value": string(lines[i])}, time.Now()) + y, err := lp.NewMessage(name, m.tags, m.meta, map[string]interface{}{"value": string(lines[i])}, time.Now()) if err == nil { output <- y } diff --git a/go.mod b/go.mod index f6b7275..cd84859 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,11 @@ module github.com/ClusterCockpit/cc-metric-collector -go 1.21 +go 1.21.1 + +toolchain go1.22.1 require ( + github.com/ClusterCockpit/cc-energy-manager v0.0.0-20240709142550-dd446f7ab900 github.com/ClusterCockpit/cc-units v0.4.0 github.com/ClusterCockpit/go-rocm-smi v0.3.0 github.com/NVIDIA/go-nvml v0.12.0-2 @@ -12,12 +15,12 @@ require ( github.com/influxdata/influxdb-client-go/v2 v2.13.0 github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf github.com/influxdata/line-protocol/v2 v2.2.1 - github.com/nats-io/nats.go v1.33.1 + github.com/nats-io/nats.go v1.36.0 github.com/prometheus/client_golang v1.19.0 github.com/stmcginnis/gofish v0.15.0 github.com/tklauser/go-sysconf v0.3.13 golang.design/x/thread v0.0.0-20210122121316-335e9adffdf1 - golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 + golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 golang.org/x/sys v0.18.0 ) diff --git a/go.sum b/go.sum index 896df0b..3bfc54c 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/ClusterCockpit/cc-energy-manager v0.0.0-20240709142550-dd446f7ab900 h1:6+WNav16uWTEDC09hkZKEHfBhtc91p/ZcjgCtyntuIg= +github.com/ClusterCockpit/cc-energy-manager v0.0.0-20240709142550-dd446f7ab900/go.mod h1:EbYeC5t+Y0kW1Q1pP2n9zMqbeYEJITG8YGvAUihXVn4= github.com/ClusterCockpit/cc-units v0.4.0 h1:zP5DOu99GmErW0tCDf0gcLrlWt42RQ9dpoONEOh4cI0= github.com/ClusterCockpit/cc-units v0.4.0/go.mod h1:3S3PAhAayS3pbgcT4q9Vn9VJw22Op51X0YimtG77zBw= github.com/ClusterCockpit/go-rocm-smi v0.3.0 h1:1qZnSpG7/NyLtc7AjqnUL9Jb8xtqG1nMVgp69rJfaR8= @@ -7,6 +9,7 @@ github.com/NVIDIA/go-nvml v0.12.0-2 h1:Sg239yy7jmopu/cuvYauoMj9fOpcGMngxVxxS1EBX github.com/NVIDIA/go-nvml v0.12.0-2/go.mod h1:7ruy85eOM73muOc/I37euONSwEyFqZsv5ED9AogD4G0= github.com/PaesslerAG/gval v1.2.2 h1:Y7iBzhgE09IGTt5QgGQ2IdaYYYOU134YGHBThD+wm9E= github.com/PaesslerAG/gval v1.2.2/go.mod h1:XRFLwvmkTEdYziLdaCeCa5ImcGVrfQbeNUbVR+C6xac= +github.com/PaesslerAG/jsonpath v0.1.0 h1:gADYeifvlqK3R3i2cR5B4DGgxLXIPb3TRTH1mGi0jPI= github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV0grWtFzq1Y8= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= @@ -18,14 +21,18 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/frankban/quicktest v1.11.0/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= github.com/frankban/quicktest v1.11.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= +github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -35,6 +42,7 @@ github.com/influxdata/influxdb-client-go/v2 v2.13.0/go.mod h1:k+spCbt9hcvqvUiz0s github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf h1:7JTmneyiNEwVBOHSjoMxiWAqB992atOeepeFYegn5RU= github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/influxdata/line-protocol-corpus v0.0.0-20210519164801-ca6fa5da0184/go.mod h1:03nmhxzZ7Xk2pdG+lmMd7mHDfeVOYFyhOgwO61qWU98= +github.com/influxdata/line-protocol-corpus v0.0.0-20210922080147-aa28ccfb8937 h1:MHJNQ+p99hFATQm6ORoLmpUCF7ovjwEFshs/NHzAbig= github.com/influxdata/line-protocol-corpus v0.0.0-20210922080147-aa28ccfb8937/go.mod h1:BKR9c0uHSmRgM/se9JhFHtTT7JTO67X23MtKMHtZcpo= github.com/influxdata/line-protocol/v2 v2.0.0-20210312151457-c52fdecb625a/go.mod h1:6+9Xt5Sq1rWx+glMgxhcg2c0DUaehK+5TDcPZ76GypY= github.com/influxdata/line-protocol/v2 v2.1.0/go.mod h1:QKw43hdUBg3GTk2iC3iyCxksNj7PX9aUSeYOYE/ceHY= @@ -44,11 +52,14 @@ github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPci github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/nats-io/nats.go v1.33.1 h1:8TxLZZ/seeEfR97qV0/Bl939tpDnt2Z2fK3HkPypj70= -github.com/nats-io/nats.go v1.33.1/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= +github.com/nats-io/nats.go v1.36.0 h1:suEUPuWzTSse/XhESwqLxXGuj8vGRuPRoG7MoRN/qyU= +github.com/nats-io/nats.go v1.36.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI= github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= @@ -56,6 +67,7 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oapi-codegen/runtime v1.1.1 h1:EXLHh0DXIJnWhdRPN2w4MXAzFyE4CskzhNLUmtpMYro= github.com/oapi-codegen/runtime v1.1.1/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= @@ -65,6 +77,8 @@ github.com/prometheus/common v0.49.0 h1:ToNTdK4zSnPVJmh698mGFkDor9wBI/iGaJy5dbH1 github.com/prometheus/common v0.49.0/go.mod h1:Kxm+EULxRbUkjGU6WFsQqo3ORzB4tyKvlWFOE9mB2sE= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= @@ -76,6 +90,7 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tklauser/go-sysconf v0.3.13 h1:GBUpcahXSpR2xN01jhkNAbTLRk2Yzgggk8IM08lq3r4= github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0= @@ -85,8 +100,8 @@ golang.design/x/thread v0.0.0-20210122121316-335e9adffdf1 h1:P7S/GeHBAFEZIYp0ePP golang.design/x/thread v0.0.0-20210122121316-335e9adffdf1/go.mod h1:9CWpnTUmlQkfdpdutA1nNf4iE5lAVt3QZOu0Z6hahBE= golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= +golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= +golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sys v0.0.0-20210122093101-04d7465088b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -99,4 +114,5 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/metricAggregator/metricAggregator.go b/internal/metricAggregator/metricAggregator.go index 170b13e..c300df5 100644 --- a/internal/metricAggregator/metricAggregator.go +++ b/internal/metricAggregator/metricAggregator.go @@ -11,7 +11,7 @@ import ( cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" topo "github.com/ClusterCockpit/cc-metric-collector/pkg/ccTopology" "github.com/PaesslerAG/gval" @@ -31,14 +31,14 @@ type metricAggregator struct { functions []*MetricAggregatorIntervalConfig constants map[string]interface{} language gval.Language - output chan lp.CCMetric + output chan lp.CCMessage } type MetricAggregator interface { AddAggregation(name, function, condition string, tags, meta map[string]string) error DeleteAggregation(name string) error - Init(output chan lp.CCMetric) error - Eval(starttime time.Time, endtime time.Time, metrics []lp.CCMetric) + Init(output chan lp.CCMessage) error + Eval(starttime time.Time, endtime time.Time, metrics []lp.CCMessage) } var metricCacheLanguage = gval.NewLanguage( @@ -74,7 +74,7 @@ var evaluables = struct { mapping: make(map[string]gval.Evaluable), } -func (c *metricAggregator) Init(output chan lp.CCMetric) error { +func (c *metricAggregator) Init(output chan lp.CCMessage) error { c.output = output c.functions = make([]*MetricAggregatorIntervalConfig, 0) c.constants = make(map[string]interface{}) @@ -112,7 +112,7 @@ func (c *metricAggregator) Init(output chan lp.CCMetric) error { return nil } -func (c *metricAggregator) Eval(starttime time.Time, endtime time.Time, metrics []lp.CCMetric) { +func (c *metricAggregator) Eval(starttime time.Time, endtime time.Time, metrics []lp.CCMessage) { vars := make(map[string]interface{}) for k, v := range c.constants { vars[k] = v @@ -127,7 +127,7 @@ func (c *metricAggregator) Eval(starttime time.Time, endtime time.Time, metrics var valuesInt32 []int32 var valuesInt64 []int64 var valuesBool []bool - matches := make([]lp.CCMetric, 0) + matches := make([]lp.CCMessage, 0) for _, m := range metrics { vars["metric"] = m //value, err := gval.Evaluate(f.Condition, vars, c.language) @@ -216,7 +216,7 @@ func (c *metricAggregator) Eval(starttime time.Time, endtime time.Time, metrics break } - copy_tags := func(tags map[string]string, metrics []lp.CCMetric) map[string]string { + copy_tags := func(tags map[string]string, metrics []lp.CCMessage) map[string]string { out := make(map[string]string) for key, value := range tags { switch value { @@ -233,7 +233,7 @@ func (c *metricAggregator) Eval(starttime time.Time, endtime time.Time, metrics } return out } - copy_meta := func(meta map[string]string, metrics []lp.CCMetric) map[string]string { + copy_meta := func(meta map[string]string, metrics []lp.CCMessage) map[string]string { out := make(map[string]string) for key, value := range meta { switch value { @@ -253,18 +253,18 @@ func (c *metricAggregator) Eval(starttime time.Time, endtime time.Time, metrics tags := copy_tags(f.Tags, matches) meta := copy_meta(f.Meta, matches) - var m lp.CCMetric + var m lp.CCMessage switch t := value.(type) { case float64: - m, err = lp.New(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) + m, err = lp.NewMessage(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) case float32: - m, err = lp.New(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) + m, err = lp.NewMessage(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) case int: - m, err = lp.New(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) + m, err = lp.NewMessage(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) case int64: - m, err = lp.New(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) + m, err = lp.NewMessage(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) case string: - m, err = lp.New(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) + m, err = lp.NewMessage(f.Name, tags, meta, map[string]interface{}{"value": t}, starttime) default: cclog.ComponentError("MetricCache", "Gval returned invalid type", t, "skipping metric", f.Name) } @@ -389,7 +389,7 @@ func EvalFloat64Condition(condition string, params map[string]float64) (float64, return value, err } -func NewAggregator(output chan lp.CCMetric) (MetricAggregator, error) { +func NewAggregator(output chan lp.CCMessage) (MetricAggregator, error) { a := new(metricAggregator) err := a.Init(output) if err != nil { diff --git a/internal/metricRouter/metricCache.go b/internal/metricRouter/metricCache.go index 81e69a9..b0fcd3d 100644 --- a/internal/metricRouter/metricCache.go +++ b/internal/metricRouter/metricCache.go @@ -7,7 +7,7 @@ import ( cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" agg "github.com/ClusterCockpit/cc-metric-collector/internal/metricAggregator" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" mct "github.com/ClusterCockpit/cc-metric-collector/pkg/multiChanTicker" ) @@ -16,7 +16,7 @@ type metricCachePeriod struct { stopstamp time.Time numMetrics int sizeMetrics int - metrics []lp.CCMetric + metrics []lp.CCMessage } // Metric cache data structure @@ -29,21 +29,21 @@ type metricCache struct { ticker mct.MultiChanTicker tickchan chan time.Time done chan bool - output chan lp.CCMetric + output chan lp.CCMessage aggEngine agg.MetricAggregator } type MetricCache interface { - Init(output chan lp.CCMetric, ticker mct.MultiChanTicker, wg *sync.WaitGroup, numPeriods int) error + Init(output chan lp.CCMessage, ticker mct.MultiChanTicker, wg *sync.WaitGroup, numPeriods int) error Start() - Add(metric lp.CCMetric) - GetPeriod(index int) (time.Time, time.Time, []lp.CCMetric) + Add(metric lp.CCMessage) + GetPeriod(index int) (time.Time, time.Time, []lp.CCMessage) AddAggregation(name, function, condition string, tags, meta map[string]string) error DeleteAggregation(name string) error Close() } -func (c *metricCache) Init(output chan lp.CCMetric, ticker mct.MultiChanTicker, wg *sync.WaitGroup, numPeriods int) error { +func (c *metricCache) Init(output chan lp.CCMessage, ticker mct.MultiChanTicker, wg *sync.WaitGroup, numPeriods int) error { var err error = nil c.done = make(chan bool) c.wg = wg @@ -55,7 +55,7 @@ func (c *metricCache) Init(output chan lp.CCMetric, ticker mct.MultiChanTicker, p := new(metricCachePeriod) p.numMetrics = 0 p.sizeMetrics = 0 - p.metrics = make([]lp.CCMetric, 0) + p.metrics = make([]lp.CCMessage, 0) c.intervals = append(c.intervals, p) } @@ -124,7 +124,7 @@ func (c *metricCache) Start() { // Add a metric to the cache. The interval is defined by the global timer (rotate() in Start()) // The intervals list is used as round-robin buffer and the metric list grows dynamically and // to avoid reallocations -func (c *metricCache) Add(metric lp.CCMetric) { +func (c *metricCache) Add(metric lp.CCMessage) { if c.curPeriod >= 0 && c.curPeriod < c.numPeriods { c.lock.Lock() p := c.intervals[c.curPeriod] @@ -153,10 +153,10 @@ func (c *metricCache) DeleteAggregation(name string) error { // Get all metrics of a interval. The index is the difference to the current interval, so index=0 // is the current one, index=1 the last interval and so on. Returns and empty array if a wrong index // is given (negative index, index larger than configured number of total intervals, ...) -func (c *metricCache) GetPeriod(index int) (time.Time, time.Time, []lp.CCMetric) { +func (c *metricCache) GetPeriod(index int) (time.Time, time.Time, []lp.CCMessage) { var start time.Time = time.Now() var stop time.Time = time.Now() - var metrics []lp.CCMetric + var metrics []lp.CCMessage if index >= 0 && index < c.numPeriods { pindex := c.curPeriod - index if pindex < 0 { @@ -168,10 +168,10 @@ func (c *metricCache) GetPeriod(index int) (time.Time, time.Time, []lp.CCMetric) metrics = c.intervals[pindex].metrics //return c.intervals[pindex].startstamp, c.intervals[pindex].stopstamp, c.intervals[pindex].metrics } else { - metrics = make([]lp.CCMetric, 0) + metrics = make([]lp.CCMessage, 0) } } else { - metrics = make([]lp.CCMetric, 0) + metrics = make([]lp.CCMessage, 0) } return start, stop, metrics } @@ -182,7 +182,7 @@ func (c *metricCache) Close() { c.done <- true } -func NewCache(output chan lp.CCMetric, ticker mct.MultiChanTicker, wg *sync.WaitGroup, numPeriods int) (MetricCache, error) { +func NewCache(output chan lp.CCMessage, ticker mct.MultiChanTicker, wg *sync.WaitGroup, numPeriods int) (MetricCache, error) { c := new(metricCache) err := c.Init(output, ticker, wg, numPeriods) if err != nil { diff --git a/internal/metricRouter/metricRouter.go b/internal/metricRouter/metricRouter.go index 32ac0f3..2ad26d9 100644 --- a/internal/metricRouter/metricRouter.go +++ b/internal/metricRouter/metricRouter.go @@ -10,7 +10,7 @@ import ( cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" agg "github.com/ClusterCockpit/cc-metric-collector/internal/metricAggregator" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" mct "github.com/ClusterCockpit/cc-metric-collector/pkg/multiChanTicker" units "github.com/ClusterCockpit/cc-units" ) @@ -44,10 +44,10 @@ type metricRouterConfig struct { // Metric router data structure type metricRouter struct { hostname string // Hostname used in tags - coll_input chan lp.CCMetric // Input channel from CollectorManager - recv_input chan lp.CCMetric // Input channel from ReceiveManager - cache_input chan lp.CCMetric // Input channel from MetricCache - outputs []chan lp.CCMetric // List of all output channels + coll_input chan lp.CCMessage // Input channel from CollectorManager + recv_input chan lp.CCMessage // Input channel from ReceiveManager + cache_input chan lp.CCMessage // Input channel from MetricCache + outputs []chan lp.CCMessage // List of all output channels done chan bool // channel to finish / stop metric router wg *sync.WaitGroup // wait group for all goroutines in cc-metric-collector timestamp time.Time // timestamp periodically updated by ticker each interval @@ -61,9 +61,9 @@ type metricRouter struct { // MetricRouter access functions type MetricRouter interface { Init(ticker mct.MultiChanTicker, wg *sync.WaitGroup, routerConfigFile string) error - AddCollectorInput(input chan lp.CCMetric) - AddReceiverInput(input chan lp.CCMetric) - AddOutput(output chan lp.CCMetric) + AddCollectorInput(input chan lp.CCMessage) + AddReceiverInput(input chan lp.CCMessage) + AddOutput(output chan lp.CCMessage) Start() Close() } @@ -75,9 +75,9 @@ type MetricRouter interface { // * ticker (from variable ticker) // * configuration (read from config file in variable routerConfigFile) func (r *metricRouter) Init(ticker mct.MultiChanTicker, wg *sync.WaitGroup, routerConfigFile string) error { - r.outputs = make([]chan lp.CCMetric, 0) + r.outputs = make([]chan lp.CCMessage, 0) r.done = make(chan bool) - r.cache_input = make(chan lp.CCMetric) + r.cache_input = make(chan lp.CCMessage) r.wg = wg r.ticker = ticker r.config.MaxForward = ROUTER_MAX_FORWARD @@ -126,7 +126,7 @@ func (r *metricRouter) Init(ticker mct.MultiChanTicker, wg *sync.WaitGroup, rout return nil } -func getParamMap(point lp.CCMetric) map[string]interface{} { +func getParamMap(point lp.CCMessage) map[string]interface{} { params := make(map[string]interface{}) params["metric"] = point params["name"] = point.Name() @@ -144,7 +144,7 @@ func getParamMap(point lp.CCMetric) map[string]interface{} { } // DoAddTags adds a tag when condition is fullfiled -func (r *metricRouter) DoAddTags(point lp.CCMetric) { +func (r *metricRouter) DoAddTags(point lp.CCMessage) { var conditionMatches bool for _, m := range r.config.AddTags { if m.Condition == "*" { @@ -166,7 +166,7 @@ func (r *metricRouter) DoAddTags(point lp.CCMetric) { } // DoDelTags removes a tag when condition is fullfiled -func (r *metricRouter) DoDelTags(point lp.CCMetric) { +func (r *metricRouter) DoDelTags(point lp.CCMessage) { var conditionMatches bool for _, m := range r.config.DelTags { if m.Condition == "*" { @@ -188,7 +188,7 @@ func (r *metricRouter) DoDelTags(point lp.CCMetric) { } // Conditional test whether a metric should be dropped -func (r *metricRouter) dropMetric(point lp.CCMetric) bool { +func (r *metricRouter) dropMetric(point lp.CCMessage) bool { // Simple drop check if conditionMatches, ok := r.config.dropMetrics[point.Name()]; ok { return conditionMatches @@ -210,7 +210,7 @@ func (r *metricRouter) dropMetric(point lp.CCMetric) bool { return false } -func (r *metricRouter) prepareUnit(point lp.CCMetric) bool { +func (r *metricRouter) prepareUnit(point lp.CCMessage) bool { if r.config.NormalizeUnits { if in_unit, ok := point.GetMeta("unit"); ok { u := units.NewUnit(in_unit) @@ -259,7 +259,7 @@ func (r *metricRouter) Start() { // Forward takes a received metric, adds or deletes tags // and forwards it to the output channels - forward := func(point lp.CCMetric) { + forward := func(point lp.CCMessage) { cclog.ComponentDebug("MetricRouter", "FORWARD", point) r.DoAddTags(point) r.DoDelTags(point) @@ -279,7 +279,7 @@ func (r *metricRouter) Start() { } // Foward message received from collector channel - coll_forward := func(p lp.CCMetric) { + coll_forward := func(p lp.CCMessage) { // receive from metric collector p.AddTag(r.config.HostnameTagName, r.hostname) if r.config.IntervalStamp { @@ -296,7 +296,7 @@ func (r *metricRouter) Start() { } // Forward message received from receivers channel - recv_forward := func(p lp.CCMetric) { + recv_forward := func(p lp.CCMessage) { // receive from receive manager if r.config.IntervalStamp { p.SetTime(r.timestamp) @@ -307,7 +307,7 @@ func (r *metricRouter) Start() { } // Forward message received from cache channel - cache_forward := func(p lp.CCMetric) { + cache_forward := func(p lp.CCMessage) { // receive from metric collector if !r.dropMetric(p) { p.AddTag(r.config.HostnameTagName, r.hostname) @@ -358,17 +358,17 @@ func (r *metricRouter) Start() { } // AddCollectorInput adds a channel between metric collector and metric router -func (r *metricRouter) AddCollectorInput(input chan lp.CCMetric) { +func (r *metricRouter) AddCollectorInput(input chan lp.CCMessage) { r.coll_input = input } // AddReceiverInput adds a channel between metric receiver and metric router -func (r *metricRouter) AddReceiverInput(input chan lp.CCMetric) { +func (r *metricRouter) AddReceiverInput(input chan lp.CCMessage) { r.recv_input = input } // AddOutput adds a output channel to the metric router -func (r *metricRouter) AddOutput(output chan lp.CCMetric) { +func (r *metricRouter) AddOutput(output chan lp.CCMessage) { r.outputs = append(r.outputs, output) } diff --git a/receivers/httpReceiver.go b/receivers/httpReceiver.go index f37c629..e8251d7 100644 --- a/receivers/httpReceiver.go +++ b/receivers/httpReceiver.go @@ -11,7 +11,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" influx "github.com/influxdata/line-protocol/v2/lineprotocol" ) @@ -191,7 +191,7 @@ func (r *HttpReceiver) ServerHttp(w http.ResponseWriter, req *http.Request) { return } - y, _ := lp.New( + y, _ := lp.NewMessage( string(measurement), tags, r.meta, diff --git a/receivers/ipmiReceiver.go b/receivers/ipmiReceiver.go index e3d544a..d9598ba 100644 --- a/receivers/ipmiReceiver.go +++ b/receivers/ipmiReceiver.go @@ -14,7 +14,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" "github.com/ClusterCockpit/cc-metric-collector/pkg/hostlist" ) @@ -213,7 +213,7 @@ func (r *IPMIReceiver) doReadMetric() { continue } - y, err := lp.New( + y, err := lp.NewMessage( metric, map[string]string{ "hostname": host, diff --git a/receivers/metricReceiver.go b/receivers/metricReceiver.go index 1edef4e..d7e6592 100644 --- a/receivers/metricReceiver.go +++ b/receivers/metricReceiver.go @@ -1,7 +1,7 @@ package receivers import ( - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) type defaultReceiverConfig struct { @@ -19,14 +19,14 @@ type ReceiverConfig struct { type receiver struct { name string - sink chan lp.CCMetric + sink chan lp.CCMessage } type Receiver interface { Start() Close() // Close / finish metric receiver Name() string // Name of the metric receiver - SetSink(sink chan lp.CCMetric) // Set sink channel + SetSink(sink chan lp.CCMessage) // Set sink channel } // Name returns the name of the metric receiver @@ -35,6 +35,6 @@ func (r *receiver) Name() string { } // SetSink set the sink channel -func (r *receiver) SetSink(sink chan lp.CCMetric) { +func (r *receiver) SetSink(sink chan lp.CCMessage) { r.sink = sink } diff --git a/receivers/natsReceiver.go b/receivers/natsReceiver.go index ea0cc3b..abf7030 100644 --- a/receivers/natsReceiver.go +++ b/receivers/natsReceiver.go @@ -7,7 +7,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" influx "github.com/influxdata/line-protocol/v2/lineprotocol" nats "github.com/nats-io/nats.go" ) @@ -85,7 +85,7 @@ func (r *NatsReceiver) _NatsReceive(m *nats.Msg) { return } - y, _ := lp.New( + y, _ := lp.NewMessage( string(measurement), tags, r.meta, diff --git a/receivers/prometheusReceiver.go b/receivers/prometheusReceiver.go index 7846c1d..3e777a8 100644 --- a/receivers/prometheusReceiver.go +++ b/receivers/prometheusReceiver.go @@ -13,7 +13,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) type PrometheusReceiverConfig struct { @@ -74,7 +74,7 @@ func (r *PrometheusReceiver) Start() { } value, err := strconv.ParseFloat(lineSplit[1], 64) if err == nil { - y, err := lp.New(name, tags, r.meta, map[string]interface{}{"value": value}, t) + y, err := lp.NewMessage(name, tags, r.meta, map[string]interface{}{"value": value}, t) if err == nil { r.sink <- y } diff --git a/receivers/receiveManager.go b/receivers/receiveManager.go index 47325b2..ac3d998 100644 --- a/receivers/receiveManager.go +++ b/receivers/receiveManager.go @@ -7,7 +7,7 @@ import ( "sync" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) var AvailableReceivers = map[string]func(name string, config json.RawMessage) (Receiver, error){ @@ -19,14 +19,14 @@ var AvailableReceivers = map[string]func(name string, config json.RawMessage) (R type receiveManager struct { inputs []Receiver - output chan lp.CCMetric + output chan lp.CCMessage config []json.RawMessage } type ReceiveManager interface { Init(wg *sync.WaitGroup, receiverConfigFile string) error AddInput(name string, rawConfig json.RawMessage) error - AddOutput(output chan lp.CCMetric) + AddOutput(output chan lp.CCMessage) Start() Close() } @@ -93,7 +93,7 @@ func (rm *receiveManager) AddInput(name string, rawConfig json.RawMessage) error return nil } -func (rm *receiveManager) AddOutput(output chan lp.CCMetric) { +func (rm *receiveManager) AddOutput(output chan lp.CCMessage) { rm.output = output for _, r := range rm.inputs { r.SetSink(rm.output) diff --git a/receivers/redfishReceiver.go b/receivers/redfishReceiver.go index 7a712b5..96c873c 100644 --- a/receivers/redfishReceiver.go +++ b/receivers/redfishReceiver.go @@ -14,7 +14,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" "github.com/ClusterCockpit/cc-metric-collector/pkg/hostlist" // See: https://pkg.go.dev/github.com/stmcginnis/gofish @@ -83,7 +83,7 @@ func (r *RedfishReceiver) sendMetric(name string, tags map[string]string, meta m deleteEmptyTags(tags) deleteEmptyTags(meta) - y, err := lp.New(name, tags, meta, setMetricValue(value), timestamp) + y, err := lp.NewMessage(name, tags, meta, setMetricValue(value), timestamp) if err == nil { r.sink <- y } diff --git a/sinks/gangliaCommon.go b/sinks/gangliaCommon.go index 1c846f0..010b94a 100644 --- a/sinks/gangliaCommon.go +++ b/sinks/gangliaCommon.go @@ -4,10 +4,10 @@ import ( "fmt" "strings" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) -func GangliaMetricName(point lp.CCMetric) string { +func GangliaMetricName(point lp.CCMessage) string { name := point.Name() metricType, typeOK := point.GetTag("type") metricTid, tidOk := point.GetTag("type-id") @@ -39,7 +39,7 @@ func GangliaMetricRename(name string) string { return name } -func GangliaSlopeType(point lp.CCMetric) uint { +func GangliaSlopeType(point lp.CCMessage) uint { name := point.Name() if name == "mem_total" || name == "swap_total" { return 0 @@ -151,7 +151,7 @@ type GangliaMetricConfig struct { Name string } -func GetCommonGangliaConfig(point lp.CCMetric) GangliaMetricConfig { +func GetCommonGangliaConfig(point lp.CCMessage) GangliaMetricConfig { mname := GangliaMetricRename(point.Name()) if oldname, ok := point.GetMeta("oldname"); ok { mname = GangliaMetricRename(oldname) @@ -207,7 +207,7 @@ func GetCommonGangliaConfig(point lp.CCMetric) GangliaMetricConfig { } } -func GetGangliaConfig(point lp.CCMetric) GangliaMetricConfig { +func GetGangliaConfig(point lp.CCMessage) GangliaMetricConfig { mname := GangliaMetricRename(point.Name()) if oldname, ok := point.GetMeta("oldname"); ok { mname = GangliaMetricRename(oldname) diff --git a/sinks/gangliaSink.go b/sinks/gangliaSink.go index b510003..a49bc30 100644 --- a/sinks/gangliaSink.go +++ b/sinks/gangliaSink.go @@ -11,7 +11,7 @@ import ( "os/exec" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const GMETRIC_EXEC = `gmetric` @@ -35,7 +35,7 @@ type GangliaSink struct { config GangliaSinkConfig } -func (s *GangliaSink) Write(point lp.CCMetric) error { +func (s *GangliaSink) Write(point lp.CCMessage) error { var err error = nil //var tagsstr []string var argstr []string diff --git a/sinks/httpSink.go b/sinks/httpSink.go index 5bad35a..6a94b8d 100644 --- a/sinks/httpSink.go +++ b/sinks/httpSink.go @@ -10,7 +10,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" influx "github.com/influxdata/line-protocol/v2/lineprotocol" "golang.org/x/exp/slices" ) @@ -75,7 +75,7 @@ type HttpSink struct { } // Write sends metric m as http message -func (s *HttpSink) Write(m lp.CCMetric) error { +func (s *HttpSink) Write(m lp.CCMessage) error { // Lock for encoder usage s.encoderLock.Lock() diff --git a/sinks/influxAsyncSink.go b/sinks/influxAsyncSink.go index b8555c6..9f0892e 100644 --- a/sinks/influxAsyncSink.go +++ b/sinks/influxAsyncSink.go @@ -11,7 +11,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" influxdb2 "github.com/influxdata/influxdb-client-go/v2" influxdb2Api "github.com/influxdata/influxdb-client-go/v2/api" influxdb2ApiHttp "github.com/influxdata/influxdb-client-go/v2/api/http" @@ -112,7 +112,7 @@ func (s *InfluxAsyncSink) connect() error { return nil } -func (s *InfluxAsyncSink) Write(m lp.CCMetric) error { +func (s *InfluxAsyncSink) Write(m lp.CCMessage) error { if s.customFlushInterval != 0 && s.flushTimer == nil { // Run a batched flush for all lines that have arrived in the defined interval s.flushTimer = time.AfterFunc(s.customFlushInterval, func() { diff --git a/sinks/influxSink.go b/sinks/influxSink.go index a9d46a5..6dc8388 100644 --- a/sinks/influxSink.go +++ b/sinks/influxSink.go @@ -11,7 +11,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" influxdb2 "github.com/influxdata/influxdb-client-go/v2" influxdb2Api "github.com/influxdata/influxdb-client-go/v2/api" influx "github.com/influxdata/line-protocol/v2/lineprotocol" @@ -224,7 +224,7 @@ func (s *InfluxSink) connect() error { } // Write sends metric m in influxDB line protocol -func (s *InfluxSink) Write(m lp.CCMetric) error { +func (s *InfluxSink) Write(m lp.CCMessage) error { // Lock for encoder usage s.encoderLock.Lock() diff --git a/sinks/libgangliaSink.go b/sinks/libgangliaSink.go index 145b490..9b87de7 100644 --- a/sinks/libgangliaSink.go +++ b/sinks/libgangliaSink.go @@ -73,7 +73,7 @@ import ( "unsafe" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" "github.com/NVIDIA/go-nvml/pkg/dl" ) @@ -110,7 +110,7 @@ type LibgangliaSink struct { cstrCache map[string]*C.char } -func (s *LibgangliaSink) Write(point lp.CCMetric) error { +func (s *LibgangliaSink) Write(point lp.CCMessage) error { var err error = nil var c_name *C.char var c_value *C.char diff --git a/sinks/metricSink.go b/sinks/metricSink.go index 2fd429c..6e0c1e3 100644 --- a/sinks/metricSink.go +++ b/sinks/metricSink.go @@ -1,7 +1,7 @@ package sinks import ( - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) type defaultSinkConfig struct { @@ -15,7 +15,7 @@ type sink struct { } type Sink interface { - Write(point lp.CCMetric) error // Write metric to the sink + Write(point lp.CCMessage) error // Write metric to the sink Flush() error // Flush buffered metrics Close() // Close / finish metric sink Name() string // Name of the metric sink diff --git a/sinks/natsSink.go b/sinks/natsSink.go index db446ca..8a21510 100644 --- a/sinks/natsSink.go +++ b/sinks/natsSink.go @@ -9,7 +9,7 @@ import ( "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" influx "github.com/influxdata/line-protocol" nats "github.com/nats-io/nats.go" ) @@ -59,7 +59,7 @@ func (s *NatsSink) connect() error { return nil } -func (s *NatsSink) Write(m lp.CCMetric) error { +func (s *NatsSink) Write(m lp.CCMessage) error { s.lock.Lock() _, err := s.encoder.Encode(m.ToPoint(s.meta_as_tags)) s.lock.Unlock() diff --git a/sinks/prometheusSink.go b/sinks/prometheusSink.go index 7d792cd..90e72c1 100644 --- a/sinks/prometheusSink.go +++ b/sinks/prometheusSink.go @@ -11,7 +11,7 @@ import ( "sync" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" "github.com/gorilla/mux" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" @@ -53,7 +53,7 @@ func intToFloat64(input interface{}) (float64, error) { return 0, errors.New("cannot cast value to float64") } -func getLabelValue(metric lp.CCMetric) []string { +func getLabelValue(metric lp.CCMessage) []string { labelValues := []string{} if tid, tidok := metric.GetTag("type-id"); tidok && metric.HasTag("type") { labelValues = append(labelValues, tid) @@ -66,7 +66,7 @@ func getLabelValue(metric lp.CCMetric) []string { return labelValues } -func getLabelNames(metric lp.CCMetric) []string { +func getLabelNames(metric lp.CCMessage) []string { labelNames := []string{} if t, tok := metric.GetTag("type"); tok && metric.HasTag("type-id") { labelNames = append(labelNames, t) @@ -79,7 +79,7 @@ func getLabelNames(metric lp.CCMetric) []string { return labelNames } -func (s *PrometheusSink) newMetric(metric lp.CCMetric) error { +func (s *PrometheusSink) newMetric(metric lp.CCMessage) error { var value float64 = 0 name := metric.Name() opts := prometheus.GaugeOpts{ @@ -117,7 +117,7 @@ func (s *PrometheusSink) newMetric(metric lp.CCMetric) error { return nil } -func (s *PrometheusSink) updateMetric(metric lp.CCMetric) error { +func (s *PrometheusSink) updateMetric(metric lp.CCMessage) error { var value float64 = 0.0 name := metric.Name() labelValues := getLabelValue(metric) @@ -150,7 +150,7 @@ func (s *PrometheusSink) updateMetric(metric lp.CCMetric) error { return nil } -func (s *PrometheusSink) Write(m lp.CCMetric) error { +func (s *PrometheusSink) Write(m lp.CCMessage) error { return s.updateMetric(m) } diff --git a/sinks/sampleSink.go b/sinks/sampleSink.go index fe4719d..da617da 100644 --- a/sinks/sampleSink.go +++ b/sinks/sampleSink.go @@ -7,7 +7,7 @@ import ( "log" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) type SampleSinkConfig struct { @@ -28,7 +28,7 @@ type SampleSink struct { // See: metricSink.go // Code to submit a single CCMetric to the sink -func (s *SampleSink) Write(point lp.CCMetric) error { +func (s *SampleSink) Write(point lp.CCMessage) error { // based on s.meta_as_tags use meta infos as tags log.Print(point) return nil diff --git a/sinks/sinkManager.go b/sinks/sinkManager.go index cd2680f..b139243 100644 --- a/sinks/sinkManager.go +++ b/sinks/sinkManager.go @@ -7,7 +7,7 @@ import ( "sync" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) const SINK_MAX_FORWARD = 50 @@ -25,7 +25,7 @@ var AvailableSinks = map[string]func(name string, config json.RawMessage) (Sink, // Metric collector manager data structure type sinkManager struct { - input chan lp.CCMetric // input channel + input chan lp.CCMessage // input channel done chan bool // channel to finish / stop metric sink manager wg *sync.WaitGroup // wait group for all goroutines in cc-metric-collector sinks map[string]Sink // Mapping sink name to sink @@ -35,7 +35,7 @@ type sinkManager struct { // Sink manager access functions type SinkManager interface { Init(wg *sync.WaitGroup, sinkConfigFile string) error - AddInput(input chan lp.CCMetric) + AddInput(input chan lp.CCMessage) AddOutput(name string, config json.RawMessage) error Start() Close() @@ -107,7 +107,7 @@ func (sm *sinkManager) Start() { cclog.ComponentDebug("SinkManager", "DONE") } - toTheSinks := func(p lp.CCMetric) { + toTheSinks := func(p lp.CCMessage) { // Send received metric to all outputs cclog.ComponentDebug("SinkManager", "WRITE", p) for _, s := range sm.sinks { @@ -138,7 +138,7 @@ func (sm *sinkManager) Start() { } // AddInput adds the input channel to the sink manager -func (sm *sinkManager) AddInput(input chan lp.CCMetric) { +func (sm *sinkManager) AddInput(input chan lp.CCMessage) { sm.input = input } diff --git a/sinks/stdoutSink.go b/sinks/stdoutSink.go index c235a9b..c9cda7e 100644 --- a/sinks/stdoutSink.go +++ b/sinks/stdoutSink.go @@ -9,7 +9,7 @@ import ( // "time" cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger" - lp "github.com/ClusterCockpit/cc-metric-collector/pkg/ccMetric" + lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message" ) type StdoutSink struct { @@ -21,7 +21,7 @@ type StdoutSink struct { } } -func (s *StdoutSink) Write(m lp.CCMetric) error { +func (s *StdoutSink) Write(m lp.CCMessage) error { fmt.Fprint( s.output, m.ToLineProtocol(s.meta_as_tags),