mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-06-26 12:29:30 +00:00
feat: include metric type and help
This commit is contained in:
parent
94e0abd579
commit
ebd8a42755
@ -1,11 +1,28 @@
|
||||
import std/[json, locks, times, sets]
|
||||
import std/[json, locks, strutils, times, sets]
|
||||
|
||||
import pkg/metrics
|
||||
|
||||
proc jsonHelp(collector: Collector): string =
|
||||
let prefix = "# HELP " & collector.name & " "
|
||||
if collector.help.startsWith(prefix):
|
||||
return collector.help[prefix.len .. ^1].strip(leading = false, trailing = true)
|
||||
|
||||
return ""
|
||||
|
||||
proc jsonType(collector: Collector): string =
|
||||
let parts = collector.typ.splitWhitespace()
|
||||
if parts.len == 4 and parts[0] == "#" and parts[1] == "TYPE" and
|
||||
parts[2] == collector.name:
|
||||
return parts[3]
|
||||
|
||||
return "unknown"
|
||||
|
||||
proc toJson(collector: Collector, metrics: var seq[JsonNode]) =
|
||||
# We know the closure won't outlive `metrics` so this is
|
||||
# an acceptable hack.
|
||||
let metricsPtr = addr metrics
|
||||
let help = collector.jsonHelp()
|
||||
let typ = collector.jsonType()
|
||||
|
||||
proc serializeMetric(
|
||||
name: string,
|
||||
@ -22,7 +39,9 @@ proc toJson(collector: Collector, metrics: var seq[JsonNode]) =
|
||||
for i in 0 ..< min(labelValues.len, labels.len):
|
||||
labelMap[labels[i]] = %labelValues[i]
|
||||
|
||||
metricsPtr[].add(%*{"name": name, "value": value, "labels": labelMap})
|
||||
metricsPtr[].add(
|
||||
%*{"name": name, "type": typ, "help": help, "value": value, "labels": labelMap}
|
||||
)
|
||||
|
||||
collector.collect(serializeMetric)
|
||||
|
||||
|
||||
@ -56,15 +56,69 @@ suite "Metrics":
|
||||
check filteredMetrics ==
|
||||
%*{
|
||||
"metrics": [
|
||||
{"name": "myCounter_total", "value": 1.0, "labels": {"part_type": "screws"}},
|
||||
{"name": "myCounter_total", "value": 1.0, "labels": {"part_type": "washers"}},
|
||||
{"name": "myGauge", "value": 42.0, "labels": {}},
|
||||
{"name": "myHistogram_sum", "value": 15.0, "labels": {}},
|
||||
{"name": "myHistogram_count", "value": 5.0, "labels": {}},
|
||||
{"name": "myHistogram_bucket", "value": 0.0, "labels": {"le": "0.0"}},
|
||||
{"name": "myHistogram_bucket", "value": 1.0, "labels": {"le": "1.0"}},
|
||||
{"name": "myHistogram_bucket", "value": 2.0, "labels": {"le": "2.0"}},
|
||||
{"name": "myHistogram_bucket", "value": 5.0, "labels": {"le": "+Inf"}},
|
||||
{
|
||||
"name": "myCounter_total",
|
||||
"type": "counter",
|
||||
"help": "Parts Counter",
|
||||
"value": 1.0,
|
||||
"labels": {"part_type": "screws"},
|
||||
},
|
||||
{
|
||||
"name": "myCounter_total",
|
||||
"type": "counter",
|
||||
"help": "Parts Counter",
|
||||
"value": 1.0,
|
||||
"labels": {"part_type": "washers"},
|
||||
},
|
||||
{
|
||||
"name": "myGauge",
|
||||
"type": "gauge",
|
||||
"help": "My gauge",
|
||||
"value": 42.0,
|
||||
"labels": {},
|
||||
},
|
||||
{
|
||||
"name": "myHistogram_sum",
|
||||
"type": "histogram",
|
||||
"help": "My histogram",
|
||||
"value": 15.0,
|
||||
"labels": {},
|
||||
},
|
||||
{
|
||||
"name": "myHistogram_count",
|
||||
"type": "histogram",
|
||||
"help": "My histogram",
|
||||
"value": 5.0,
|
||||
"labels": {},
|
||||
},
|
||||
{
|
||||
"name": "myHistogram_bucket",
|
||||
"type": "histogram",
|
||||
"help": "My histogram",
|
||||
"value": 0.0,
|
||||
"labels": {"le": "0.0"},
|
||||
},
|
||||
{
|
||||
"name": "myHistogram_bucket",
|
||||
"type": "histogram",
|
||||
"help": "My histogram",
|
||||
"value": 1.0,
|
||||
"labels": {"le": "1.0"},
|
||||
},
|
||||
{
|
||||
"name": "myHistogram_bucket",
|
||||
"type": "histogram",
|
||||
"help": "My histogram",
|
||||
"value": 2.0,
|
||||
"labels": {"le": "2.0"},
|
||||
},
|
||||
{
|
||||
"name": "myHistogram_bucket",
|
||||
"type": "histogram",
|
||||
"help": "My histogram",
|
||||
"value": 5.0,
|
||||
"labels": {"le": "+Inf"},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
@ -76,9 +130,17 @@ suite "Metrics":
|
||||
check metrics ==
|
||||
%*{
|
||||
"metrics": [
|
||||
{"name": "bad_metric", "value": 1.0, "labels": {"label1": "value1"}},
|
||||
{
|
||||
"name": "bad_metric",
|
||||
"type": "gauge",
|
||||
"help": "Badly behaved collector",
|
||||
"value": 1.0,
|
||||
"labels": {"label1": "value1"},
|
||||
},
|
||||
{
|
||||
"name": "bad_metric",
|
||||
"type": "gauge",
|
||||
"help": "Badly behaved collector",
|
||||
"value": 1.0,
|
||||
"labels": {"label1": "value1", "label2": "value2"},
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user