Add deviceinfo metrics
This commit is contained in:
parent
e348d3871b
commit
ed559c5a69
3 changed files with 119 additions and 11 deletions
26
README.md
26
README.md
|
@ -7,17 +7,21 @@ FTTH subscription.
|
|||
|
||||
This exporter currently exposes the following metrics:
|
||||
|
||||
| Name | Type | Description | Labels | Experimental |
|
||||
| ---------------------------------- | ----- | ------------------------------------------------- | --------- | ------------ |
|
||||
| livebox_interface_rx_mbits | gauge | Received Mbits per second | interface | No |
|
||||
| livebox_interface_tx_mbits | gauge | Transmitted Mbits per second | interface | No |
|
||||
| livebox_devices_total | gauge | The total number of active devices | type | No |
|
||||
| livebox_interface_homelan_rx_mbits | gauge | Received Mbits per second | interface | Yes |
|
||||
| livebox_interface_homelan_tx_mbits | gauge | Transmitted Mbits per second | interface | Yes |
|
||||
| livebox_interface_netdev_rx_mbits | gauge | Received Mbits per second | interface | Yes |
|
||||
| livebox_interface_netdev_tx_mbits | gauge | Transmitted Mbits per second | interface | Yes |
|
||||
| livebox_wan_rx_mbits | gauge | Received Mbits per second on the WAN interface | | Yes |
|
||||
| livebox_wan_tx_mbits | gauge | Transmitted Mbits per second on the WAN interface | | Yes |
|
||||
| Name | Type | Description | Labels | Experimental |
|
||||
| --------------------------------------- | ----- | ------------------------------------------------- | --------- | ------------ |
|
||||
| livebox_interface_rx_mbits | gauge | Received Mbits per second | interface | No |
|
||||
| livebox_interface_tx_mbits | gauge | Transmitted Mbits per second | interface | No |
|
||||
| livebox_devices_total | gauge | The total number of active devices | type | No |
|
||||
| livebox_deviceinfo_reboots_total | gauge | Number of Livebox reboots | | No |
|
||||
| livebox_deviceinfo_uptime_seconds_total | gauge | Livebox current uptime | | No |
|
||||
| livebox_deviceinfo_memory_total_mbytes | gauge | Livebox system total memory | | No |
|
||||
| livebox_deviceinfo_memory_usage_mbytes | gauge | Livebox system used memory | | No |
|
||||
| livebox_interface_homelan_rx_mbits | gauge | Received Mbits per second | interface | Yes |
|
||||
| livebox_interface_homelan_tx_mbits | gauge | Transmitted Mbits per second | interface | Yes |
|
||||
| livebox_interface_netdev_rx_mbits | gauge | Received Mbits per second | interface | Yes |
|
||||
| livebox_interface_netdev_tx_mbits | gauge | Transmitted Mbits per second | interface | Yes |
|
||||
| livebox_wan_rx_mbits | gauge | Received Mbits per second on the WAN interface | | Yes |
|
||||
| livebox_wan_tx_mbits | gauge | Transmitted Mbits per second on the WAN interface | | Yes |
|
||||
|
||||
Experimental metrics are not enabled by default, use the `-experimental`
|
||||
command-line option to enable them.
|
||||
|
|
101
internal/collector/deviceinfo.go
Normal file
101
internal/collector/deviceinfo.go
Normal file
|
@ -0,0 +1,101 @@
|
|||
package collector
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"sync"
|
||||
|
||||
"github.com/Tomy2e/livebox-api-client"
|
||||
"github.com/Tomy2e/livebox-api-client/api/request"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
var _ prometheus.Collector = &DeviceInfo{}
|
||||
|
||||
// DeviceInfo implements a prometheus Collector that returns Livebox specific metrics.
|
||||
type DeviceInfo struct {
|
||||
client livebox.Client
|
||||
numberOfRebootsMetric *prometheus.Desc
|
||||
uptimeMetric *prometheus.Desc
|
||||
memoryTotalMetric *prometheus.Desc
|
||||
memoryUsageMetric *prometheus.Desc
|
||||
}
|
||||
|
||||
// NewDeviceInfo returns a new DeviceInfo collector using the specified client.
|
||||
func NewDeviceInfo(client livebox.Client) *DeviceInfo {
|
||||
return &DeviceInfo{
|
||||
client: client,
|
||||
numberOfRebootsMetric: prometheus.NewDesc(
|
||||
"livebox_deviceinfo_reboots_total",
|
||||
"Number of Livebox reboots.",
|
||||
nil, nil,
|
||||
),
|
||||
uptimeMetric: prometheus.NewDesc(
|
||||
"livebox_deviceinfo_uptime_seconds_total",
|
||||
"Livebox current uptime.",
|
||||
nil, nil,
|
||||
),
|
||||
memoryTotalMetric: prometheus.NewDesc(
|
||||
"livebox_deviceinfo_memory_total_mbytes",
|
||||
"Livebox system total memory.",
|
||||
nil, nil,
|
||||
),
|
||||
memoryUsageMetric: prometheus.NewDesc(
|
||||
"livebox_deviceinfo_memory_usage_mbytes",
|
||||
"Livebox system used memory.",
|
||||
nil, nil,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// Describe currently does nothing.
|
||||
func (d *DeviceInfo) Describe(c chan<- *prometheus.Desc) {}
|
||||
|
||||
func (d *DeviceInfo) deviceInfo(c chan<- prometheus.Metric) {
|
||||
var deviceInfo struct {
|
||||
Status struct {
|
||||
NumberOfReboots float64 `json:"NumberOfReboots"`
|
||||
UpTime float64 `json:"UpTime"`
|
||||
} `json:"status"`
|
||||
}
|
||||
if err := d.client.Request(context.TODO(), request.New("DeviceInfo", "get", nil), &deviceInfo); err != nil {
|
||||
log.Printf("WARN: DeviceInfo collector failed: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
c <- prometheus.MustNewConstMetric(d.numberOfRebootsMetric, prometheus.GaugeValue, deviceInfo.Status.NumberOfReboots)
|
||||
c <- prometheus.MustNewConstMetric(d.uptimeMetric, prometheus.GaugeValue, deviceInfo.Status.UpTime)
|
||||
}
|
||||
|
||||
func (d *DeviceInfo) memoryStatus(c chan<- prometheus.Metric) {
|
||||
var memoryStatus struct {
|
||||
Status struct {
|
||||
Total float64 `json:"Total"`
|
||||
Free float64 `json:"Free"`
|
||||
} `json:"status"`
|
||||
}
|
||||
if err := d.client.Request(context.TODO(), request.New("DeviceInfo.MemoryStatus", "get", nil), &memoryStatus); err != nil {
|
||||
log.Printf("WARN: MemoryStatus collector failed: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
c <- prometheus.MustNewConstMetric(d.memoryTotalMetric, prometheus.GaugeValue, memoryStatus.Status.Total)
|
||||
c <- prometheus.MustNewConstMetric(d.memoryUsageMetric, prometheus.GaugeValue, memoryStatus.Status.Total-memoryStatus.Status.Free)
|
||||
}
|
||||
|
||||
// Collect collects all DeviceInfo metrics.
|
||||
func (d *DeviceInfo) Collect(c chan<- prometheus.Metric) {
|
||||
wg := sync.WaitGroup{}
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
d.deviceInfo(c)
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
d.memoryStatus(c)
|
||||
wg.Done()
|
||||
}()
|
||||
wg.Wait()
|
||||
}
|
3
main.go
3
main.go
|
@ -12,6 +12,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/Tomy2e/livebox-api-client"
|
||||
"github.com/Tomy2e/livebox-exporter/internal/collector"
|
||||
"github.com/Tomy2e/livebox-exporter/internal/poller"
|
||||
exporterLivebox "github.com/Tomy2e/livebox-exporter/pkg/livebox"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
|
@ -130,6 +131,8 @@ func main() {
|
|||
)...,
|
||||
)
|
||||
|
||||
registry.MustRegister(collector.NewDeviceInfo(client))
|
||||
|
||||
go func() {
|
||||
for {
|
||||
if err := pollers.Poll(ctx); err != nil {
|
||||
|
|
Loading…
Reference in a new issue