Use pointer to metrics instead of forwarding full metric

This commit is contained in:
Thomas Roehl
2022-01-31 14:16:50 +01:00
parent 3e329c3324
commit 7f4de77de1
34 changed files with 199 additions and 180 deletions

View File

@@ -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":

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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

View File

@@ -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

View File

@@ -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
}

View File

@@ -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))
}