1
0
Fork 0
telegraf/plugins/aggregators/starlark/testdata/min_max.star
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

53 lines
No EOL
1.5 KiB
Text

# Example of a min_max aggregator implemented with a starlark script.
supported_types = (["int", "float"])
state = {}
def add(metric):
gId = groupID(metric)
aggregate = state.get(gId)
if aggregate == None:
aggregate = {
"name": metric.name,
"tags": metric.tags,
"fields": {}
}
for k, v in metric.fields.items():
if type(v) in supported_types:
aggregate["fields"][k] = {
"min": v,
"max": v,
}
state[gId] = aggregate
else:
for k, v in metric.fields.items():
if type(v) in supported_types:
min_max = aggregate["fields"].get(k)
if min_max == None:
aggregate["fields"][k] = {
"min": v,
"max": v,
}
elif v < min_max["min"]:
aggregate["fields"][k]["min"] = v
elif v > min_max["max"]:
aggregate["fields"][k]["max"] = v
def push():
metrics = []
for a in state:
fields = {}
for k in state[a]["fields"]:
fields[k + "_min"] = state[a]["fields"][k]["min"]
fields[k + "_max"] = state[a]["fields"][k]["max"]
m = Metric(state[a]["name"], state[a]["tags"], fields)
metrics.append(m)
return metrics
def reset():
state.clear()
def groupID(metric):
key = metric.name + "-"
for k, v in metric.tags.items():
key = key + k + "-" + v
return hash(key)