Skip to content

Commit b59a571

Browse files
committed
Only use OpenMetrics format
1 parent cce86db commit b59a571

File tree

3 files changed

+51
-156
lines changed

3 files changed

+51
-156
lines changed

core/include/prometheus/text_serializer.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,8 @@ namespace prometheus {
1212
class PROMETHEUS_CPP_CORE_EXPORT TextSerializer : public Serializer {
1313
public:
1414
using Serializer::Serialize;
15-
std::string Serialize(const std::vector<MetricFamily>& metrics,
16-
bool open_metrics) const;
1715
void Serialize(std::ostream& out,
1816
const std::vector<MetricFamily>& metrics) const override;
19-
void Serialize(std::ostream& out, const std::vector<MetricFamily>& metrics,
20-
bool open_metrics) const;
2117
};
2218

2319
} // namespace prometheus

core/src/text_serializer.cc

Lines changed: 39 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "prometheus/text_serializer.h"
22

3+
#include <algorithm>
34
#include <chrono>
45
#include <cmath>
56
#include <limits>
@@ -76,87 +77,81 @@ void WriteHead(std::ostream& out, const MetricFamily& family,
7677
}
7778

7879
// Write a line trailer: timestamp
79-
void WriteTail(std::ostream& out, const ClientMetric& metric,
80-
const bool open_metrics) {
80+
void WriteTail(std::ostream& out, const ClientMetric& metric) {
8181
if (metric.timestamp != std::chrono::seconds::zero()) {
82-
out << " ";
83-
if (open_metrics) {
84-
using FloatSeconds = std::chrono::duration<double>;
85-
out << std::chrono::duration_cast<FloatSeconds>(metric.timestamp).count();
86-
} else {
87-
out << metric.timestamp.count();
88-
}
82+
using FloatSeconds = std::chrono::duration<double>;
83+
out << " "
84+
<< std::chrono::duration_cast<FloatSeconds>(metric.timestamp).count();
8985
}
9086
out << "\n";
9187
}
9288

9389
void SerializeCounter(std::ostream& out, const MetricFamily& family,
94-
const ClientMetric& metric, const bool open_metrics) {
90+
const ClientMetric& metric) {
9591
WriteHead(out, family, metric, "_total");
9692
WriteValue(out, metric.counter.value);
97-
WriteTail(out, metric, open_metrics);
93+
WriteTail(out, metric);
9894
}
9995

10096
void SerializeGauge(std::ostream& out, const MetricFamily& family,
101-
const ClientMetric& metric, const bool open_metrics) {
97+
const ClientMetric& metric) {
10298
WriteHead(out, family, metric);
10399
WriteValue(out, metric.gauge.value);
104-
WriteTail(out, metric, open_metrics);
100+
WriteTail(out, metric);
105101
}
106102

107103
void SerializeSummary(std::ostream& out, const MetricFamily& family,
108-
const ClientMetric& metric, const bool open_metrics) {
104+
const ClientMetric& metric) {
109105
auto& sum = metric.summary;
110106
WriteHead(out, family, metric, "_count");
111107
out << sum.sample_count;
112-
WriteTail(out, metric, open_metrics);
108+
WriteTail(out, metric);
113109

114110
WriteHead(out, family, metric, "_sum");
115111
WriteValue(out, sum.sample_sum);
116-
WriteTail(out, metric, open_metrics);
112+
WriteTail(out, metric);
117113

118114
for (auto& q : sum.quantile) {
119115
WriteHead(out, family, metric, "", "quantile", q.quantile);
120116
WriteValue(out, q.value);
121-
WriteTail(out, metric, open_metrics);
117+
WriteTail(out, metric);
122118
}
123119
}
124120

125121
void SerializeUntyped(std::ostream& out, const MetricFamily& family,
126-
const ClientMetric& metric, const bool open_metrics) {
122+
const ClientMetric& metric) {
127123
WriteHead(out, family, metric);
128124
WriteValue(out, metric.untyped.value);
129-
WriteTail(out, metric, open_metrics);
125+
WriteTail(out, metric);
130126
}
131127

132128
void SerializeHistogram(std::ostream& out, const MetricFamily& family,
133-
const ClientMetric& metric, const bool open_metrics) {
129+
const ClientMetric& metric) {
134130
auto& hist = metric.histogram;
135131
WriteHead(out, family, metric, "_count");
136132
out << hist.sample_count;
137-
WriteTail(out, metric, open_metrics);
133+
WriteTail(out, metric);
138134

139135
WriteHead(out, family, metric, "_sum");
140136
WriteValue(out, hist.sample_sum);
141-
WriteTail(out, metric, open_metrics);
137+
WriteTail(out, metric);
142138

143139
double last = -std::numeric_limits<double>::infinity();
144140
for (auto& b : hist.bucket) {
145141
WriteHead(out, family, metric, "_bucket", "le", b.upper_bound);
146142
last = b.upper_bound;
147143
out << b.cumulative_count;
148-
WriteTail(out, metric, open_metrics);
144+
WriteTail(out, metric);
149145
}
150146

151147
if (last != std::numeric_limits<double>::infinity()) {
152148
WriteHead(out, family, metric, "_bucket", "le", "+Inf");
153149
out << hist.sample_count;
154-
WriteTail(out, metric, open_metrics);
150+
WriteTail(out, metric);
155151
}
156152
}
157153

158-
void SerializeFamily(std::ostream& out, const MetricFamily& family,
159-
const bool open_metrics) {
154+
void SerializeFamily(std::ostream& out, const MetricFamily& family) {
160155
const auto ends_with = [](const std::string& value,
161156
const std::string& ending) -> bool {
162157
if (ending.size() > value.size()) {
@@ -181,105 +176,66 @@ void SerializeFamily(std::ostream& out, const MetricFamily& family,
181176
std::stable_sort(sorted_family.metric.begin(), sorted_family.metric.end(),
182177
compare_metrics);
183178

179+
if (sorted_family.type == MetricType::Counter) {
180+
remove_suffix(sorted_family.name, "_total");
181+
}
182+
183+
if (!sorted_family.help.empty()) {
184+
out << "# HELP " << sorted_family.name << " " << sorted_family.help << "\n";
185+
}
186+
184187
switch (sorted_family.type) {
185188
case MetricType::Counter: {
186-
remove_suffix(sorted_family.name, "_total");
187-
out << "# TYPE " << sorted_family.name;
188-
if (!open_metrics) {
189-
out << "_total";
190-
}
191-
out << " counter\n";
192-
if (!sorted_family.help.empty()) {
193-
out << "# HELP " << sorted_family.name;
194-
if (!open_metrics) {
195-
out << "_total";
196-
}
197-
out << " " << sorted_family.help << "\n";
198-
}
189+
out << "# TYPE " << sorted_family.name << " counter\n";
199190
for (const auto& metric : sorted_family.metric) {
200-
SerializeCounter(out, sorted_family, metric, open_metrics);
191+
SerializeCounter(out, sorted_family, metric);
201192
}
202193
break;
203194
}
204195
case MetricType::Gauge:
205196
out << "# TYPE " << sorted_family.name << " gauge\n";
206-
if (!sorted_family.help.empty()) {
207-
out << "# HELP " << sorted_family.name << " " << sorted_family.help
208-
<< "\n";
209-
}
210197
for (auto& metric : sorted_family.metric) {
211-
SerializeGauge(out, sorted_family, metric, open_metrics);
198+
SerializeGauge(out, sorted_family, metric);
212199
}
213200
break;
214201
case MetricType::Summary:
215202
out << "# TYPE " << sorted_family.name << " summary\n";
216-
if (!sorted_family.help.empty()) {
217-
out << "# HELP " << sorted_family.name << " " << sorted_family.help
218-
<< "\n";
219-
}
220203
for (auto& metric : sorted_family.metric) {
221-
SerializeSummary(out, sorted_family, metric, open_metrics);
204+
SerializeSummary(out, sorted_family, metric);
222205
}
223206
break;
224207
case MetricType::Untyped:
225-
out << "# TYPE " << sorted_family.name;
226-
if (open_metrics) {
227-
out << " unknown\n";
228-
} else {
229-
out << " untyped\n";
230-
}
231-
if (!sorted_family.help.empty()) {
232-
out << "# HELP " << sorted_family.name << " " << sorted_family.help
233-
<< "\n";
234-
}
208+
out << "# TYPE " << sorted_family.name << " unknown\n";
235209
for (auto& metric : sorted_family.metric) {
236-
SerializeUntyped(out, sorted_family, metric, open_metrics);
210+
SerializeUntyped(out, sorted_family, metric);
237211
}
238212
break;
239213
case MetricType::Histogram:
240214
out << "# TYPE " << sorted_family.name << " histogram\n";
241-
if (!sorted_family.help.empty()) {
242-
out << "# HELP " << sorted_family.name << " " << sorted_family.help
243-
<< "\n";
244-
}
245215
for (auto& metric : sorted_family.metric) {
246-
SerializeHistogram(out, sorted_family, metric, open_metrics);
216+
SerializeHistogram(out, sorted_family, metric);
247217
}
248218
break;
249219
}
250220
}
251221
} // namespace
252222

253-
std::string TextSerializer::Serialize(const std::vector<MetricFamily>& metrics,
254-
const bool open_metrics) const {
255-
std::ostringstream ss;
256-
Serialize(ss, metrics, open_metrics);
257-
return ss.str();
258-
}
259-
260223
void TextSerializer::Serialize(std::ostream& out,
261224
const std::vector<MetricFamily>& metrics) const {
262-
Serialize(out, metrics, false);
263-
}
264-
265-
void TextSerializer::Serialize(std::ostream& out,
266-
const std::vector<MetricFamily>& metrics,
267-
const bool open_metrics) const {
268225
auto saved_locale = out.getloc();
269226
auto saved_precision = out.precision();
270227

271228
out.imbue(std::locale::classic());
272229
out.precision(std::numeric_limits<double>::max_digits10 - 1);
273230

274231
for (auto& family : metrics) {
275-
SerializeFamily(out, family, open_metrics);
232+
SerializeFamily(out, family);
276233
}
277234

278-
if (open_metrics) {
279-
out << "# EOF\n";
280-
}
235+
out << "# EOF\n";
281236

282237
out.imbue(saved_locale);
283238
out.precision(saved_precision);
284239
}
240+
285241
} // namespace prometheus

0 commit comments

Comments
 (0)