Port NATS api to ccMessages

This commit is contained in:
2025-12-23 07:56:13 +01:00
parent 1cd4a57bd3
commit c1135531ba
5 changed files with 134 additions and 31 deletions

59
pkg/nats/influxDecoder.go Normal file
View File

@@ -0,0 +1,59 @@
// Copyright (C) NHR@FAU, University Erlangen-Nuremberg.
// All rights reserved. This file is part of cc-backend.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package nats
import (
"time"
lp "github.com/ClusterCockpit/cc-lib/ccMessage"
influx "github.com/influxdata/line-protocol/v2/lineprotocol"
)
// DecodeInfluxMessage decodes a single InfluxDB line protocol message from the decoder
// Returns the decoded CCMessage or an error if decoding fails
func DecodeInfluxMessage(d *influx.Decoder) (lp.CCMessage, error) {
measurement, err := d.Measurement()
if err != nil {
return nil, err
}
tags := make(map[string]string)
for {
key, value, err := d.NextTag()
if err != nil {
return nil, err
}
if key == nil {
break
}
tags[string(key)] = string(value)
}
fields := make(map[string]interface{})
for {
key, value, err := d.NextField()
if err != nil {
return nil, err
}
if key == nil {
break
}
fields[string(key)] = value.Interface()
}
t, err := d.Time(influx.Nanosecond, time.Time{})
if err != nil {
return nil, err
}
return lp.NewMessage(
string(measurement),
tags,
nil,
fields,
t,
)
}