mirror of
https://github.com/ClusterCockpit/cc-metric-collector.git
synced 2025-01-15 08:39:06 +01:00
Use CCMessage FromBytes instead of Influx's decoder
This commit is contained in:
parent
7d3180b526
commit
7b343d0bab
@ -13,7 +13,6 @@ import (
|
|||||||
lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message"
|
lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message"
|
||||||
cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger"
|
cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger"
|
||||||
mp "github.com/ClusterCockpit/cc-metric-collector/pkg/messageProcessor"
|
mp "github.com/ClusterCockpit/cc-metric-collector/pkg/messageProcessor"
|
||||||
influx "github.com/influxdata/line-protocol/v2/lineprotocol"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const HTTP_RECEIVER_PORT = "8080"
|
const HTTP_RECEIVER_PORT = "8080"
|
||||||
@ -151,80 +150,22 @@ func (r *HttpReceiver) ServerHttp(w http.ResponseWriter, req *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if r.sink != nil {
|
if r.sink != nil {
|
||||||
d := influx.NewDecoder(req.Body)
|
buf := make([]byte, 0, req.ContentLength)
|
||||||
for d.Next() {
|
len, err := req.Body.Read(buf)
|
||||||
|
if err == nil && len > 0 {
|
||||||
// Decode measurement name
|
messages, err := lp.FromBytes(buf)
|
||||||
measurement, err := d.Measurement()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
msg := "ServerHttp: Failed to decode measurement: " + err.Error()
|
msg := "ServerHttp: Failed to decode messages: " + err.Error()
|
||||||
cclog.ComponentError(r.name, msg)
|
cclog.ComponentError(r.name, msg)
|
||||||
http.Error(w, msg, http.StatusInternalServerError)
|
http.Error(w, msg, http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
for _, y := range messages {
|
||||||
// Decode tags
|
m, err := r.mp.ProcessMessage(y)
|
||||||
tags := make(map[string]string)
|
if err == nil && m != nil {
|
||||||
for {
|
r.sink <- m
|
||||||
key, value, err := d.NextTag()
|
|
||||||
if err != nil {
|
|
||||||
msg := "ServerHttp: Failed to decode tag: " + err.Error()
|
|
||||||
cclog.ComponentError(r.name, msg)
|
|
||||||
http.Error(w, msg, http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
if key == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
tags[string(key)] = string(value)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode fields
|
|
||||||
fields := make(map[string]interface{})
|
|
||||||
for {
|
|
||||||
key, value, err := d.NextField()
|
|
||||||
if err != nil {
|
|
||||||
msg := "ServerHttp: Failed to decode field: " + err.Error()
|
|
||||||
cclog.ComponentError(r.name, msg)
|
|
||||||
http.Error(w, msg, http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if key == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
fields[string(key)] = value.Interface()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode time stamp
|
|
||||||
t, err := d.Time(influx.Nanosecond, time.Time{})
|
|
||||||
if err != nil {
|
|
||||||
msg := "ServerHttp: Failed to decode time stamp: " + err.Error()
|
|
||||||
cclog.ComponentError(r.name, msg)
|
|
||||||
http.Error(w, msg, http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
y, _ := lp.NewMessage(
|
|
||||||
string(measurement),
|
|
||||||
tags,
|
|
||||||
nil,
|
|
||||||
fields,
|
|
||||||
t,
|
|
||||||
)
|
|
||||||
|
|
||||||
m, err := r.mp.ProcessMessage(y)
|
|
||||||
if err == nil && m != nil {
|
|
||||||
r.sink <- m
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Check for IO errors
|
|
||||||
err := d.Err()
|
|
||||||
if err != nil {
|
|
||||||
msg := "ServerHttp: Failed to decode: " + err.Error()
|
|
||||||
cclog.ComponentError(r.name, msg)
|
|
||||||
http.Error(w, msg, http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,20 +5,18 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
|
||||||
|
|
||||||
lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message"
|
lp "github.com/ClusterCockpit/cc-energy-manager/pkg/cc-message"
|
||||||
cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger"
|
cclog "github.com/ClusterCockpit/cc-metric-collector/pkg/ccLogger"
|
||||||
mp "github.com/ClusterCockpit/cc-metric-collector/pkg/messageProcessor"
|
mp "github.com/ClusterCockpit/cc-metric-collector/pkg/messageProcessor"
|
||||||
influx "github.com/influxdata/line-protocol/v2/lineprotocol"
|
|
||||||
nats "github.com/nats-io/nats.go"
|
nats "github.com/nats-io/nats.go"
|
||||||
)
|
)
|
||||||
|
|
||||||
type NatsReceiverConfig struct {
|
type NatsReceiverConfig struct {
|
||||||
defaultReceiverConfig
|
defaultReceiverConfig
|
||||||
Addr string `json:"address"`
|
Addr string `json:"address"`
|
||||||
Port string `json:"port"`
|
Port string `json:"port"`
|
||||||
Subject string `json:"subject"`
|
Subject string `json:"subject"`
|
||||||
User string `json:"user,omitempty"`
|
User string `json:"user,omitempty"`
|
||||||
Password string `json:"password,omitempty"`
|
Password string `json:"password,omitempty"`
|
||||||
NkeyFile string `json:"nkey_file,omitempty"`
|
NkeyFile string `json:"nkey_file,omitempty"`
|
||||||
@ -42,67 +40,15 @@ func (r *NatsReceiver) Start() {
|
|||||||
func (r *NatsReceiver) _NatsReceive(m *nats.Msg) {
|
func (r *NatsReceiver) _NatsReceive(m *nats.Msg) {
|
||||||
|
|
||||||
if r.sink != nil {
|
if r.sink != nil {
|
||||||
d := influx.NewDecoderWithBytes(m.Data)
|
messages, err := lp.FromBytes(m.Data)
|
||||||
for d.Next() {
|
if err != nil {
|
||||||
|
msg := "_NatsReceive: Failed to decode messages: " + err.Error()
|
||||||
// Decode measurement name
|
cclog.ComponentError(r.name, msg)
|
||||||
measurement, err := d.Measurement()
|
}
|
||||||
if err != nil {
|
for _, y := range messages {
|
||||||
msg := "_NatsReceive: Failed to decode measurement: " + err.Error()
|
m, err := r.mp.ProcessMessage(y)
|
||||||
cclog.ComponentError(r.name, msg)
|
if err == nil && m != nil && r.sink != nil {
|
||||||
return
|
r.sink <- m
|
||||||
}
|
|
||||||
|
|
||||||
// Decode tags
|
|
||||||
tags := make(map[string]string)
|
|
||||||
for {
|
|
||||||
key, value, err := d.NextTag()
|
|
||||||
if err != nil {
|
|
||||||
msg := "_NatsReceive: Failed to decode tag: " + err.Error()
|
|
||||||
cclog.ComponentError(r.name, msg)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if key == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
tags[string(key)] = string(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode fields
|
|
||||||
fields := make(map[string]interface{})
|
|
||||||
for {
|
|
||||||
key, value, err := d.NextField()
|
|
||||||
if err != nil {
|
|
||||||
msg := "_NatsReceive: Failed to decode field: " + err.Error()
|
|
||||||
cclog.ComponentError(r.name, msg)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if key == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
fields[string(key)] = value.Interface()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode time stamp
|
|
||||||
t, err := d.Time(influx.Nanosecond, time.Time{})
|
|
||||||
if err != nil {
|
|
||||||
msg := "_NatsReceive: Failed to decode time: " + err.Error()
|
|
||||||
cclog.ComponentError(r.name, msg)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
y, err := lp.NewMessage(
|
|
||||||
string(measurement),
|
|
||||||
tags,
|
|
||||||
nil,
|
|
||||||
fields,
|
|
||||||
t,
|
|
||||||
)
|
|
||||||
if err == nil {
|
|
||||||
m, err := r.mp.ProcessMessage(y)
|
|
||||||
if err == nil && m != nil && r.sink != nil {
|
|
||||||
r.sink <- m
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user