in sample-apps/prometheus/metric_collector.go [71:109]
func (mc metricCollector) handleHistograms(metricsResponse *[]MetricResponse) {
for _, histogram := range mc.histograms {
metric := &dto.Metric{}
histogram.Write(metric)
// handle count
countLabels := convertLabelPairsToLabels(metric.GetLabel())
countLabels["__name__"] = getName(histogram) + "_count"
countValues := convertMetricValues(mc.timestamp, float64(metric.GetHistogram().GetSampleCount()))
*metricsResponse = append(*metricsResponse, MetricResponse{
Labels: countLabels,
Value: countValues,
})
// handle sum
sumLabels := convertLabelPairsToLabels(metric.GetLabel())
sumLabels["__name__"] = getName(histogram) + "_sum"
sumValues := convertMetricValues(mc.timestamp, metric.GetHistogram().GetSampleSum())
*metricsResponse = append(*metricsResponse, MetricResponse{
Labels: sumLabels,
Value: sumValues,
})
// handle buckets
for _, bucket := range metric.GetHistogram().GetBucket() {
labels := convertLabelPairsToLabels(metric.GetLabel())
labels["__name__"] = getName(histogram) + "_bucket"
labels["le"] = fmt.Sprintf("%f", bucket.GetUpperBound())
values := convertMetricValues(mc.timestamp, float64(bucket.GetCumulativeCount()))
*metricsResponse = append(*metricsResponse, MetricResponse{
Labels: labels,
Value: values,
})
}
}
}