support subtypes in line protocol

This commit is contained in:
Lou Knauer 2022-01-07 08:49:13 +01:00
parent 50731e43a8
commit 4509a4a355
2 changed files with 15 additions and 7 deletions

View File

@ -2,6 +2,8 @@
[![Build & Test](https://github.com/ClusterCockpit/cc-metric-store/actions/workflows/test.yml/badge.svg)](https://github.com/ClusterCockpit/cc-metric-store/actions/workflows/test.yml) [![Build & Test](https://github.com/ClusterCockpit/cc-metric-store/actions/workflows/test.yml/badge.svg)](https://github.com/ClusterCockpit/cc-metric-store/actions/workflows/test.yml)
The cc-metric-store provides a simple in-memory time series database for storing metrics of cluster nodes at preconfigured intervals. It is meant to be used as part of the [ClusterCockpit suite](https://github.com/ClusterCockpit). As all data is kept in-memory (but written to disk as compressed JSON for long term storage), accessing it is very fast. It also provides aggregations over time *and* nodes/sockets/cpus.
Go look at the `TODO.md` file and the [GitHub Issues](https://github.com/ClusterCockpit/cc-metric-store/issues) for a progress overview. Things work, but are not properly tested. Go look at the `TODO.md` file and the [GitHub Issues](https://github.com/ClusterCockpit/cc-metric-store/issues) for a progress overview. Things work, but are not properly tested.
The [NATS.io](https://nats.io/) based writing endpoint consumes messages in [this format of the InfluxDB line protocol](https://github.com/ClusterCockpit/cc-specifications/blob/master/metrics/lineprotocol_alternative.md). The [NATS.io](https://nats.io/) based writing endpoint consumes messages in [this format of the InfluxDB line protocol](https://github.com/ClusterCockpit/cc-specifications/blob/master/metrics/lineprotocol_alternative.md).

View File

@ -62,7 +62,7 @@ func handleLine(dec *lineprotocol.Decoder) error {
return err return err
} }
var cluster, host, typeName, typeId string var cluster, host, typeName, typeId, subType, subTypeId string
for { for {
key, val, err := dec.NextTag() key, val, err := dec.NextTag()
if err != nil { if err != nil {
@ -81,18 +81,24 @@ func handleLine(dec *lineprotocol.Decoder) error {
typeName = string(val) typeName = string(val)
case "type-id": case "type-id":
typeId = string(val) typeId = string(val)
case "unit", "group": case "subtype":
// Ignore... (Important only for ganglia) subType = string(val)
case "stype-id":
subTypeId = string(val)
default: default:
return fmt.Errorf("unkown tag: '%s' (value: '%s')", string(key), string(val)) // Ignore unkown tags (cc-metric-collector might send us a unit for example that we do not need)
// return fmt.Errorf("unkown tag: '%s' (value: '%s')", string(key), string(val))
} }
} }
selector := make([]string, 0, 3) selector := make([]string, 2, 4)
selector = append(selector, cluster) selector[0] = cluster
selector = append(selector, host) selector[1] = host
if len(typeId) > 0 { if len(typeId) > 0 {
selector = append(selector, typeName+typeId) selector = append(selector, typeName+typeId)
if len(subTypeId) > 0 {
selector = append(selector, subType+subTypeId)
}
} }
var value Float var value Float