Add prometheus metrics to fancontrol.

rxwx
cyoung 2018-11-13 19:24:12 -05:00
rodzic 7aa986fbab
commit 8544d6926f
1 zmienionych plików z 45 dodań i 0 usunięć

Wyświetl plik

@ -4,6 +4,8 @@ import (
"encoding/json"
"flag"
"fmt"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/takama/daemon"
"log"
"net/http"
@ -17,6 +19,30 @@ import (
// #cgo LDFLAGS: -lwiringPi
import "C"
// Initialize Prometheus metrics.
var (
currentTemp = prometheus.NewGauge(prometheus.GaugeOpts{
Name: "current_temp",
Help: "Current CPU temp.",
})
totalFanOnTime = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "total_fan_on_time",
Help: "Total fan run time.",
},
[]string{"all"},
)
totalUptime = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "total_uptime",
Help: "Total uptime.",
},
[]string{"all"},
)
)
const (
// CPU temperature target, degrees C
defaultTempTarget = 50.
@ -60,7 +86,25 @@ var myFanControl FanControl
var stdlog, errlog *log.Logger
func updateStats() {
updateTicker := time.NewTicker(1 * time.Second)
for {
<-updateTicker.C
totalUptime.With(prometheus.Labels{"all": "all"}).Inc()
currentTemp.Set(float64(myFanControl.TempCurrent))
if myFanControl.PWMDutyCurrent > 0 {
totalFanOnTime.With(prometheus.Labels{"all": "all"}).Inc()
}
}
}
func fanControl() {
prometheus.MustRegister(currentTemp)
prometheus.MustRegister(totalFanOnTime)
prometheus.MustRegister(totalUptime)
go updateStats()
cPin := C.int(myFanControl.PWMPin)
C.wiringPiSetup()
@ -157,6 +201,7 @@ func (service *Service) Manage() (string, error) {
signal.Notify(interrupt, os.Interrupt, os.Kill, syscall.SIGTERM)
http.HandleFunc("/", handleStatusRequest)
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(addr, nil)
// interrupt by system signal