func (collector *PrometheusCollector) GetSpec() []v1.MetricSpec { specs := []v1.MetricSpec{} response, err := http.Get(collector.configFile.Endpoint) if err != nil { return specs } defer response.Body.Close() pageContent, err := ioutil.ReadAll(response.Body) if err != nil { return specs } lines := strings.Split(string(pageContent), "\n") for i, line := range lines { if strings.HasPrefix(line, "# HELP") { stopIndex := strings.Index(lines[i+2], "{") if stopIndex == -1 { stopIndex = strings.Index(lines[i+2], " ") } name := strings.TrimSpace(lines[i+2][0:stopIndex]) if _, ok := collector.metricsSet[name]; collector.metricsSet != nil && !ok { continue } spec := v1.MetricSpec{ Name: name, Type: v1.MetricType(getMetricData(lines[i+1])), Format: "float", Units: getMetricData(lines[i]), } specs = append(specs, spec) } } return specs }
// metricType converts Prometheus metric type to cadvisor metric type. // If there is no mapping then just return the name of the Prometheus metric type. func metricType(t rawmodel.MetricType) v1.MetricType { switch t { case rawmodel.MetricType_COUNTER: return v1.MetricCumulative case rawmodel.MetricType_GAUGE: return v1.MetricGauge default: return v1.MetricType(t.String()) } }