feat(viewer): add licenses hardware section

Renders hardware.licenses[] (Reanimator hardware ingest contract v2.12)
between power_supplies and sensors, same treatment as every other
component category: preferred section order, title, and column order.
Purely additive — consumers whose snapshots don't carry hardware.licenses
are unaffected, and any snapshot that does already renders it today via
the generic extraKeys fallback, just without a curated order/columns.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Chusavitin
2026-08-11 11:57:24 +03:00
co-authored by Claude Sonnet 5
parent 8c80591531
commit ba751c861d
+3
View File
@@ -18,6 +18,7 @@ var sectionOrder = []string{
"storage", "storage",
"pcie_devices", "pcie_devices",
"power_supplies", "power_supplies",
"licenses",
"sensors", "sensors",
"event_logs", "event_logs",
"platform_config", "platform_config",
@@ -31,6 +32,7 @@ var sectionTitles = map[string]string{
"storage": "Storage", "storage": "Storage",
"pcie_devices": "PCIe Devices", "pcie_devices": "PCIe Devices",
"power_supplies": "Power Supplies", "power_supplies": "Power Supplies",
"licenses": "Licenses",
"sensors": "Sensors", "sensors": "Sensors",
"event_logs": "Event Logs", "event_logs": "Event Logs",
"platform_config": "Platform Config", "platform_config": "Platform Config",
@@ -80,6 +82,7 @@ var preferredColumns = map[string][]string{
"storage": {"type", "model", "serial_number", "firmware", "size_gb", "logical_block_size_bytes", "physical_block_size_bytes", "metadata_bytes_per_block", "slot"}, "storage": {"type", "model", "serial_number", "firmware", "size_gb", "logical_block_size_bytes", "physical_block_size_bytes", "metadata_bytes_per_block", "slot"},
"pcie_devices": {"device_class", "manufacturer", "model", "serial_number", "mac_addresses", "slot", "numa_node", "link_speed", "link_width", "bdf"}, "pcie_devices": {"device_class", "manufacturer", "model", "serial_number", "mac_addresses", "slot", "numa_node", "link_speed", "link_width", "bdf"},
"power_supplies": {"vendor", "model", "part_number", "serial_number", "slot"}, "power_supplies": {"vendor", "model", "part_number", "serial_number", "slot"},
"licenses": {"name", "vendor", "type", "feature", "component_ref", "license_key", "expires_at"},
"event_logs": {"severity_icon", "source", "event_time", "severity", "message_id", "message", "component_ref", "fingerprint", "is_active", "raw_payload"}, "event_logs": {"severity_icon", "source", "event_time", "severity", "message_id", "message", "component_ref", "fingerprint", "is_active", "raw_payload"},
"fans": {"name", "rpm"}, "fans": {"name", "rpm"},
"power": {"name", "voltage_v", "current_a", "power_w"}, "power": {"name", "voltage_v", "current_a", "power_w"},