Skip to content

Commit

Permalink
Merge pull request #3 from treydock/info
Browse files Browse the repository at this point in the history
Add info metrics, move switch/hca label to info metric
  • Loading branch information
treydock authored Apr 26, 2021
2 parents 278cba2 + 26cfb40 commit c45493f
Show file tree
Hide file tree
Showing 5 changed files with 586 additions and 445 deletions.
77 changes: 48 additions & 29 deletions collectors/hca.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,13 @@ type HCACollector struct {
PortDLIDMappingErrors *prometheus.Desc
PortVLMappingErrors *prometheus.Desc
PortLoopingErrors *prometheus.Desc
Rate *prometheus.Desc
Uplink *prometheus.Desc
Info *prometheus.Desc
}

func NewHCACollector(devices *[]InfinibandDevice, logger log.Logger) *HCACollector {
labels := []string{"guid", "port", "hca"}
labels := []string{"guid", "port"}
return &HCACollector{
devices: devices,
logger: log.With(logger, "collector", "hca"),
Expand Down Expand Up @@ -125,6 +128,12 @@ func NewHCACollector(devices *[]InfinibandDevice, logger log.Logger) *HCACollect
"Infiniband HCA port PortVLMappingErrors", labels, nil),
PortLoopingErrors: prometheus.NewDesc(prometheus.BuildFQName(namespace, "hca", "port_looping_errors_total"),
"Infiniband HCA port PortLoopingErrors", labels, nil),
Rate: prometheus.NewDesc(prometheus.BuildFQName(namespace, "hca", "rate_bytes_per_second"),
"Infiniband HCA rate", []string{"guid"}, nil),
Uplink: prometheus.NewDesc(prometheus.BuildFQName(namespace, "hca", "uplink_info"),
"Infiniband HCA uplink information", append(labels, []string{"hca", "uplink", "uplink_guid", "uplink_type", "uplink_port", "uplink_lid"}...), nil),
Info: prometheus.NewDesc(prometheus.BuildFQName(namespace, "hca", "info"),
"Infiniband HCA information", []string{"guid", "hca", "lid"}, nil),
}
}

Expand Down Expand Up @@ -157,95 +166,105 @@ func (h *HCACollector) Describe(ch chan<- *prometheus.Desc) {
ch <- h.PortDLIDMappingErrors
ch <- h.PortVLMappingErrors
ch <- h.PortLoopingErrors
ch <- h.Rate
ch <- h.Uplink
ch <- h.Info
}

