diff options
Diffstat (limited to '')
-rw-r--r-- | src/go/plugin/go.d/modules/ntpd/charts.go | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/src/go/plugin/go.d/modules/ntpd/charts.go b/src/go/plugin/go.d/modules/ntpd/charts.go new file mode 100644 index 000000000..95baea471 --- /dev/null +++ b/src/go/plugin/go.d/modules/ntpd/charts.go @@ -0,0 +1,346 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package ntpd + +import ( + "fmt" + "strings" + + "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" +) + +const ( + prioSystemOffset = module.Priority + iota + prioSystemJitter + prioSystemFrequency + prioSystemWander + prioSystemRootDelay + prioSystemRootDispersion + prioSystemStratum + prioSystemTimeConstant + prioSystemPrecision + + prioPeerOffset + prioPeerDelay + prioPeerDispersion + prioPeerJitter + prioPeerXleave + prioPeerRootDelay + prioPeerRootDispersion + prioPeerStratum + prioPeerHostMode + prioPeerPeerMode + prioPeerHostPoll + prioPeerPeerPoll + prioPeerPrecision +) + +var ( + systemCharts = module.Charts{ + systemOffsetChart.Copy(), + systemJitterChart.Copy(), + systemFrequencyChart.Copy(), + systemWanderChart.Copy(), + systemRootDelayChart.Copy(), + systemRootDispersionChart.Copy(), + systemStratumChart.Copy(), + systemTimeConstantChart.Copy(), + systemPrecisionChart.Copy(), + } + systemOffsetChart = module.Chart{ + ID: "sys_offset", + Title: "Combined offset of server relative to this host", + Units: "milliseconds", + Fam: "system", + Ctx: "ntpd.sys_offset", + Type: module.Area, + Priority: prioSystemOffset, + Dims: module.Dims{ + {ID: "offset", Name: "offset", Div: precision}, + }, + } + systemJitterChart = module.Chart{ + ID: "sys_jitter", + Title: "Combined system jitter and clock jitter", + Units: "milliseconds", + Fam: "system", + Ctx: "ntpd.sys_jitter", + Priority: prioSystemJitter, + Dims: module.Dims{ + {ID: "sys_jitter", Name: "system", Div: precision}, + {ID: "clk_jitter", Name: "clock", Div: precision}, + }, + } + systemFrequencyChart = module.Chart{ + ID: "sys_frequency", + Title: "Frequency offset relative to hardware clock", + Units: "ppm", + Fam: "system", + Ctx: "ntpd.sys_frequency", + Type: module.Area, + Priority: prioSystemFrequency, + Dims: module.Dims{ + {ID: "frequency", Name: "frequency", Div: precision}, + }, + } + systemWanderChart = module.Chart{ + ID: "sys_wander", + Title: "Clock frequency wander", + Units: "ppm", + Fam: "system", + Ctx: "ntpd.sys_wander", + Type: module.Area, + Priority: prioSystemWander, + Dims: module.Dims{ + {ID: "clk_wander", Name: "clock", Div: precision}, + }, + } + systemRootDelayChart = module.Chart{ + ID: "sys_rootdelay", + Title: "Total roundtrip delay to the primary reference clock", + Units: "milliseconds", + Fam: "system", + Ctx: "ntpd.sys_rootdelay", + Type: module.Area, + Priority: prioSystemRootDelay, + Dims: module.Dims{ + {ID: "rootdelay", Name: "delay", Div: precision}, + }, + } + systemRootDispersionChart = module.Chart{ + ID: "sys_rootdisp", + Title: "Total root dispersion to the primary reference clock", + Units: "milliseconds", + Fam: "system", + Ctx: "ntpd.sys_rootdisp", + Type: module.Area, + Priority: prioSystemRootDispersion, + Dims: module.Dims{ + {ID: "rootdisp", Name: "dispersion", Div: precision}, + }, + } + systemStratumChart = module.Chart{ + ID: "sys_stratum", + Title: "Stratum", + Units: "stratum", + Fam: "system", + Ctx: "ntpd.sys_stratum", + Priority: prioSystemStratum, + Dims: module.Dims{ + {ID: "stratum", Name: "stratum", Div: precision}, + }, + } + systemTimeConstantChart = module.Chart{ + ID: "sys_tc", + Title: "Time constant and poll exponent", + Units: "log2", + Fam: "system", + Ctx: "ntpd.sys_tc", + Priority: prioSystemTimeConstant, + Dims: module.Dims{ + {ID: "tc", Name: "current", Div: precision}, + {ID: "mintc", Name: "minimum", Div: precision}, + }, + } + systemPrecisionChart = module.Chart{ + ID: "sys_precision", + Title: "Precision", + Units: "log2", + Fam: "system", + Ctx: "ntpd.sys_precision", + Priority: prioSystemPrecision, + Dims: module.Dims{ + {ID: "precision", Name: "precision", Div: precision}, + }, + } +) + +var ( + peerChartsTmpl = module.Charts{ + peerOffsetChartTmpl.Copy(), + peerDelayChartTmpl.Copy(), + peerDispersionChartTmpl.Copy(), + peerJitterChartTmpl.Copy(), + peerXleaveChartTmpl.Copy(), + peerRootDelayChartTmpl.Copy(), + peerRootDispersionChartTmpl.Copy(), + peerStratumChartTmpl.Copy(), + peerHostModeChartTmpl.Copy(), + peerPeerModeChartTmpl.Copy(), + peerHostPollChartTmpl.Copy(), + peerPeerPollChartTmpl.Copy(), + peerPrecisionChartTmpl.Copy(), + } + peerOffsetChartTmpl = module.Chart{ + ID: "peer_%s_offset", + Title: "Peer offset", + Units: "milliseconds", + Fam: "peers", + Ctx: "ntpd.peer_offset", + Priority: prioPeerOffset, + Dims: module.Dims{ + {ID: "peer_%s_offset", Name: "offset", Div: precision}, + }, + } + peerDelayChartTmpl = module.Chart{ + ID: "peer_%s_delay", + Title: "Peer delay", + Units: "milliseconds", + Fam: "peers", + Ctx: "ntpd.peer_delay", + Priority: prioPeerDelay, + Dims: module.Dims{ + {ID: "peer_%s_delay", Name: "delay", Div: precision}, + }, + } + peerDispersionChartTmpl = module.Chart{ + ID: "peer_%s_dispersion", + Title: "Peer dispersion", + Units: "milliseconds", + Fam: "peers", + Ctx: "ntpd.peer_dispersion", + Priority: prioPeerDispersion, + Dims: module.Dims{ + {ID: "peer_%s_dispersion", Name: "dispersion", Div: precision}, + }, + } + peerJitterChartTmpl = module.Chart{ + ID: "peer_%s_jitter", + Title: "Peer jitter", + Units: "milliseconds", + Fam: "peers", + Ctx: "ntpd.peer_jitter", + Priority: prioPeerJitter, + Dims: module.Dims{ + {ID: "peer_%s_jitter", Name: "jitter", Div: precision}, + }, + } + peerXleaveChartTmpl = module.Chart{ + ID: "peer_%s_xleave", + Title: "Peer interleave delay", + Units: "milliseconds", + Fam: "peers", + Ctx: "ntpd.peer_xleave", + Priority: prioPeerXleave, + Dims: module.Dims{ + {ID: "peer_%s_xleave", Name: "xleave", Div: precision}, + }, + } + peerRootDelayChartTmpl = module.Chart{ + ID: "peer_%s_rootdelay", + Title: "Peer roundtrip delay to the primary reference clock", + Units: "milliseconds", + Fam: "peers", + Ctx: "ntpd.peer_rootdelay", + Priority: prioPeerRootDelay, + Dims: module.Dims{ + {ID: "peer_%s_rootdelay", Name: "rootdelay", Div: precision}, + }, + } + peerRootDispersionChartTmpl = module.Chart{ + ID: "peer_%s_rootdisp", + Title: "Peer root dispersion to the primary reference clock", + Units: "milliseconds", + Fam: "peers", + Ctx: "ntpd.peer_rootdisp", + Priority: prioPeerRootDispersion, + Dims: module.Dims{ + {ID: "peer_%s_rootdisp", Name: "dispersion", Div: precision}, + }, + } + peerStratumChartTmpl = module.Chart{ + ID: "peer_%s_stratum", + Title: "Peer stratum", + Units: "stratum", + Fam: "peers", + Ctx: "ntpd.peer_stratum", + Priority: prioPeerStratum, + Dims: module.Dims{ + {ID: "peer_%s_stratum", Name: "stratum", Div: precision}, + }, + } + peerHostModeChartTmpl = module.Chart{ + ID: "peer_%s_hmode", + Title: "Peer host mode", + Units: "hmode", + Fam: "peers", + Ctx: "ntpd.peer_hmode", + Priority: prioPeerHostMode, + Dims: module.Dims{ + {ID: "peer_%s_hmode", Name: "hmode", Div: precision}, + }, + } + peerPeerModeChartTmpl = module.Chart{ + ID: "peer_%s_pmode", + Title: "Peer mode", + Units: "pmode", + Fam: "peers", + Ctx: "ntpd.peer_pmode", + Priority: prioPeerPeerMode, + Dims: module.Dims{ + {ID: "peer_%s_pmode", Name: "pmode", Div: precision}, + }, + } + peerHostPollChartTmpl = module.Chart{ + ID: "peer_%s_hpoll", + Title: "Peer host poll exponent", + Units: "log2", + Fam: "peers", + Ctx: "ntpd.peer_hpoll", + Priority: prioPeerHostPoll, + Dims: module.Dims{ + {ID: "peer_%s_hpoll", Name: "hpoll", Div: precision}, + }, + } + peerPeerPollChartTmpl = module.Chart{ + ID: "peer_%s_ppoll", + Title: "Peer poll exponent", + Units: "log2", + Fam: "peers", + Ctx: "ntpd.peer_ppoll", + Priority: prioPeerPeerPoll, + Dims: module.Dims{ + {ID: "peer_%s_ppoll", Name: "hpoll", Div: precision}, + }, + } + peerPrecisionChartTmpl = module.Chart{ + ID: "peer_%s_precision", + Title: "Peer precision", + Units: "log2", + Fam: "peers", + Ctx: "ntpd.peer_precision", + Priority: prioPeerPrecision, + Dims: module.Dims{ + {ID: "peer_%s_precision", Name: "precision", Div: precision}, + }, + } +) + +func (n *NTPd) addPeerCharts(addr string) { + charts := peerChartsTmpl.Copy() + + for _, chart := range *charts { + chart.ID = fmt.Sprintf(chart.ID, strings.ReplaceAll(addr, ".", "_")) + chart.Labels = []module.Label{ + {Key: "peer_address", Value: addr}, + } + for _, dim := range chart.Dims { + dim.ID = fmt.Sprintf(dim.ID, addr) + } + } + + if err := n.Charts().Add(*charts...); err != nil { + n.Warning(err) + } +} + +func (n *NTPd) removePeerCharts(addr string) { + px := fmt.Sprintf("peer_%s", strings.ReplaceAll(addr, ".", "_")) + + for _, chart := range *n.Charts() { + if strings.HasPrefix(chart.ID, px) { + chart.MarkRemove() + chart.MarkNotCreated() + } + } +} |