You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.3 KiB
Go

package metrics
import (
"git.buddy.wtf/buddy/open-hardware-monitor-client/lib/client"
"github.com/gosimple/slug"
"github.com/prometheus/client_golang/prometheus"
)
// Collector type
type Collector struct {
vals []client.Value
descs []*prometheus.Desc
}
// FromVals gets a collector
func FromVals(vals []client.Value) *Collector {
descs := make([]*prometheus.Desc, len(vals))
for i, val := range vals {
params := []string{}
for _, hw := range val.Hardware {
hwt := hw.Type
typeslug := slug.Make(hwt.String())
params = append(params, typeslug)
}
params = append(params, "unit")
name, labels := val.MetricName()
descs[i] = prometheus.NewDesc(
name,
name,
params,
labels,
)
}
c := &Collector{
vals: vals,
descs: descs,
}
return c
}
// Describe method for interface
func (c *Collector) Describe(ch chan<- *prometheus.Desc) {
for _, d := range c.descs {
ch <- d
}
}
// Collect method for interface
func (c *Collector) Collect(ch chan<- prometheus.Metric) {
for i, val := range c.vals {
desc := c.descs[i]
labelVals := []string{}
for _, hw := range val.Hardware {
labelVals = append(labelVals, hw.Value)
}
labelVals = append(labelVals, slug.Make(val.Unit.String()))
ch <- prometheus.MustNewConstMetric(desc, prometheus.GaugeValue, val.Float64(), labelVals...)
}
}