func (h *HCACollector) Collect(ch chan<- prometheus.Metric) {
collectTime := time.Now()
counters, errors, timeouts := h.collect()
for _, c := range counters {
if !math.IsNaN(c.PortXmitData) {
ch <- prometheus.MustNewConstMetric(h.PortXmitData, prometheus.CounterValue, c.PortXmitData, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortXmitData, prometheus.CounterValue, c.PortXmitData, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortRcvData) {
ch <- prometheus.MustNewConstMetric(h.PortRcvData, prometheus.CounterValue, c.PortRcvData, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortRcvData, prometheus.CounterValue, c.PortRcvData, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortXmitPkts) {
ch <- prometheus.MustNewConstMetric(h.PortXmitPkts, prometheus.CounterValue, c.PortXmitPkts, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortXmitPkts, prometheus.CounterValue, c.PortXmitPkts, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortRcvPkts) {
ch <- prometheus.MustNewConstMetric(h.PortRcvPkts, prometheus.CounterValue, c.PortRcvPkts, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortRcvPkts, prometheus.CounterValue, c.PortRcvPkts, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortUnicastXmitPkts) {
ch <- prometheus.MustNewConstMetric(h.PortUnicastXmitPkts, prometheus.CounterValue, c.PortUnicastXmitPkts, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortUnicastXmitPkts, prometheus.CounterValue, c.PortUnicastXmitPkts, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortUnicastRcvPkts) {
ch <- prometheus.MustNewConstMetric(h.PortUnicastRcvPkts, prometheus.CounterValue, c.PortUnicastRcvPkts, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortUnicastRcvPkts, prometheus.CounterValue, c.PortUnicastRcvPkts, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortMulticastXmitPkts) {
ch <- prometheus.MustNewConstMetric(h.PortMulticastXmitPkts, prometheus.CounterValue, c.PortMulticastXmitPkts, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortMulticastXmitPkts, prometheus.CounterValue, c.PortMulticastXmitPkts, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortMulticastRcvPkts) {
ch <- prometheus.MustNewConstMetric(h.PortMulticastRcvPkts, prometheus.CounterValue, c.PortMulticastRcvPkts, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortMulticastRcvPkts, prometheus.CounterValue, c.PortMulticastRcvPkts, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.SymbolErrorCounter) {
ch <- prometheus.MustNewConstMetric(h.SymbolErrorCounter, prometheus.CounterValue, c.SymbolErrorCounter, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.SymbolErrorCounter, prometheus.CounterValue, c.SymbolErrorCounter, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.LinkErrorRecoveryCounter) {
ch <- prometheus.MustNewConstMetric(h.LinkErrorRecoveryCounter, prometheus.CounterValue, c.LinkErrorRecoveryCounter, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.LinkErrorRecoveryCounter, prometheus.CounterValue, c.LinkErrorRecoveryCounter, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.LinkDownedCounter) {
ch <- prometheus.MustNewConstMetric(h.LinkDownedCounter, prometheus.CounterValue, c.LinkDownedCounter, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.LinkDownedCounter, prometheus.CounterValue, c.LinkDownedCounter, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortRcvErrors) {
ch <- prometheus.MustNewConstMetric(h.PortRcvErrors, prometheus.CounterValue, c.PortRcvErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortRcvErrors, prometheus.CounterValue, c.PortRcvErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortRcvRemotePhysicalErrors) {
ch <- prometheus.MustNewConstMetric(h.PortRcvRemotePhysicalErrors, prometheus.CounterValue, c.PortRcvRemotePhysicalErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortRcvRemotePhysicalErrors, prometheus.CounterValue, c.PortRcvRemotePhysicalErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortRcvSwitchRelayErrors) {
ch <- prometheus.MustNewConstMetric(h.PortRcvSwitchRelayErrors, prometheus.CounterValue, c.PortRcvSwitchRelayErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortRcvSwitchRelayErrors, prometheus.CounterValue, c.PortRcvSwitchRelayErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortXmitDiscards) {
ch <- prometheus.MustNewConstMetric(h.PortXmitDiscards, prometheus.CounterValue, c.PortXmitDiscards, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortXmitDiscards, prometheus.CounterValue, c.PortXmitDiscards, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortXmitConstraintErrors) {
ch <- prometheus.MustNewConstMetric(h.PortXmitConstraintErrors, prometheus.CounterValue, c.PortXmitConstraintErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortXmitConstraintErrors, prometheus.CounterValue, c.PortXmitConstraintErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortRcvConstraintErrors) {
ch <- prometheus.MustNewConstMetric(h.PortRcvConstraintErrors, prometheus.CounterValue, c.PortRcvConstraintErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortRcvConstraintErrors, prometheus.CounterValue, c.PortRcvConstraintErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.LocalLinkIntegrityErrors) {
ch <- prometheus.MustNewConstMetric(h.LocalLinkIntegrityErrors, prometheus.CounterValue, c.LocalLinkIntegrityErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.LocalLinkIntegrityErrors, prometheus.CounterValue, c.LocalLinkIntegrityErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.ExcessiveBufferOverrunErrors) {
ch <- prometheus.MustNewConstMetric(h.ExcessiveBufferOverrunErrors, prometheus.CounterValue, c.ExcessiveBufferOverrunErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.ExcessiveBufferOverrunErrors, prometheus.CounterValue, c.ExcessiveBufferOverrunErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.VL15Dropped) {
ch <- prometheus.MustNewConstMetric(h.VL15Dropped, prometheus.CounterValue, c.VL15Dropped, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.VL15Dropped, prometheus.CounterValue, c.VL15Dropped, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortXmitWait) {
ch <- prometheus.MustNewConstMetric(h.PortXmitWait, prometheus.CounterValue, c.PortXmitWait, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortXmitWait, prometheus.CounterValue, c.PortXmitWait, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.QP1Dropped) {
ch <- prometheus.MustNewConstMetric(h.QP1Dropped, prometheus.CounterValue, c.QP1Dropped, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.QP1Dropped, prometheus.CounterValue, c.QP1Dropped, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortLocalPhysicalErrors) {
ch <- prometheus.MustNewConstMetric(h.PortLocalPhysicalErrors, prometheus.CounterValue, c.PortLocalPhysicalErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortLocalPhysicalErrors, prometheus.CounterValue, c.PortLocalPhysicalErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortMalformedPktErrors) {
ch <- prometheus.MustNewConstMetric(h.PortMalformedPktErrors, prometheus.CounterValue, c.PortMalformedPktErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortMalformedPktErrors, prometheus.CounterValue, c.PortMalformedPktErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortBufferOverrunErrors) {
ch <- prometheus.MustNewConstMetric(h.PortBufferOverrunErrors, prometheus.CounterValue, c.PortBufferOverrunErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortBufferOverrunErrors, prometheus.CounterValue, c.PortBufferOverrunErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortDLIDMappingErrors) {
ch <- prometheus.MustNewConstMetric(h.PortDLIDMappingErrors, prometheus.CounterValue, c.PortDLIDMappingErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortDLIDMappingErrors, prometheus.CounterValue, c.PortDLIDMappingErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortVLMappingErrors) {
ch <- prometheus.MustNewConstMetric(h.PortVLMappingErrors, prometheus.CounterValue, c.PortVLMappingErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortVLMappingErrors, prometheus.CounterValue, c.PortVLMappingErrors, c.device.GUID, c.PortSelect)
}
if !math.IsNaN(c.PortLoopingErrors) {
ch <- prometheus.MustNewConstMetric(h.PortLoopingErrors, prometheus.CounterValue, c.PortLoopingErrors, c.device.GUID, c.PortSelect, c.device.Name)
ch <- prometheus.MustNewConstMetric(h.PortLoopingErrors, prometheus.CounterValue, c.PortLoopingErrors, c.device.GUID, c.PortSelect)
}
}
for _, device := range *h.devices {
ch <- prometheus.MustNewConstMetric(h.Rate, prometheus.GaugeValue, device.Rate, device.GUID)
ch <- prometheus.MustNewConstMetric(h.Info, prometheus.GaugeValue, 1, device.GUID, device.Name, device.LID)
for port, uplink := range device.Uplinks {
ch <- prometheus.MustNewConstMetric(h.Uplink, prometheus.GaugeValue, 1, device.GUID, port, device.Name, uplink.Name, uplink.GUID, uplink.Type, uplink.PortNumber, uplink.LID)
}
}
ch <- prometheus.MustNewConstMetric(collectErrors, prometheus.GaugeValue, errors, "hca")
Expand Down
Loading

0 comments on commit c45493f

Please sign in to comment.