export: merge inspur psu sensor groups

This commit is contained in:
Mikhail Chusavitin
2026-03-15 23:29:44 +03:00
parent 476630190d
commit f11a43f690
2 changed files with 42 additions and 1 deletions

View File

@@ -1071,11 +1071,18 @@ func convertSensors(sensors []models.SensorReading) *ReanimatorSensors {
func groupedPowerSensorName(name string) string {
trimmed := strings.TrimSpace(name)
lower := strings.ToLower(trimmed)
for _, suffix := range []string{"_inputpower", "_inputvoltage", "_inputcurrent"} {
inputSuffixes := []string{"_inputpower", "_inputvoltage", "_inputcurrent", "_pin", "_vin", "_iin"}
for _, suffix := range inputSuffixes {
if strings.HasSuffix(lower, suffix) {
return strings.TrimSpace(trimmed[:len(trimmed)-len(suffix)])
}
}
outputSuffixes := []string{"_outputpower", "_outputvoltage", "_outputcurrent", "_pout", "_vout", "_iout"}
for _, suffix := range outputSuffixes {
if strings.HasSuffix(lower, suffix) {
return strings.TrimSpace(trimmed[:len(trimmed)-len(suffix)]) + "_Output"
}
}
return trimmed
}

View File

@@ -1421,6 +1421,40 @@ func TestConvertToReanimator_MergesSiblingPowerSensors(t *testing.T) {
}
}
func TestConvertToReanimator_MergesInspurPSUInputAndOutputSensors(t *testing.T) {
input := &models.AnalysisResult{
Hardware: &models.HardwareConfig{
BoardInfo: models.BoardInfo{SerialNumber: "BOARD-123"},
},
Sensors: []models.SensorReading{
{Name: "PSU0_VIN", Type: "voltage", Value: 224, Unit: "V", Status: "OK"},
{Name: "PSU0_PIN", Type: "power", Value: 120, Unit: "W", Status: "OK"},
{Name: "PSU0_VOUT", Type: "voltage", Value: 12, Unit: "V", Status: "OK"},
{Name: "PSU0_POUT", Type: "power", Value: 88, Unit: "W", Status: "OK"},
{Name: "PSU0_OutputPower", Type: "power", Value: 95, Unit: "W", Status: "OK"},
},
}
out, err := ConvertToReanimator(input)
if err != nil {
t.Fatalf("ConvertToReanimator() failed: %v", err)
}
if out.Hardware.Sensors == nil || len(out.Hardware.Sensors.Power) != 2 {
t.Fatalf("expected 2 grouped PSU power sensors, got %#v", out.Hardware.Sensors)
}
byName := map[string]ReanimatorPowerSensor{}
for _, item := range out.Hardware.Sensors.Power {
byName[item.Name] = item
}
if got, ok := byName["PSU0"]; !ok || got.VoltageV != 224 || got.PowerW != 120 {
t.Fatalf("expected PSU0 input group with VIN/PIN merged, got %#v", byName)
}
if got, ok := byName["PSU0_Output"]; !ok || got.VoltageV != 12 || got.PowerW != 95 {
t.Fatalf("expected PSU0 output group with VOUT/POUT merged, got %#v", byName)
}
}
func TestConvertToReanimator_PreservesCanonicalDedupWithoutDeviceVitals(t *testing.T) {
input := &models.AnalysisResult{
Filename: "dedup-vitals.json",