kopia lustrzana https://github.com/cyoung/stratux
Add prometheus metrics to fancontrol.
rodzic
7aa986fbab
commit
8544d6926f
|
@ -4,6 +4,8 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
"github.com/takama/daemon"
|
"github.com/takama/daemon"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -17,6 +19,30 @@ import (
|
||||||
// #cgo LDFLAGS: -lwiringPi
|
// #cgo LDFLAGS: -lwiringPi
|
||||||
import "C"
|
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 (
|
const (
|
||||||
// CPU temperature target, degrees C
|
// CPU temperature target, degrees C
|
||||||
defaultTempTarget = 50.
|
defaultTempTarget = 50.
|
||||||
|
@ -60,7 +86,25 @@ var myFanControl FanControl
|
||||||
|
|
||||||
var stdlog, errlog *log.Logger
|
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() {
|
func fanControl() {
|
||||||
|
prometheus.MustRegister(currentTemp)
|
||||||
|
prometheus.MustRegister(totalFanOnTime)
|
||||||
|
prometheus.MustRegister(totalUptime)
|
||||||
|
|
||||||
|
go updateStats()
|
||||||
|
|
||||||
cPin := C.int(myFanControl.PWMPin)
|
cPin := C.int(myFanControl.PWMPin)
|
||||||
|
|
||||||
C.wiringPiSetup()
|
C.wiringPiSetup()
|
||||||
|
@ -157,6 +201,7 @@ func (service *Service) Manage() (string, error) {
|
||||||
signal.Notify(interrupt, os.Interrupt, os.Kill, syscall.SIGTERM)
|
signal.Notify(interrupt, os.Interrupt, os.Kill, syscall.SIGTERM)
|
||||||
|
|
||||||
http.HandleFunc("/", handleStatusRequest)
|
http.HandleFunc("/", handleStatusRequest)
|
||||||
|
http.Handle("/metrics", promhttp.Handler())
|
||||||
http.ListenAndServe(addr, nil)
|
http.ListenAndServe(addr, nil)
|
||||||
|
|
||||||
// interrupt by system signal
|
// interrupt by system signal
|
||||||
|
|
Ładowanie…
Reference in New Issue