void end()

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();
    }