summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/ping/charts.go
blob: e117a18d51aa50d768dd5a6f2aa722432b09aeb3 (plain)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// SPDX-License-Identifier: GPL-3.0-or-later

package ping

import (
	"fmt"
	"strings"

	"github.com/netdata/netdata/go/go.d.plugin/agent/module"
)

const (
	prioHostRTT = module.Priority + iota
	prioHostStdDevRTT
	prioHostPingPacketLoss
	prioHostPingPackets
)

var hostChartsTmpl = module.Charts{
	hostRTTChartTmpl.Copy(),
	hostStdDevRTTChartTmpl.Copy(),
	hostPacketLossChartTmpl.Copy(),
	hostPacketsChartTmpl.Copy(),
}

var (
	hostRTTChartTmpl = module.Chart{
		ID:       "host_%s_rtt",
		Title:    "Ping round-trip time",
		Units:    "milliseconds",
		Fam:      "latency",
		Ctx:      "ping.host_rtt",
		Priority: prioHostRTT,
		Type:     module.Area,
		Dims: module.Dims{
			{ID: "host_%s_min_rtt", Name: "min", Div: 1e3},
			{ID: "host_%s_max_rtt", Name: "max", Div: 1e3},
			{ID: "host_%s_avg_rtt", Name: "avg", Div: 1e3},
		},
	}
	hostStdDevRTTChartTmpl = module.Chart{
		ID:       "host_%s_std_dev_rtt",
		Title:    "Ping round-trip time standard deviation",
		Units:    "milliseconds",
		Fam:      "latency",
		Ctx:      "ping.host_std_dev_rtt",
		Priority: prioHostStdDevRTT,
		Dims: module.Dims{
			{ID: "host_%s_std_dev_rtt", Name: "std_dev", Div: 1e3},
		},
	}
)

var hostPacketLossChartTmpl = module.Chart{
	ID:       "host_%s_packet_loss",
	Title:    "Ping packet loss",
	Units:    "percentage",
	Fam:      "packet loss",
	Ctx:      "ping.host_packet_loss",
	Priority: prioHostPingPacketLoss,
	Dims: module.Dims{
		{ID: "host_%s_packet_loss", Name: "loss", Div: 1000},
	},
}

var hostPacketsChartTmpl = module.Chart{
	ID:       "host_%s_packets",
	Title:    "Ping packets transferred",
	Units:    "packets",
	Fam:      "packets",
	Ctx:      "ping.host_packets",
	Priority: prioHostPingPackets,
	Dims: module.Dims{
		{ID: "host_%s_packets_recv", Name: "received"},
		{ID: "host_%s_packets_sent", Name: "sent"},
	},
}

func newHostCharts(host string) *module.Charts {
	charts := hostChartsTmpl.Copy()

	for _, chart := range *charts {
		chart.ID = fmt.Sprintf(chart.ID, strings.ReplaceAll(host, ".", "_"))
		chart.Labels = []module.Label{
			{Key: "host", Value: host},
		}
		for _, dim := range chart.Dims {
			dim.ID = fmt.Sprintf(dim.ID, host)
		}
	}

	return charts
}

func (p *Ping) addHostCharts(host string) {
	charts := newHostCharts(host)

	if err := p.Charts().Add(*charts...); err != nil {
		p.Warning(err)
	}
}