master
go 255 lines 6.21 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package chrony
4
5 import (
6 "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
7 )
8
9 const (
10 prioStratum = collectorapi.Priority + iota
11 prioCurrentCorrection
12 prioRootDelay
13 prioRootDispersion
14 prioLastOffset
15 prioRmsOffset
16 prioFrequency
17 prioResidualFrequency
18 prioSkew
19 prioUpdateInterval
20 prioRefMeasurementTime
21 prioLeapStatus
22 prioActivity
23 prioNTPPackets
24 prioCommandPackets
25 )
26
27 var charts = collectorapi.Charts{
28 stratumChart.Copy(),
29
30 currentCorrectionChart.Copy(),
31
32 rootDelayChart.Copy(),
33 rootDispersionChart.Copy(),
34
35 lastOffsetChart.Copy(),
36 rmsOffsetChart.Copy(),
37
38 frequencyChart.Copy(),
39 residualFrequencyChart.Copy(),
40
41 skewChart.Copy(),
42
43 updateIntervalChart.Copy(),
44 refMeasurementTimeChart.Copy(),
45
46 leapStatusChart.Copy(),
47
48 activityChart.Copy(),
49 }
50
51 // Tracking charts
52 var (
53 stratumChart = collectorapi.Chart{
54 ID: "stratum",
55 Title: "Distance to the reference clock",
56 Units: "level",
57 Fam: "stratum",
58 Ctx: "chrony.stratum",
59 Priority: prioStratum,
60 Dims: collectorapi.Dims{
61 {ID: "stratum", Name: "stratum"},
62 },
63 }
64
65 currentCorrectionChart = collectorapi.Chart{
66 ID: "current_correction",
67 Title: "Current correction",
68 Units: "seconds",
69 Fam: "correction",
70 Ctx: "chrony.current_correction",
71 Priority: prioCurrentCorrection,
72 Dims: collectorapi.Dims{
73 {ID: "current_correction", Div: scaleFactor},
74 },
75 }
76
77 rootDelayChart = collectorapi.Chart{
78 ID: "root_delay",
79 Title: "Network path delay to stratum-1",
80 Units: "seconds",
81 Fam: "root",
82 Ctx: "chrony.root_delay",
83 Priority: prioRootDelay,
84 Dims: collectorapi.Dims{
85 {ID: "root_delay", Div: scaleFactor},
86 },
87 }
88 rootDispersionChart = collectorapi.Chart{
89 ID: "root_dispersion",
90 Title: "Dispersion accumulated back to stratum-1",
91 Units: "seconds",
92 Fam: "root",
93 Ctx: "chrony.root_dispersion",
94 Priority: prioRootDispersion,
95 Dims: collectorapi.Dims{
96 {ID: "root_dispersion", Div: scaleFactor},
97 },
98 }
99
100 lastOffsetChart = collectorapi.Chart{
101 ID: "last_offset",
102 Title: "Offset on the last clock update",
103 Units: "seconds",
104 Fam: "offset",
105 Ctx: "chrony.last_offset",
106 Priority: prioLastOffset,
107 Dims: collectorapi.Dims{
108 {ID: "last_offset", Name: "offset", Div: scaleFactor},
109 },
110 }
111 rmsOffsetChart = collectorapi.Chart{
112 ID: "rms_offset",
113 Title: "Long-term average of the offset value",
114 Units: "seconds",
115 Fam: "offset",
116 Ctx: "chrony.rms_offset",
117 Priority: prioRmsOffset,
118 Dims: collectorapi.Dims{
119 {ID: "rms_offset", Name: "offset", Div: scaleFactor},
120 },
121 }
122
123 frequencyChart = collectorapi.Chart{
124 ID: "frequency",
125 Title: "Frequency",
126 Units: "ppm",
127 Fam: "frequency",
128 Ctx: "chrony.frequency",
129 Priority: prioFrequency,
130 Dims: collectorapi.Dims{
131 {ID: "frequency", Div: scaleFactor},
132 },
133 }
134 residualFrequencyChart = collectorapi.Chart{
135 ID: "residual_frequency",
136 Title: "Residual frequency",
137 Units: "ppm",
138 Fam: "frequency",
139 Ctx: "chrony.residual_frequency",
140 Priority: prioResidualFrequency,
141 Dims: collectorapi.Dims{
142 {ID: "residual_frequency", Div: scaleFactor},
143 },
144 }
145
146 skewChart = collectorapi.Chart{
147 ID: "skew",
148 Title: "Skew",
149 Units: "ppm",
150 Fam: "frequency",
151 Ctx: "chrony.skew",
152 Priority: prioSkew,
153 Dims: collectorapi.Dims{
154 {ID: "skew", Div: scaleFactor},
155 },
156 }
157
158 updateIntervalChart = collectorapi.Chart{
159 ID: "update_interval",
160 Title: "Interval between the last two clock updates",
161 Units: "seconds",
162 Fam: "updates",
163 Ctx: "chrony.update_interval",
164 Priority: prioUpdateInterval,
165 Dims: collectorapi.Dims{
166 {ID: "update_interval", Div: scaleFactor},
167 },
168 }
169 refMeasurementTimeChart = collectorapi.Chart{
170 ID: "ref_measurement_time",
171 Title: "Time since the last measurement",
172 Units: "seconds",
173 Fam: "updates",
174 Ctx: "chrony.ref_measurement_time",
175 Priority: prioRefMeasurementTime,
176 Dims: collectorapi.Dims{
177 {ID: "ref_measurement_time"},
178 },
179 }
180
181 leapStatusChart = collectorapi.Chart{
182 ID: "leap_status",
183 Title: "Leap status",
184 Units: "status",
185 Fam: "leap status",
186 Ctx: "chrony.leap_status",
187 Priority: prioLeapStatus,
188 Dims: collectorapi.Dims{
189 {ID: "leap_status_normal", Name: "normal"},
190 {ID: "leap_status_insert_second", Name: "insert_second"},
191 {ID: "leap_status_delete_second", Name: "delete_second"},
192 {ID: "leap_status_unsynchronised", Name: "unsynchronised"},
193 },
194 }
195 )
196
197 // Activity charts
198 var (
199 activityChart = collectorapi.Chart{
200 ID: "activity",
201 Title: "Peers activity",
202 Units: "sources",
203 Fam: "activity",
204 Ctx: "chrony.activity",
205 Type: collectorapi.Stacked,
206 Priority: prioActivity,
207 Dims: collectorapi.Dims{
208 {ID: "online_sources", Name: "online"},
209 {ID: "offline_sources", Name: "offline"},
210 {ID: "burst_online_sources", Name: "burst_online"},
211 {ID: "burst_offline_sources", Name: "burst_offline"},
212 {ID: "unresolved_sources", Name: "unresolved"},
213 },
214 }
215 )
216
217 var serverStatsCharts = collectorapi.Charts{
218 ntpPacketsChart.Copy(),
219 commandPacketsChart.Copy(),
220 }
221
222 var (
223 ntpPacketsChart = collectorapi.Chart{
224 ID: "ntp_packets",
225 Title: "NTP packets",
226 Units: "packets/s",
227 Fam: "client requests",
228 Ctx: "chrony.ntp_packets",
229 Type: collectorapi.Line,
230 Priority: prioNTPPackets,
231 Dims: collectorapi.Dims{
232 {ID: "ntp_packets_received", Name: "received", Algo: collectorapi.Incremental},
233 {ID: "ntp_packets_dropped", Name: "dropped", Algo: collectorapi.Incremental},
234 },
235 }
236 commandPacketsChart = collectorapi.Chart{
237 ID: "command_packets",
238 Title: "Command packets",
239 Units: "packets/s",
240 Fam: "client requests",
241 Ctx: "chrony.command_packets",
242 Type: collectorapi.Line,
243 Priority: prioCommandPackets,
244 Dims: collectorapi.Dims{
245 {ID: "command_packets_received", Name: "received", Algo: collectorapi.Incremental},
246 {ID: "command_packets_dropped", Name: "dropped", Algo: collectorapi.Incremental},
247 },
248 }
249 )
250
251 func (c *Collector) addServerStatsCharts() {
252 if err := c.Charts().Add(*serverStatsCharts.Copy()...); err != nil {
253 c.Warning(err)
254 }
255 }