diff --git a/receivers/redfishReceiver.go b/receivers/redfishReceiver.go index 2ebe507..82d3819 100644 --- a/receivers/redfishReceiver.go +++ b/receivers/redfishReceiver.go @@ -79,15 +79,30 @@ func (r *RedfishReceiver) Start() { if err != nil { return fmt.Errorf("readPowerMetric: chassis.Power() failed: %v", err) } + if power == nil { + continue + } // Read min, max and average consumed watts for each power control for _, pc := range power.PowerControl { // Map of collected metrics metrics := map[string]float32{ + // PowerConsumedWatts shall represent the actual power being consumed (in + // Watts) by the chassis + "consumed_watts": pc.PowerConsumedWatts, + // AverageConsumedWatts shall represent the + // average power level that occurred averaged over the last IntervalInMin + // minutes. "average_consumed_watts": pc.PowerMetrics.AverageConsumedWatts, - "min_consumed_watts": pc.PowerMetrics.MinConsumedWatts, - "max_consumed_watts": pc.PowerMetrics.MaxConsumedWatts, + // MinConsumedWatts shall represent the + // minimum power level in watts that occurred within the last + // IntervalInMin minutes. + "min_consumed_watts": pc.PowerMetrics.MinConsumedWatts, + // MaxConsumedWatts shall represent the + // maximum power level in watts that occurred within the last + // IntervalInMin minutes + "max_consumed_watts": pc.PowerMetrics.MaxConsumedWatts, } intervalInMin := strconv.FormatFloat(float64(pc.PowerMetrics.IntervalInMin), 'f', -1, 32) @@ -97,19 +112,46 @@ func (r *RedfishReceiver) Start() { } for name, value := range metrics { - y, err := lp.New( - name, - map[string]string{ - "hostname": *clientConfig.Hostname, - "type": "node", - "power_control_name": pc.Name, - }, - map[string]string{ - "source": r.name, - "group": "Energy", - "interval_in_minutes": intervalInMin, - "unit": "watts", - }, + // Set tags + tags := map[string]string{ + "hostname": *clientConfig.Hostname, + "type": "node", + // ID uniquely identifies the resource + "id": pc.ID, + // MemberID shall uniquely identify the member within the collection. For + // services supporting Redfish v1.6 or higher, this value shall be the + // zero-based array index. + "member_id": pc.MemberID, + // PhysicalContext shall be a description of the affected device(s) or region + // within the chassis to which this power control applies. + "physical_context": string(pc.PhysicalContext), + // Name + "power_control_name": pc.Name, + } + + // Delete empty tags + for key, value := range tags { + if value == "" { + delete(tags, key) + } + } + + // Set meta data tags + meta := map[string]string{ + "source": r.name, + "group": "Energy", + "interval_in_minutes": intervalInMin, + "unit": "watts", + } + + // Delete empty tags + for key, value := range meta { + if value == "" { + delete(meta, key) + } + } + + y, err := lp.New(name, tags, meta, map[string]interface{}{ "value": value, },