Fix _exposition.py to stop stripping samples
Our hacked-up `_exposition.py` was stripping out some samples it shouldn't have been. Put them back in, to more closely match the upstream `exposition.py`.
This commit is contained in:
parent
ceafb5a1c6
commit
1c8ca2c543
|
@ -26,6 +26,7 @@ import math
|
||||||
import threading
|
import threading
|
||||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||||
from socketserver import ThreadingMixIn
|
from socketserver import ThreadingMixIn
|
||||||
|
from typing import Dict, List
|
||||||
from urllib.parse import parse_qs, urlparse
|
from urllib.parse import parse_qs, urlparse
|
||||||
|
|
||||||
from prometheus_client import REGISTRY
|
from prometheus_client import REGISTRY
|
||||||
|
@ -124,16 +125,33 @@ def generate_latest(registry, emit_help=False):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
output.append("# TYPE {0} {1}\n".format(mname, mtype))
|
output.append("# TYPE {0} {1}\n".format(mname, mtype))
|
||||||
for sample in metric.samples:
|
|
||||||
# Get rid of the OpenMetrics specific samples
|
om_samples = {} # type: Dict[str, List[str]]
|
||||||
|
for s in metric.samples:
|
||||||
for suffix in ["_created", "_gsum", "_gcount"]:
|
for suffix in ["_created", "_gsum", "_gcount"]:
|
||||||
if sample.name.endswith(suffix):
|
if s.name == metric.name + suffix:
|
||||||
|
# OpenMetrics specific sample, put in a gauge at the end.
|
||||||
|
# (these come from gaugehistograms which don't get renamed,
|
||||||
|
# so no need to faff with mnewname)
|
||||||
|
om_samples.setdefault(suffix, []).append(sample_line(s, s.name))
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
newname = sample.name.replace(mnewname, mname)
|
newname = s.name.replace(mnewname, mname)
|
||||||
if ":" in newname and newname.endswith("_total"):
|
if ":" in newname and newname.endswith("_total"):
|
||||||
newname = newname[: -len("_total")]
|
newname = newname[: -len("_total")]
|
||||||
output.append(sample_line(sample, newname))
|
output.append(sample_line(s, newname))
|
||||||
|
|
||||||
|
for suffix, lines in sorted(om_samples.items()):
|
||||||
|
if emit_help:
|
||||||
|
output.append(
|
||||||
|
"# HELP {0}{1} {2}\n".format(
|
||||||
|
metric.name,
|
||||||
|
suffix,
|
||||||
|
metric.documentation.replace("\\", r"\\").replace("\n", r"\n"),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
output.append("# TYPE {0}{1} gauge\n".format(metric.name, suffix))
|
||||||
|
output.extend(lines)
|
||||||
|
|
||||||
# Get rid of the weird colon things while we're at it
|
# Get rid of the weird colon things while we're at it
|
||||||
if mtype == "counter":
|
if mtype == "counter":
|
||||||
|
@ -152,16 +170,16 @@ def generate_latest(registry, emit_help=False):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
output.append("# TYPE {0} {1}\n".format(mnewname, mtype))
|
output.append("# TYPE {0} {1}\n".format(mnewname, mtype))
|
||||||
for sample in metric.samples:
|
|
||||||
# Get rid of the OpenMetrics specific samples
|
for s in metric.samples:
|
||||||
|
# Get rid of the OpenMetrics specific samples (we should already have
|
||||||
|
# dealt with them above anyway.)
|
||||||
for suffix in ["_created", "_gsum", "_gcount"]:
|
for suffix in ["_created", "_gsum", "_gcount"]:
|
||||||
if sample.name.endswith(suffix):
|
if s.name == metric.name + suffix:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
output.append(
|
output.append(
|
||||||
sample_line(
|
sample_line(s, s.name.replace(":total", "").replace(":", "_"))
|
||||||
sample, sample.name.replace(":total", "").replace(":", "_")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return "".join(output).encode("utf-8")
|
return "".join(output).encode("utf-8")
|
||||||
|
|
Loading…
Reference in New Issue