From 0eaf33944dad05070bb09f6911f1d16e2650a143 Mon Sep 17 00:00:00 2001 From: Hiroaki Kobayashi Date: Sat, 20 Oct 2018 02:20:07 +0900 Subject: [PATCH] support label --- dummy_exporter.go | 37 ++++++++++++++++++++++--------------- example/simple.yml | 12 ++++++------ 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/dummy_exporter.go b/dummy_exporter.go index 039e336..f711ee0 100644 --- a/dummy_exporter.go +++ b/dummy_exporter.go @@ -10,6 +10,8 @@ import ( "gopkg.in/alecthomas/kingpin.v2" "io/ioutil" "net/http" + "sort" + "strconv" ) const ( @@ -25,24 +27,21 @@ var ( type collector struct { namespace string config map[string]config.Metric - desc map[string][]*prometheus.Desc + desc map[string]*prometheus.Desc } func newCollector(namespace string, metrics []config.Metric) (*collector, error) { c := map[string]config.Metric{} - d := map[string][]*prometheus.Desc{} + d := map[string]*prometheus.Desc{} for _, metric := range metrics { var keys []string for k := range metric.Labels { keys = append(keys, k) } - var descs []*prometheus.Desc - for i := 0; i < metric.Size; i++ { - descs = append(descs, prometheus.NewDesc(fmt.Sprintf("%s_%s_%d", namespace, metric.Name, i), "dummy", keys, nil)) - } - + sort.Strings(keys) + keys = append([]string{"id"}, keys...) c[metric.Name] = metric - d[metric.Name] = descs + d[metric.Name] = prometheus.NewDesc(fmt.Sprintf("%s_%s", namespace, metric.Name), "dummy", keys, nil) } return &collector{ namespace: namespace, @@ -52,17 +51,25 @@ func newCollector(namespace string, metrics []config.Metric) (*collector, error) } func (collector collector) Describe(ch chan<- *prometheus.Desc) { - for _, descs := range collector.desc { - for _, desc := range descs { - ch <- desc - } + for _, desc := range collector.desc { + ch <- desc } } func (collector collector) Collect(ch chan<- prometheus.Metric) { - for _, descs := range collector.desc { - for _, desc := range descs { - ch <- prometheus.MustNewConstMetric(desc, prometheus.GaugeValue, 1) + for name, desc := range collector.desc { + var keys []string + for k := range collector.config[name].Labels { + keys = append(keys, k) + } + sort.Strings(keys) + for i := 0; i < collector.config[name].Size; i++ { + labels := []string{strconv.Itoa(i)} + for _, key := range keys { + vals := collector.config[name].Labels[key] + labels = append(labels, vals[i%len(vals)]) + } + ch <- prometheus.MustNewConstMetric(desc, prometheus.GaugeValue, 1, labels...) } } } diff --git a/example/simple.yml b/example/simple.yml index fc45682..5c04b38 100644 --- a/example/simple.yml +++ b/example/simple.yml @@ -2,9 +2,9 @@ metrics: - name: foo type: counter size: 5 -#- name: bar -# type: counter -# size: 10 -# labels: -# l1: [one, two, three] -# l2: [aaa] +- name: bar + type: counter + size: 10 + labels: + l1: [one, two, three] + l2: [aaa]