in pkg/metrics/metrics.go [288:369]
func (c *metricsCollector) emitMetricFamily(metricFamily *dto.MetricFamily, ch chan<- prometheus.Metric) {
var valType prometheus.ValueType
var val float64
for _, metric := range metricFamily.GetMetric() {
var LabelNames []string
var LabelValues []string
for _, label := range metric.GetLabel() {
LabelNames = append(LabelNames, label.GetName())
LabelValues = append(LabelValues, label.GetValue())
}
for n, v := range c.constLabels {
LabelNames = append(LabelNames, n)
LabelValues = append(LabelValues, v)
}
emitNewConstMetric := func() {
ch <- prometheus.MustNewConstMetric(
prometheus.NewDesc(
metricFamily.GetName(),
metricFamily.GetHelp(),
LabelNames, nil,
),
valType, val, LabelValues...,
)
}
metricType := metricFamily.GetType()
switch metricType {
case dto.MetricType_COUNTER:
valType = prometheus.CounterValue
val = metric.GetCounter().GetValue()
emitNewConstMetric()
case dto.MetricType_GAUGE:
valType = prometheus.GaugeValue
val = metric.GetGauge().GetValue()
emitNewConstMetric()
case dto.MetricType_UNTYPED:
valType = prometheus.UntypedValue
val = metric.GetUntyped().GetValue()
emitNewConstMetric()
case dto.MetricType_SUMMARY:
quantiles := map[float64]float64{}
for _, q := range metric.GetSummary().GetQuantile() {
quantiles[q.GetQuantile()] = q.GetValue()
}
ch <- prometheus.MustNewConstSummary(
prometheus.NewDesc(
metricFamily.GetName(),
metricFamily.GetHelp(),
LabelNames, nil,
),
metric.GetSummary().GetSampleCount(),
metric.GetSummary().GetSampleSum(),
quantiles, LabelValues...,
)
case dto.MetricType_HISTOGRAM, dto.MetricType_GAUGE_HISTOGRAM:
buckets := map[float64]uint64{}
for _, b := range metric.GetHistogram().GetBucket() {
buckets[b.GetUpperBound()] = b.GetCumulativeCount()
}
ch <- prometheus.MustNewConstHistogram(
prometheus.NewDesc(
metricFamily.GetName(),
metricFamily.GetHelp(),
LabelNames, nil,
),
metric.GetHistogram().GetSampleCount(),
metric.GetHistogram().GetSampleSum(),
buckets, LabelValues...,
)
default:
klog.Errorf("unknown metric type: %v", metricType)
}
}
}