windows_exporter/tools/collector-generator/collector.template

57 lines
1.6 KiB
Plaintext
Raw Normal View History

2016-09-24 09:49:09 +00:00
package collector
import (
"github.com/StackExchange/wmi"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/common/log"
2016-09-24 09:49:09 +00:00
)
func init() {
2020-04-07 19:05:41 +00:00
registerCollector("{{ .CollectorName | toLower }}", new{{ .CollectorName }}Collector) // TODO: Add any perflib dependencies here
2016-09-24 09:49:09 +00:00
}
// A {{ .CollectorName }}Collector is a Prometheus collector for WMI {{ .Class }} metrics
type {{ .CollectorName }}Collector struct {
{{- range $m := .Members }}
{{ $m.Name }} *prometheus.Desc
{{- end }}
}
2020-04-07 19:05:41 +00:00
func new{{ .CollectorName }}Collector() (Collector, error) {
2016-09-24 09:49:09 +00:00
const subsystem = "{{ .CollectorName | toLower }}"
return &{{ .CollectorName }}Collector{
{{- range $m := .Members }}
{{ $m.Name }}: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "{{ $m.Name | toSnakeCase }}"),
"({{ $m.Name }})",
nil,
nil,
),
{{- end }}
}, nil
}
2020-04-07 19:05:41 +00:00
2018-10-04 19:35:33 +00:00
// {{ .Class }} docs:
// - <add link to documentation here>
2016-09-24 09:49:09 +00:00
type {{ .Class }} struct {
Name string
{{ range $m := .Members }}
{{ $m.Name }} {{ $m.Type }}
{{- end }}
}
2020-04-07 19:05:41 +00:00
// Collect sends the metric values for each metric
// to the provided prometheus Metric channel.
func (c *{{ .CollectorName }}Collector) Collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) error {
2016-09-24 09:49:09 +00:00
var dst []{{ .Class }}
q := queryAll(&dst)
2016-09-24 09:49:09 +00:00
if err := wmi.Query(q, &dst); err != nil {
return nil, err
}
{{ range $m := .Members }}
ch <- prometheus.MustNewConstMetric(
c.{{ $m.Name }},
prometheus.GaugeValue,
float64(dst[0].{{ $m.Name }}),
)
{{ end }}
return nil, nil
}