in oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/prometheus/parser/Context.java [83:172]
void end() {
if (metricFamily != null) {
return;
}
MetricFamily.Builder metricFamilyBuilder = new MetricFamily.Builder();
metricFamilyBuilder.setName(name);
metricFamilyBuilder.setHelp(help);
metricFamilyBuilder.setType(type);
if (samples.size() < 1) {
return;
}
switch (type) {
case GAUGE:
samples.forEach(textSample -> metricFamilyBuilder
.addMetric(Gauge.builder()
.name(name)
.value(convertStringToDouble(textSample.getValue()))
.labels(textSample.getLabels())
.timestamp(now)
.build()));
break;
case COUNTER:
samples.forEach(textSample -> metricFamilyBuilder
.addMetric(Counter.builder()
.name(name)
.value(convertStringToDouble(textSample.getValue()))
.labels(textSample.getLabels())
.timestamp(now)
.build()));
break;
case HISTOGRAM:
samples.stream()
.map(sample -> {
Map<String, String> labels = Maps.newHashMap(sample.getLabels());
labels.remove("le");
return Pair.of(labels, sample);
})
.collect(groupingBy(Pair::getLeft, mapping(Pair::getRight, toList())))
.forEach((labels, samples) -> {
Histogram.HistogramBuilder hBuilder = Histogram.builder();
hBuilder.name(name).timestamp(now);
hBuilder.labels(labels);
samples.forEach(textSample -> {
if (textSample.getName().endsWith("_count")) {
hBuilder.sampleCount((long) convertStringToDouble(textSample.getValue()));
} else if (textSample.getName().endsWith("_sum")) {
hBuilder.sampleSum(convertStringToDouble(textSample.getValue()));
} else if (textSample.getLabels().containsKey("le")) {
hBuilder.bucket(
convertStringToDouble(textSample.getLabels().remove("le")),
(long) convertStringToDouble(textSample.getValue())
);
}
});
metricFamilyBuilder.addMetric(hBuilder.build());
});
break;
case SUMMARY:
samples.stream()
.map(sample -> {
Map<String, String> labels = Maps.newHashMap(sample.getLabels());
labels.remove("quantile");
return Pair.of(labels, sample);
})
.collect(groupingBy(Pair::getLeft, mapping(Pair::getRight, toList())))
.forEach((labels, samples) -> {
Summary.SummaryBuilder sBuilder = Summary.builder();
sBuilder.name(name).timestamp(now);
sBuilder.labels(labels);
samples.forEach(textSample -> {
if (textSample.getName().endsWith("_count")) {
sBuilder.sampleCount((long) convertStringToDouble(textSample.getValue()));
} else if (textSample.getName().endsWith("_sum")) {
sBuilder.sampleSum(convertStringToDouble(textSample.getValue()));
} else if (textSample.getLabels().containsKey("quantile")) {
sBuilder.quantile(
convertStringToDouble(textSample.getLabels().remove("quantile")),
convertStringToDouble(textSample.getValue())
);
}
});
metricFamilyBuilder.addMetric(sBuilder.build());
});
break;
}
metricFamily = metricFamilyBuilder.build();
}