Skip to content
Snippets Groups Projects
Commit 1c8ca2c5 authored by Richard van der Hoff's avatar Richard van der Hoff
Browse files

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`.
parent ceafb5a1
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,7 @@ import math ...@@ -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): ...@@ -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): ...@@ -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")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment