From 3547ef9083127cf8450900a2640a45a858660ac5 Mon Sep 17 00:00:00 2001 From: Mikhail Chusavitin Date: Thu, 26 Mar 2026 18:42:54 +0300 Subject: [PATCH] Skip placeholder firmware versions in API output --- internal/server/handlers.go | 33 ++++++++++++++++------- internal/server/handlers_firmware_test.go | 19 +++++++++++++ 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/internal/server/handlers.go b/internal/server/handlers.go index 18f4b07..7448efb 100644 --- a/internal/server/handlers.go +++ b/internal/server/handlers.go @@ -13,12 +13,12 @@ import ( "net" "net/http" "os" - "sync/atomic" "path/filepath" "regexp" "sort" "strconv" "strings" + "sync/atomic" "time" "git.mchus.pro/mchus/logpile/internal/collector" @@ -717,6 +717,19 @@ func hasUsableSerial(serial string) bool { } } +func hasUsableFirmwareVersion(version string) bool { + v := strings.TrimSpace(version) + if v == "" { + return false + } + switch strings.ToUpper(v) { + case "N/A", "NA", "NONE", "NULL", "UNKNOWN", "-": + return false + default: + return true + } +} + func (s *Server) handleGetFirmware(w http.ResponseWriter, r *http.Request) { result := s.GetResult() if result == nil || result.Hardware == nil { @@ -944,7 +957,7 @@ func buildFirmwareEntries(hw *models.HardwareConfig) []firmwareEntry { component = strings.TrimSpace(component) model = strings.TrimSpace(model) version = strings.TrimSpace(version) - if component == "" || version == "" { + if component == "" || !hasUsableFirmwareVersion(version) { return } if model == "" { @@ -1992,14 +2005,14 @@ func applyCollectSourceMetadata(result *models.AnalysisResult, req CollectReques func toCollectorRequest(req CollectRequest) collector.Request { return collector.Request{ - Host: req.Host, - Protocol: req.Protocol, - Port: req.Port, - Username: req.Username, - AuthType: req.AuthType, - Password: req.Password, - Token: req.Token, - TLSMode: req.TLSMode, + Host: req.Host, + Protocol: req.Protocol, + Port: req.Port, + Username: req.Username, + AuthType: req.AuthType, + Password: req.Password, + Token: req.Token, + TLSMode: req.TLSMode, PowerOnIfHostOff: req.PowerOnIfHostOff, StopHostAfterCollect: req.StopHostAfterCollect, DebugPayloads: req.DebugPayloads, diff --git a/internal/server/handlers_firmware_test.go b/internal/server/handlers_firmware_test.go index 8c9faae..775a6b3 100644 --- a/internal/server/handlers_firmware_test.go +++ b/internal/server/handlers_firmware_test.go @@ -62,3 +62,22 @@ func TestBuildFirmwareEntries_IncludesGPUFirmwareFallback(t *testing.T) { t.Fatalf("expected GPU firmware entry from hardware.gpus fallback") } } + +func TestBuildFirmwareEntries_SkipsPlaceholderVersions(t *testing.T) { + hw := &models.HardwareConfig{ + Firmware: []models.FirmwareInfo{ + {DeviceName: "BMC", Version: "3.13.42P13"}, + {DeviceName: "Front_BP_1", Version: "NA"}, + {DeviceName: "Rear_BP_0", Version: "N/A"}, + {DeviceName: "HDD_BP", Version: "-"}, + }, + } + + entries := buildFirmwareEntries(hw) + if len(entries) != 1 { + t.Fatalf("expected only usable firmware entries, got %#v", entries) + } + if entries[0].Component != "BMC" || entries[0].Version != "3.13.42P13" { + t.Fatalf("unexpected remaining firmware entry: %#v", entries[0]) + } +}