mirror of
https://github.com/ClusterCockpit/cc-metric-collector.git
synced 2025-08-15 15:13:00 +02:00
Use pointer to metrics instead of forwarding full metric
This commit is contained in:
@@ -26,10 +26,11 @@ func (s *GangliaSink) Init(config sinkConfig) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *GangliaSink) Write(point lp.CCMetric) error {
|
||||
func (s *GangliaSink) Write(pptr *lp.CCMetric) error {
|
||||
var err error = nil
|
||||
var tagsstr []string
|
||||
var argstr []string
|
||||
point := *pptr
|
||||
for _, t := range point.TagList() {
|
||||
switch t.Key {
|
||||
case "cluster":
|
||||
|
@@ -36,8 +36,8 @@ func (s *HttpSink) Init(config sinkConfig) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *HttpSink) Write(point lp.CCMetric) error {
|
||||
_, err := s.encoder.Encode(point)
|
||||
func (s *HttpSink) Write(point *lp.CCMetric) error {
|
||||
_, err := s.encoder.Encode(*point)
|
||||
return err
|
||||
}
|
||||
|
||||
|
@@ -5,10 +5,11 @@ import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
lp "github.com/ClusterCockpit/cc-metric-collector/internal/ccMetric"
|
||||
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
|
||||
influxdb2Api "github.com/influxdata/influxdb-client-go/v2/api"
|
||||
"log"
|
||||
)
|
||||
|
||||
type InfluxSink struct {
|
||||
@@ -58,22 +59,23 @@ func (s *InfluxSink) Init(config sinkConfig) error {
|
||||
return s.connect()
|
||||
}
|
||||
|
||||
func (s *InfluxSink) Write(point lp.CCMetric) error {
|
||||
func (s *InfluxSink) Write(point *lp.CCMetric) error {
|
||||
tags := map[string]string{}
|
||||
fields := map[string]interface{}{}
|
||||
for _, t := range point.TagList() {
|
||||
p := *point
|
||||
for _, t := range p.TagList() {
|
||||
tags[t.Key] = t.Value
|
||||
}
|
||||
if s.meta_as_tags {
|
||||
for _, m := range point.MetaList() {
|
||||
for _, m := range p.MetaList() {
|
||||
tags[m.Key] = m.Value
|
||||
}
|
||||
}
|
||||
for _, f := range point.FieldList() {
|
||||
for _, f := range p.FieldList() {
|
||||
fields[f.Key] = f.Value
|
||||
}
|
||||
p := influxdb2.NewPoint(point.Name(), tags, fields, point.Time())
|
||||
err := s.writeApi.WritePoint(context.Background(), p)
|
||||
x := influxdb2.NewPoint(p.Name(), tags, fields, p.Time())
|
||||
err := s.writeApi.WritePoint(context.Background(), x)
|
||||
return err
|
||||
}
|
||||
|
||||
|
@@ -31,7 +31,7 @@ type sink struct {
|
||||
|
||||
type Sink interface {
|
||||
Init(config sinkConfig) error
|
||||
Write(point lp.CCMetric) error
|
||||
Write(point *lp.CCMetric) error
|
||||
Flush() error
|
||||
Close()
|
||||
Name() string
|
||||
|
@@ -4,11 +4,12 @@ import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
lp "github.com/ClusterCockpit/cc-metric-collector/internal/ccMetric"
|
||||
influx "github.com/influxdata/line-protocol"
|
||||
nats "github.com/nats-io/nats.go"
|
||||
"log"
|
||||
"time"
|
||||
)
|
||||
|
||||
type NatsSink struct {
|
||||
@@ -55,9 +56,9 @@ func (s *NatsSink) Init(config sinkConfig) error {
|
||||
return s.connect()
|
||||
}
|
||||
|
||||
func (s *NatsSink) Write(point lp.CCMetric) error {
|
||||
func (s *NatsSink) Write(point *lp.CCMetric) error {
|
||||
if s.client != nil {
|
||||
_, err := s.encoder.Encode(point)
|
||||
_, err := s.encoder.Encode(*point)
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return err
|
||||
|
@@ -20,17 +20,17 @@ var AvailableSinks = map[string]Sink{
|
||||
|
||||
// Metric collector manager data structure
|
||||
type sinkManager struct {
|
||||
input chan lp.CCMetric // input channel
|
||||
outputs []Sink // List of sinks to use
|
||||
done chan bool // channel to finish / stop metric sink manager
|
||||
wg *sync.WaitGroup // wait group for all goroutines in cc-metric-collector
|
||||
config []sinkConfig // json encoded config for sink manager
|
||||
input chan *lp.CCMetric // input channel
|
||||
outputs []Sink // List of sinks to use
|
||||
done chan bool // channel to finish / stop metric sink manager
|
||||
wg *sync.WaitGroup // wait group for all goroutines in cc-metric-collector
|
||||
config []sinkConfig // json encoded config for sink manager
|
||||
}
|
||||
|
||||
// Sink manager access functions
|
||||
type SinkManager interface {
|
||||
Init(wg *sync.WaitGroup, sinkConfigFile string) error
|
||||
AddInput(input chan lp.CCMetric)
|
||||
AddInput(input chan *lp.CCMetric)
|
||||
AddOutput(config json.RawMessage) error
|
||||
Start()
|
||||
Close()
|
||||
@@ -94,7 +94,7 @@ func (sm *sinkManager) Start() {
|
||||
|
||||
case p := <-sm.input:
|
||||
// Send received metric to all outputs
|
||||
cclog.ComponentDebug("SinkManager", "WRITE", p)
|
||||
cclog.ComponentDebug("SinkManager", "WRITE", *p)
|
||||
for _, s := range sm.outputs {
|
||||
s.Write(p)
|
||||
}
|
||||
@@ -117,7 +117,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.CCMetric) {
|
||||
sm.input = input
|
||||
}
|
||||
|
||||
|
@@ -19,9 +19,10 @@ func (s *StdoutSink) Init(config sinkConfig) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *StdoutSink) Write(point lp.CCMetric) error {
|
||||
func (s *StdoutSink) Write(pptr *lp.CCMetric) error {
|
||||
var tagsstr []string
|
||||
var fieldstr []string
|
||||
point := *pptr
|
||||
for _, t := range point.TagList() {
|
||||
tagsstr = append(tagsstr, fmt.Sprintf("%s=%s", t.Key, t.Value))
|
||||
}
|
||||
|
Reference in New Issue
Block a user