diff --git a/collector/collector.go b/collector/collector.go index 95a90f7..a18bd74 100644 --- a/collector/collector.go +++ b/collector/collector.go @@ -17,10 +17,22 @@ var ( uidDesc *prometheus.Desc defaultPasswordDesc *prometheus.Desc - centralFrequencyDesc *prometheus.Desc - powerDesc *prometheus.Desc - snrDesc *prometheus.Desc - lockedDesc *prometheus.Desc + centralFrequencyDownstreamDesc *prometheus.Desc + powerDownstreamDesc *prometheus.Desc + snrDownstreamDesc *prometheus.Desc + lockedDownstreamDesc *prometheus.Desc + + startFrequencyOfdmDownstreamDesc *prometheus.Desc + endFrequencyOfdmDownstreamDesc *prometheus.Desc + centralFrequencyOfdmDownstreamDesc *prometheus.Desc + bandwidthOfdmDownstreamDesc *prometheus.Desc + powerOfdmDownstreamDesc *prometheus.Desc + snrOfdmDownstreamDesc *prometheus.Desc + lockedOfdmDownstreamDesc *prometheus.Desc + + centralFrequencyUpstreamDesc *prometheus.Desc + powerUpstreamDesc *prometheus.Desc + rangingStatusUpstreamDesc *prometheus.Desc logoutSuccessDesc *prometheus.Desc logoutMessageDesc *prometheus.Desc @@ -35,11 +47,25 @@ func init() { uidDesc = prometheus.NewDesc(prefix+"uid_info", "User id as returned by the web interface", []string{"uid"}, nil) defaultPasswordDesc = prometheus.NewDesc(prefix+"default_password_bool", "1 if the default password is in use", nil, nil) - channelLabels := []string{"id", "channel_id", "fft", "channel_type"} - centralFrequencyDesc = prometheus.NewDesc(prefix+"central_frequency_hertz", "Central frequency in hertz", channelLabels, nil) - powerDesc = prometheus.NewDesc(prefix+"power_dBmV", "Power in dBmV", channelLabels, nil) - snrDesc = prometheus.NewDesc(prefix+"snr_dB", "SNR in dB", channelLabels, nil) - lockedDesc = prometheus.NewDesc(prefix+"locked_bool", "Locking status", channelLabels, nil) + downstreamChannelLabels := []string{"id", "channel_id", "fft", "channel_type"} + centralFrequencyDownstreamDesc = prometheus.NewDesc(prefix+"downstream_central_frequency_hertz", "Central frequency in hertz", downstreamChannelLabels, nil) + powerDownstreamDesc = prometheus.NewDesc(prefix+"downstream_power_dBmV", "Power in dBmV", downstreamChannelLabels, nil) + snrDownstreamDesc = prometheus.NewDesc(prefix+"downstream_snr_dB", "SNR in dB", downstreamChannelLabels, nil) + lockedDownstreamDesc = prometheus.NewDesc(prefix+"downstream_locked_bool", "Locking status", downstreamChannelLabels, nil) + + ofdmDownstreamChannelLabels := []string{"id", "channel_id_ofdm", "fft", "channel_type"} + startFrequencyOfdmDownstreamDesc = prometheus.NewDesc(prefix+"ofdm_downstream_start_frequency_hertz", "Start frequency", ofdmDownstreamChannelLabels, nil) + endFrequencyOfdmDownstreamDesc = prometheus.NewDesc(prefix+"ofdm_downstream_end_frequency_hertz", "End frequency", ofdmDownstreamChannelLabels, nil) + centralFrequencyOfdmDownstreamDesc = prometheus.NewDesc(prefix+"ofdm_downstream_central_frequency_hertz", "Central frequency", ofdmDownstreamChannelLabels, nil) + bandwidthOfdmDownstreamDesc = prometheus.NewDesc(prefix+"ofdm_downstream_bandwidth_hertz", "Bandwidth", ofdmDownstreamChannelLabels, nil) + powerOfdmDownstreamDesc = prometheus.NewDesc(prefix+"ofdm_downstream_power_dBmV", "Power", ofdmDownstreamChannelLabels, nil) + snrOfdmDownstreamDesc = prometheus.NewDesc(prefix+"ofdm_downstream_snr_dB", "SNR", ofdmDownstreamChannelLabels, nil) + lockedOfdmDownstreamDesc = prometheus.NewDesc(prefix+"ofdm_downstream_locked_bool", "Locking status", ofdmDownstreamChannelLabels, nil) + + upstreamLabels := []string{"id", "channel_id_up", "fft", "channel_type"} + centralFrequencyUpstreamDesc = prometheus.NewDesc(prefix+"upstream_central_frequency_hertz", "Central frequency", upstreamLabels, nil) + powerUpstreamDesc = prometheus.NewDesc(prefix+"upstream_power_dBmV", "Power", upstreamLabels, nil) + rangingStatusUpstreamDesc = prometheus.NewDesc(prefix+"upstream_ranging_status_info", "Ranging status", append(upstreamLabels, "status"), nil) logoutSuccessDesc = prometheus.NewDesc(prefix+"logout_success_bool", "1 if the logout was successfull", nil, nil) logoutMessageDesc = prometheus.NewDesc(prefix+"logout_message_info", "Logout message returned by the web interface", []string{"message"}, nil) @@ -52,10 +78,24 @@ func (c *Collector) Describe(ch chan<- *prometheus.Desc) { ch <- userDesc ch <- uidDesc ch <- defaultPasswordDesc - ch <- centralFrequencyDesc - ch <- powerDesc - ch <- snrDesc - ch <- snrDesc + + ch <- centralFrequencyDownstreamDesc + ch <- powerDownstreamDesc + ch <- snrDownstreamDesc + ch <- snrDownstreamDesc + + ch <- startFrequencyOfdmDownstreamDesc + ch <- endFrequencyOfdmDownstreamDesc + ch <- centralFrequencyOfdmDownstreamDesc + ch <- bandwidthOfdmDownstreamDesc + ch <- powerOfdmDownstreamDesc + ch <- snrOfdmDownstreamDesc + ch <- lockedOfdmDownstreamDesc + + ch <- centralFrequencyUpstreamDesc + ch <- powerUpstreamDesc + ch <- rangingStatusUpstreamDesc + ch <- logoutSuccessDesc ch <- logoutMessageDesc } @@ -80,10 +120,26 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) { if err == nil && docsisStatusResponse.Data != nil { for _, downstreamChannel := range docsisStatusResponse.Data.Downstream { labels := []string{downstreamChannel.Id, downstreamChannel.ChannelId, downstreamChannel.Fft, downstreamChannel.ChannelType} - ch <- prometheus.MustNewConstMetric(centralFrequencyDesc, prometheus.GaugeValue, parse2float(downstreamChannel.CentralFrequency), labels...) - ch <- prometheus.MustNewConstMetric(powerDesc, prometheus.GaugeValue, parse2float(downstreamChannel.Power), labels...) - ch <- prometheus.MustNewConstMetric(snrDesc, prometheus.GaugeValue, parse2float(downstreamChannel.Snr), labels...) - ch <- prometheus.MustNewConstMetric(lockedDesc, prometheus.GaugeValue, bool2float64(downstreamChannel.Locked == "Locked"), labels...) + ch <- prometheus.MustNewConstMetric(centralFrequencyDownstreamDesc, prometheus.GaugeValue, parse2float(downstreamChannel.CentralFrequency)*10e9, labels...) + ch <- prometheus.MustNewConstMetric(powerDownstreamDesc, prometheus.GaugeValue, parse2float(downstreamChannel.Power), labels...) + ch <- prometheus.MustNewConstMetric(snrDownstreamDesc, prometheus.GaugeValue, parse2float(downstreamChannel.Snr), labels...) + ch <- prometheus.MustNewConstMetric(lockedDownstreamDesc, prometheus.GaugeValue, bool2float64(downstreamChannel.Locked == "Locked"), labels...) + } + for _, ofdmDownstreamChannel := range docsisStatusResponse.Data.OfdmDownstreamData { + labels := []string{ofdmDownstreamChannel.Id, ofdmDownstreamChannel.ChannelIdOfdm, ofdmDownstreamChannel.FftOfdm, ofdmDownstreamChannel.ChannelType} + ch <- prometheus.MustNewConstMetric(startFrequencyOfdmDownstreamDesc, prometheus.GaugeValue, parse2float(ofdmDownstreamChannel.StartFrequency)*10e9, labels...) + ch <- prometheus.MustNewConstMetric(endFrequencyOfdmDownstreamDesc, prometheus.GaugeValue, parse2float(ofdmDownstreamChannel.EndFrequency)*10e9, labels...) + ch <- prometheus.MustNewConstMetric(centralFrequencyOfdmDownstreamDesc, prometheus.GaugeValue, parse2float(ofdmDownstreamChannel.CentralFrequencyOfdm)*10e9, labels...) + ch <- prometheus.MustNewConstMetric(bandwidthOfdmDownstreamDesc, prometheus.GaugeValue, parse2float(ofdmDownstreamChannel.Bandwidth)*10e9, labels...) + ch <- prometheus.MustNewConstMetric(powerOfdmDownstreamDesc, prometheus.GaugeValue, parse2float(ofdmDownstreamChannel.PowerOfdm), labels...) + ch <- prometheus.MustNewConstMetric(snrOfdmDownstreamDesc, prometheus.GaugeValue, parse2float(ofdmDownstreamChannel.SnrOfdm), labels...) + ch <- prometheus.MustNewConstMetric(lockedOfdmDownstreamDesc, prometheus.GaugeValue, bool2float64(ofdmDownstreamChannel.LockedOfdm == "Locked"), labels...) + } + for _, upstreamChannel := range docsisStatusResponse.Data.Upstream { + labels := []string{upstreamChannel.Id, upstreamChannel.ChannelIdUp, upstreamChannel.Fft, upstreamChannel.ChannelType} + ch <- prometheus.MustNewConstMetric(centralFrequencyUpstreamDesc, prometheus.GaugeValue, parse2float(upstreamChannel.CentralFrequency)*10e9, labels...) + ch <- prometheus.MustNewConstMetric(powerUpstreamDesc, prometheus.GaugeValue, parse2float(upstreamChannel.Power), labels...) + ch <- prometheus.MustNewConstMetric(rangingStatusUpstreamDesc, prometheus.GaugeValue, 1, append(labels, upstreamChannel.RangingStatus)...) } }