/
collector.go
76 lines (63 loc) · 3.28 KB
/
collector.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package server
import (
"github.com/SkYNewZ/speedtest-prometheus-exporter/internal/speedtest"
"github.com/prometheus/client_golang/prometheus"
)
var _ prometheus.Collector = (*collector)(nil)
type collector struct {
data *speedtest.Result // carry our latest data
pingJitterMetric *prometheus.Desc
pingLatencyMetric *prometheus.Desc
downloadBandwidthMetric *prometheus.Desc
downloadBytesMetric *prometheus.Desc
downloadElapsedMetric *prometheus.Desc
uploadBandwidthMetric *prometheus.Desc
uploadBytesMetric *prometheus.Desc
uploadElapsedMetric *prometheus.Desc
packetLossMetric *prometheus.Desc
}
func newCollector() *collector {
return &collector{
data: new(speedtest.Result),
// Ping
pingJitterMetric: prometheus.NewDesc("speedtest_ping_jitter", "Ping Jitter in milliseconds", nil, nil),
pingLatencyMetric: prometheus.NewDesc("speedtest_ping_latency", "Ping latency in milliseconds", nil, nil),
// Download
downloadBandwidthMetric: prometheus.NewDesc("speedtest_download_bandwidth", "Download bandwidth in megabits", nil, nil),
downloadBytesMetric: prometheus.NewDesc("speedtest_download_bytes", "Download bytes", nil, nil),
downloadElapsedMetric: prometheus.NewDesc("speedtest_download_elapsed", "Elapsed time in seconds to perform this test", nil, nil),
// Upload
uploadBandwidthMetric: prometheus.NewDesc("speedtest_upload_bandwidth", "Upload bandwidth in megabits", nil, nil),
uploadBytesMetric: prometheus.NewDesc("speedtest_upload_bytes", "Upload bytes", nil, nil),
uploadElapsedMetric: prometheus.NewDesc("speedtest_upload_elapsed", "Elapsed time in seconds to perform this test", nil, nil),
// PacketLoss
packetLossMetric: prometheus.NewDesc("speedtest_packet_loss", "Packets loss during the test", nil, nil),
}
}
func (c *collector) Describe(ch chan<- *prometheus.Desc) {
ch <- c.pingJitterMetric
ch <- c.pingLatencyMetric
ch <- c.downloadBandwidthMetric
ch <- c.downloadBytesMetric
ch <- c.downloadElapsedMetric
ch <- c.uploadBandwidthMetric
ch <- c.uploadBytesMetric
ch <- c.uploadElapsedMetric
ch <- c.packetLossMetric
}
//Collect implements required collect function for all promehteus collectors
func (c *collector) Collect(ch chan<- prometheus.Metric) {
// Ping
ch <- prometheus.MustNewConstMetric(c.pingJitterMetric, prometheus.GaugeValue, c.data.Ping.Jitter)
ch <- prometheus.MustNewConstMetric(c.pingLatencyMetric, prometheus.GaugeValue, c.data.Ping.Latency)
// Download
ch <- prometheus.MustNewConstMetric(c.downloadBandwidthMetric, prometheus.GaugeValue, float64(c.data.Download.Bandwidth))
ch <- prometheus.MustNewConstMetric(c.downloadBytesMetric, prometheus.GaugeValue, float64(c.data.Download.Bytes))
ch <- prometheus.MustNewConstMetric(c.downloadElapsedMetric, prometheus.GaugeValue, float64(c.data.Download.Elapsed))
// Upload
ch <- prometheus.MustNewConstMetric(c.uploadBandwidthMetric, prometheus.GaugeValue, float64(c.data.Upload.Bandwidth))
ch <- prometheus.MustNewConstMetric(c.uploadBytesMetric, prometheus.GaugeValue, float64(c.data.Upload.Bytes))
ch <- prometheus.MustNewConstMetric(c.uploadElapsedMetric, prometheus.GaugeValue, float64(c.data.Upload.Elapsed))
// Packet loss
ch <- prometheus.MustNewConstMetric(c.packetLossMetric, prometheus.GaugeValue, c.data.PacketLoss)
}