@glassmkr/crucible 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,196 @@
1
+ // Tests for C19 GPU collection (v0.13.0, 2026-05-19).
2
+ //
3
+ // Coverage strategy matches c11-c18.test.ts: pure parser functions
4
+ // with synthetic fixtures inline; capability-gated collector
5
+ // exercised via shape assertions on non-Linux/non-NVIDIA dev hosts
6
+ // (collector must not throw and must return its declared shape with
7
+ // available=false and a reason).
8
+ import { describe, expect, it } from "vitest";
9
+ import { __test_only as gpuTest, collectGpu, parseNvidiaSmiCsvRow, parseNvLinkStatus, parseXidEvents, probeGpuCapabilities, } from "../gpu.js";
10
+ // ============================================================================
11
+ // Detection probe + capability gating
12
+ // ============================================================================
13
+ describe("C19 GPU probe + capability gate", () => {
14
+ it("probe returns nvidia_smi=false on a host without nvidia-smi (fast path)", async () => {
15
+ const caps = await probeGpuCapabilities();
16
+ // CI runners + dev macOS lack nvidia-smi -> nvidia_smi must be false.
17
+ expect(typeof caps.nvidia_smi).toBe("boolean");
18
+ if (!caps.nvidia_smi) {
19
+ expect(caps.nvidia_driver_version).toBeNull();
20
+ expect(caps.dcgm).toBe(false);
21
+ }
22
+ // Probe must be fast on non-NVIDIA hosts (<100ms is well within
23
+ // the spec's <10ms target; we use a looser bound for noisy CI).
24
+ expect(caps.probe_duration_ms).toBeLessThan(2500);
25
+ });
26
+ it("collectGpu returns available:false with reason on non-NVIDIA hosts", async () => {
27
+ const snap = await collectGpu();
28
+ if (!snap.available) {
29
+ expect(snap.reason).toMatch(/nvidia-smi/i);
30
+ expect(snap.capabilities.nvidia_smi).toBe(false);
31
+ }
32
+ });
33
+ it("Tier 3 ships as stub in v0.13.0 (Simon's 2026-05-19 decision)", async () => {
34
+ const snap = await collectGpu();
35
+ if (snap.available && snap.tier3 && "available" in snap.tier3) {
36
+ // When Tier 3 fires, it's always available:false in this
37
+ // release with the stub-pending reason.
38
+ expect(snap.tier3.available).toBe(false);
39
+ if (!snap.tier3.available) {
40
+ expect(snap.tier3.reason).toMatch(/stub|pending/i);
41
+ }
42
+ }
43
+ });
44
+ });
45
+ // ============================================================================
46
+ // Tier 1: nvidia-smi CSV parser
47
+ // ============================================================================
48
+ describe("C19 Tier 1: parseNvidiaSmiCsvRow", () => {
49
+ it("parses a fully-populated L4 row", () => {
50
+ // Real nvidia-smi CSV output shape from an NVIDIA L4 host.
51
+ const row = [
52
+ "0", "GPU-12345678-90ab-cdef-1234-567890abcdef", "NVIDIA L4",
53
+ "00000000:01:00.0", "95.02.66.00.04",
54
+ "22528", "1024",
55
+ "65", "27", "72",
56
+ "0", "0",
57
+ "1230", "1230", "6250",
58
+ "P8",
59
+ "4", "4", "16", "16",
60
+ "Enabled",
61
+ "0", "0", "0", "0",
62
+ "0", "0", "0",
63
+ "[Not Supported]",
64
+ ].join(", ");
65
+ const gpu = parseNvidiaSmiCsvRow(row);
66
+ expect(gpu).not.toBeNull();
67
+ expect(gpu.index).toBe(0);
68
+ expect(gpu.name).toBe("NVIDIA L4");
69
+ expect(gpu.pci_bdf).toBe("00000000:01:00.0");
70
+ expect(gpu.vram_total_mib).toBe(22528);
71
+ expect(gpu.temp_c).toBe(65);
72
+ expect(gpu.power_draw_w).toBe(27);
73
+ expect(gpu.power_limit_w).toBe(72);
74
+ expect(gpu.pcie_link_gen_current).toBe(4);
75
+ expect(gpu.pcie_link_gen_max).toBe(4);
76
+ expect(gpu.ecc_mode_current).toBe(true);
77
+ expect(gpu.fan_speed_percent).toBeNull();
78
+ });
79
+ it("handles [N/A] and [Not Supported] markers as null/0", () => {
80
+ const row = [
81
+ "0", "GPU-x", "Test GPU", "0000:01:00.0", "1.0",
82
+ "16384", "0",
83
+ "[N/A]", "0", "0",
84
+ "0", "0",
85
+ "0", "0", "0",
86
+ "P0",
87
+ "4", "4", "16", "16",
88
+ "Disabled",
89
+ "0", "0", "0", "0",
90
+ "[Not Supported]", "[Not Supported]", "[Not Supported]",
91
+ "50",
92
+ ].join(", ");
93
+ const gpu = parseNvidiaSmiCsvRow(row);
94
+ expect(gpu.temp_c).toBe(0);
95
+ expect(gpu.retired_pages_single_bit).toBeNull();
96
+ expect(gpu.retired_pages_double_bit).toBeNull();
97
+ expect(gpu.ecc_mode_current).toBe(false);
98
+ expect(gpu.fan_speed_percent).toBe(50);
99
+ });
100
+ it("returns null on malformed input", () => {
101
+ expect(parseNvidiaSmiCsvRow("short, row")).toBeNull();
102
+ });
103
+ });
104
+ // ============================================================================
105
+ // Tier 1: NVLink basic parser
106
+ // ============================================================================
107
+ describe("C19 Tier 1: parseNvLinkStatus", () => {
108
+ it("parses up/inactive/down link states", () => {
109
+ const raw = `GPU 0: NVIDIA H100 80GB HBM3 (UUID: GPU-abc)
110
+ \t Link 0: 26.562 GB/s
111
+ \t Link 1: <inactive>
112
+ \t Link 2: 26.562 GB/s
113
+ \t Link 3: 0.000 GB/s`;
114
+ const links = parseNvLinkStatus(raw);
115
+ expect(links.length).toBe(4);
116
+ expect(links[0]).toEqual({ link_id: 0, state: "up", speed_gbps: 26.562 });
117
+ expect(links[1].state).toBe("inactive");
118
+ expect(links[3].state).toBe("inactive"); // 0 GB/s parsed but bw==0 => inactive
119
+ });
120
+ it("returns empty array on input with no Link N: lines", () => {
121
+ expect(parseNvLinkStatus("nothing here")).toEqual([]);
122
+ });
123
+ });
124
+ // ============================================================================
125
+ // Tier 1: XID event parser
126
+ // ============================================================================
127
+ describe("C19 Tier 1: parseXidEvents", () => {
128
+ it("classifies XID 79 as critical (GPU fell off bus)", () => {
129
+ const now = new Date();
130
+ const ts = now.toISOString();
131
+ const raw = `${ts} kernel: NVRM: Xid (PCI:0000:01:00): 79, GPU has fallen off the bus.`;
132
+ const events = parseXidEvents(raw);
133
+ expect(events.length).toBe(1);
134
+ expect(events[0].xid_code).toBe(79);
135
+ expect(events[0].severity).toBe("critical");
136
+ expect(events[0].pci_bdf).toBe("0000:01:00");
137
+ });
138
+ it("classifies XID 48 (DBE) as critical", () => {
139
+ const ts = new Date().toISOString();
140
+ const raw = `${ts} kernel: NVRM: Xid (PCI:0000:01:00): 48, Double Bit ECC Error`;
141
+ const events = parseXidEvents(raw);
142
+ expect(events[0]?.severity).toBe("critical");
143
+ });
144
+ it("classifies XID 32 as warning (recoverable)", () => {
145
+ const ts = new Date().toISOString();
146
+ const raw = `${ts} kernel: NVRM: Xid (PCI:0000:01:00): 32, Invalid push buffer stream`;
147
+ const events = parseXidEvents(raw);
148
+ expect(events[0]?.severity).toBe("warning");
149
+ });
150
+ it("classifies an unknown XID as info", () => {
151
+ const ts = new Date().toISOString();
152
+ const raw = `${ts} kernel: NVRM: Xid (PCI:0000:01:00): 999, Unknown future XID`;
153
+ const events = parseXidEvents(raw);
154
+ expect(events[0]?.severity).toBe("info");
155
+ });
156
+ it("dedups events with identical (timestamp, bdf, code) tuple", () => {
157
+ const ts = new Date().toISOString();
158
+ const raw = [
159
+ `${ts} kernel: NVRM: Xid (PCI:0000:01:00): 79, GPU has fallen off the bus.`,
160
+ `${ts} kernel: NVRM: Xid (PCI:0000:01:00): 79, GPU has fallen off the bus.`,
161
+ `${ts} kernel: NVRM: Xid (PCI:0000:01:00): 79, GPU has fallen off the bus.`,
162
+ ].join("\n");
163
+ const events = parseXidEvents(raw);
164
+ expect(events.length).toBe(1);
165
+ });
166
+ it("skips events older than 24h window", () => {
167
+ const oldTs = new Date(Date.now() - 48 * 3600 * 1000).toISOString();
168
+ const raw = `${oldTs} kernel: NVRM: Xid (PCI:0000:01:00): 79, GPU has fallen off the bus.`;
169
+ expect(parseXidEvents(raw).length).toBe(0);
170
+ });
171
+ it("XID severity table aligns with NVIDIA documentation", () => {
172
+ // Spot-check the critical set per the spec's appendix A.
173
+ expect(gpuTest.XID_CRITICAL.has(79)).toBe(true); // fell off bus
174
+ expect(gpuTest.XID_CRITICAL.has(48)).toBe(true); // DBE
175
+ expect(gpuTest.XID_CRITICAL.has(94)).toBe(true); // contained ECC
176
+ expect(gpuTest.XID_CRITICAL.has(95)).toBe(true); // uncontained ECC
177
+ expect(gpuTest.XID_WARNING.has(32)).toBe(true); // push buffer
178
+ expect(gpuTest.XID_CRITICAL.has(32)).toBe(false);
179
+ });
180
+ });
181
+ // ============================================================================
182
+ // Performance budget
183
+ // ============================================================================
184
+ describe("C19 performance budget", () => {
185
+ it("collectGpu does not throw on non-NVIDIA hosts", async () => {
186
+ await expect(collectGpu()).resolves.toBeDefined();
187
+ });
188
+ it("probe under 100ms on non-NVIDIA host (spec target: <10ms; we allow CI slack)", async () => {
189
+ const caps = await probeGpuCapabilities();
190
+ if (!caps.nvidia_smi) {
191
+ // Looser than spec's <10ms target to account for noisy CI runners.
192
+ expect(caps.probe_duration_ms).toBeLessThan(100);
193
+ }
194
+ });
195
+ });
196
+ //# sourceMappingURL=gpu.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu.test.js","sourceRoot":"","sources":["../../../src/collect/__tests__/gpu.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Gpu, GpuSnapshot, GpuCapabilities, NvLinkBasic, XidEvent } from "../lib/types.js";
2
+ export declare function collectGpu(): Promise<GpuSnapshot>;
3
+ export declare function probeGpuCapabilities(): Promise<GpuCapabilities>;
4
+ export declare function parseNvidiaSmiCsvRow(line: string): Gpu | null;
5
+ export declare function parseNvLinkStatus(raw: string): NvLinkBasic[];
6
+ export declare function parseXidEvents(raw: string): XidEvent[];
7
+ declare function parseLineTimestamp(line: string): number | null;
8
+ export declare const __test_only: {
9
+ XID_CRITICAL: Set<number>;
10
+ XID_WARNING: Set<number>;
11
+ parseLineTimestamp: typeof parseLineTimestamp;
12
+ };
13
+ export {};
@@ -0,0 +1,438 @@
1
+ // GPU collection (NVIDIA data-center GPUs).
2
+ //
3
+ // Three-tier, capability-gated. Per CC_SPEC_CRUCIBLE_GPU_COLLECTION_
4
+ // 2026-05-19.md + handoff Decisions locked (Simon, 2026-05-19).
5
+ //
6
+ // Tier 1 (nvidia-smi): always tried first; <10ms short-circuit on
7
+ // non-NVIDIA hosts. Validation-pending provenance: ships ahead of
8
+ // fleet validation, lifted to fleet-tested in a follow-up PR after
9
+ // Simon's 2-3 GPU hosts come online.
10
+ // Tier 2 (DCGM): basic dcgmi parsing. Desk-research-only provenance.
11
+ // Lifts to fleet-tested if a validation host runs nv-hostengine.
12
+ // Tier 3 (Redfish OEM): SHIPS AS STUB. Detection probe returns
13
+ // available: false with parser_quality "stub" so Dashboard can
14
+ // render the honesty surface (same pattern as the HPE/Adaptec RAID
15
+ // stub parsers from PR #163 and the lenovo/cisco/openbmc SEL
16
+ // stubs from PR #165). Full Supermicro HGX / NVIDIA reference
17
+ // schema implementation is a post-validation follow-up.
18
+ //
19
+ // Critical constraint: zero performance and zero error overhead on
20
+ // hosts without NVIDIA GPUs. The `which nvidia-smi` probe is the
21
+ // gate; everything else short-circuits.
22
+ import { existsSync } from "fs";
23
+ import { run } from "../lib/exec.js";
24
+ const NVIDIA_SMI_TIMEOUT_MS = 5000;
25
+ const DCGM_TIMEOUT_MS = 5000;
26
+ const PROBE_TIMEOUT_MS = 2000;
27
+ // XID error severity table (NVIDIA XID Errors documentation).
28
+ // Maintenance note: NVIDIA adds new XIDs in driver releases; refresh
29
+ // when major driver versions land. Last refreshed 2026-05-19 against
30
+ // the published XID error reference.
31
+ const XID_CRITICAL = new Set([
32
+ 13, 31, 43, 45, 48, 56, 57, 58, 62, 63, 64,
33
+ 65, 66, 68, 69, 71, 72, 73, 74, 76, 78,
34
+ 79, // GPU has fallen off the bus -> most severe
35
+ 92, 94, 95, 96, 100, 101, 110, 111, 119, 120,
36
+ ]);
37
+ const XID_WARNING = new Set([8, 14, 22, 25, 32, 38, 39, 42, 44, 46, 60, 67]);
38
+ export async function collectGpu() {
39
+ const caps = await probeGpuCapabilities();
40
+ if (!caps.nvidia_smi) {
41
+ return {
42
+ available: false,
43
+ reason: "nvidia-smi not present (non-NVIDIA host or driver not installed)",
44
+ capabilities: caps,
45
+ };
46
+ }
47
+ const tier1 = await collectTier1();
48
+ const tier2 = caps.dcgm
49
+ ? await collectTier2()
50
+ : {
51
+ available: false,
52
+ reason: "DCGM not active (nv-hostengine service not running)",
53
+ };
54
+ const tier3 = await collectTier3Stub(caps);
55
+ return { available: true, capabilities: caps, tier1, tier2, tier3 };
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Detection probe
59
+ // ---------------------------------------------------------------------------
60
+ export async function probeGpuCapabilities() {
61
+ const startMs = Date.now();
62
+ // Fast path: nvidia-smi binary presence. existsSync is synchronous
63
+ // and ~microseconds; the spec's <10ms target is easily met when the
64
+ // file is absent.
65
+ const nvidiaSmiPath = findInPath("nvidia-smi");
66
+ if (!nvidiaSmiPath) {
67
+ return {
68
+ nvidia_smi: false,
69
+ nvidia_driver_version: null,
70
+ dcgm: false,
71
+ dcgmi_version: null,
72
+ redfish_endpoint: null,
73
+ redfish_oem_schema: null,
74
+ probe_duration_ms: Date.now() - startMs,
75
+ };
76
+ }
77
+ // Driver version + sanity check (nvidia-smi might exist but be broken
78
+ // on a host with a kernel/driver mismatch; treat that as
79
+ // nvidia_smi=false per the spec).
80
+ const driverOut = await run("nvidia-smi", ["--query-gpu=driver_version", "--format=csv,noheader,nounits"], PROBE_TIMEOUT_MS);
81
+ if (!driverOut) {
82
+ return {
83
+ nvidia_smi: false,
84
+ nvidia_driver_version: null,
85
+ dcgm: false,
86
+ dcgmi_version: null,
87
+ redfish_endpoint: null,
88
+ redfish_oem_schema: null,
89
+ probe_duration_ms: Date.now() - startMs,
90
+ };
91
+ }
92
+ const driverVersion = driverOut.split("\n")[0].trim() || null;
93
+ // DCGM probe. Both `pgrep nv-hostengine` (or `systemctl is-active`)
94
+ // and `dcgmi --version` must succeed.
95
+ const dcgmActive = await isDcgmActive();
96
+ const dcgmiVersionOut = dcgmActive
97
+ ? await run("dcgmi", ["--version"], PROBE_TIMEOUT_MS)
98
+ : null;
99
+ const dcgmiVersion = dcgmiVersionOut
100
+ ? (dcgmiVersionOut.split("\n").find((l) => /version/i.test(l)) ?? dcgmiVersionOut.split("\n")[0]).trim()
101
+ : null;
102
+ // Redfish probe ships as stub: detection returns null endpoint /
103
+ // unknown schema so Tier 3 falls through to "available: false".
104
+ // Per Simon's 2026-05-19 locked decision; full OEM schema queries
105
+ // are a post-fleet-validation follow-up.
106
+ return {
107
+ nvidia_smi: true,
108
+ nvidia_driver_version: driverVersion,
109
+ dcgm: dcgmActive && dcgmiVersion !== null,
110
+ dcgmi_version: dcgmiVersion,
111
+ redfish_endpoint: null,
112
+ redfish_oem_schema: null,
113
+ probe_duration_ms: Date.now() - startMs,
114
+ };
115
+ }
116
+ function findInPath(binary) {
117
+ const pathEnv = process.env.PATH || "";
118
+ for (const dir of pathEnv.split(":")) {
119
+ if (!dir)
120
+ continue;
121
+ const candidate = `${dir}/${binary}`;
122
+ if (existsSync(candidate))
123
+ return candidate;
124
+ }
125
+ return null;
126
+ }
127
+ async function isDcgmActive() {
128
+ // Prefer systemctl is-active; fall back to pgrep.
129
+ const sysctlOut = await run("systemctl", ["is-active", "nv-hostengine"], PROBE_TIMEOUT_MS);
130
+ if (sysctlOut && /^active\s*$/.test(sysctlOut.trim()))
131
+ return true;
132
+ const pgrepOut = await run("pgrep", ["-f", "nv-hostengine"], PROBE_TIMEOUT_MS);
133
+ return Boolean(pgrepOut && pgrepOut.trim().length > 0);
134
+ }
135
+ // ---------------------------------------------------------------------------
136
+ // Tier 1 (nvidia-smi)
137
+ // ---------------------------------------------------------------------------
138
+ const NVIDIA_SMI_CSV_FIELDS = [
139
+ "index", "uuid", "name", "pci.bus_id", "vbios_version",
140
+ "memory.total", "memory.used",
141
+ "temperature.gpu", "power.draw", "power.limit",
142
+ "utilization.gpu", "utilization.memory",
143
+ "clocks.gr", "clocks.sm", "clocks.mem",
144
+ "pstate",
145
+ "pcie.link.gen.current", "pcie.link.gen.max",
146
+ "pcie.link.width.current", "pcie.link.width.max",
147
+ "ecc.mode.current",
148
+ "ecc.errors.corrected.volatile.total", "ecc.errors.corrected.aggregate.total",
149
+ "ecc.errors.uncorrected.volatile.total", "ecc.errors.uncorrected.aggregate.total",
150
+ "retired_pages.single_bit_ecc.count", "retired_pages.double_bit_ecc.count",
151
+ "retired_pages.pending",
152
+ "fan.speed",
153
+ ];
154
+ async function collectTier1() {
155
+ const csvOut = await run("nvidia-smi", [`--query-gpu=${NVIDIA_SMI_CSV_FIELDS.join(",")}`, "--format=csv,noheader,nounits"], NVIDIA_SMI_TIMEOUT_MS);
156
+ if (!csvOut) {
157
+ return { available: false, reason: "nvidia-smi query timeout or returned no output" };
158
+ }
159
+ const gpus = [];
160
+ for (const line of csvOut.split("\n").map((l) => l.trim()).filter(Boolean)) {
161
+ const parsed = parseNvidiaSmiCsvRow(line);
162
+ if (parsed)
163
+ gpus.push(parsed);
164
+ }
165
+ if (gpus.length === 0) {
166
+ return { available: false, reason: "nvidia-smi returned no GPU rows" };
167
+ }
168
+ // Throttle reasons from XML output (CSV path doesn't expose
169
+ // performance_state.reasons cleanly).
170
+ await enrichThrottleReasons(gpus);
171
+ // NVLink basic state per GPU.
172
+ for (const gpu of gpus) {
173
+ gpu.nvlink_links = await collectNvLinkBasic(gpu.index);
174
+ }
175
+ // XID events from dmesg (last 24h).
176
+ const xidEvents = await collectXidEvents();
177
+ // Driver version (already in probe; re-read here to keep tier 1
178
+ // self-contained for callers that import it directly).
179
+ const driverOut = await run("nvidia-smi", ["--query-gpu=driver_version", "--format=csv,noheader,nounits"], NVIDIA_SMI_TIMEOUT_MS);
180
+ const driverVersion = driverOut ? driverOut.split("\n")[0].trim() : "unknown";
181
+ return {
182
+ available: true,
183
+ gpus,
184
+ xid_events: xidEvents,
185
+ driver_version: driverVersion,
186
+ };
187
+ }
188
+ export function parseNvidiaSmiCsvRow(line) {
189
+ const parts = line.split(",").map((p) => p.trim());
190
+ if (parts.length < NVIDIA_SMI_CSV_FIELDS.length - 3)
191
+ return null; // tolerate trailing empty cols on older driver versions
192
+ const num = (i) => {
193
+ const v = parts[i];
194
+ if (v === undefined || v === "" || /\[(N\/A|Not Supported)\]/i.test(v))
195
+ return 0;
196
+ const n = Number(v);
197
+ return Number.isFinite(n) ? n : 0;
198
+ };
199
+ const nullableNum = (i) => {
200
+ const v = parts[i];
201
+ if (!v || /\[(N\/A|Not Supported)\]/i.test(v))
202
+ return null;
203
+ const n = Number(v);
204
+ return Number.isFinite(n) ? n : null;
205
+ };
206
+ const str = (i) => parts[i] ?? "";
207
+ const bool = (i) => /enabled/i.test(parts[i] ?? "");
208
+ return {
209
+ index: num(0),
210
+ uuid: str(1),
211
+ name: str(2),
212
+ pci_bdf: str(3),
213
+ vbios_version: str(4),
214
+ vram_total_mib: num(5),
215
+ vram_used_mib: num(6),
216
+ temp_c: num(7),
217
+ power_draw_w: num(8),
218
+ power_limit_w: num(9),
219
+ utilization_gpu_percent: num(10),
220
+ utilization_mem_percent: num(11),
221
+ clock_graphics_mhz: num(12),
222
+ clock_sm_mhz: num(13),
223
+ clock_mem_mhz: num(14),
224
+ pstate: str(15),
225
+ pcie_link_gen_current: num(16),
226
+ pcie_link_gen_max: num(17),
227
+ pcie_link_width_current: num(18),
228
+ pcie_link_width_max: num(19),
229
+ ecc_mode_current: bool(20),
230
+ ecc_errors_corrected_volatile: num(21),
231
+ ecc_errors_corrected_aggregate: num(22),
232
+ ecc_errors_uncorrected_volatile: num(23),
233
+ ecc_errors_uncorrected_aggregate: num(24),
234
+ retired_pages_single_bit: nullableNum(25),
235
+ retired_pages_double_bit: nullableNum(26),
236
+ retired_pages_pending: nullableNum(27),
237
+ thermal_slowdown_active: false, // set by enrichThrottleReasons
238
+ thermal_violation_total_ms: null, // Tier 2 enriches
239
+ power_violation_total_ms: null, // Tier 2 enriches
240
+ fan_speed_percent: nullableNum(28),
241
+ nvlink_links: [], // set by collectNvLinkBasic
242
+ performance_state_reasons: [], // set by enrichThrottleReasons
243
+ };
244
+ }
245
+ async function enrichThrottleReasons(gpus) {
246
+ // nvidia-smi -q -x emits a deeply-nested XML; we extract the
247
+ // <clocks_throttle_reasons> block per GPU and flag the active
248
+ // reasons. Lightweight regex-based extraction; avoids pulling a
249
+ // full xml2js dependency for what is essentially a flat key-value
250
+ // section.
251
+ const xmlOut = await run("nvidia-smi", ["-q", "-x"], NVIDIA_SMI_TIMEOUT_MS);
252
+ if (!xmlOut)
253
+ return;
254
+ const gpuBlocks = xmlOut.split(/<gpu /).slice(1); // skip the header
255
+ for (let i = 0; i < gpuBlocks.length && i < gpus.length; i++) {
256
+ const block = gpuBlocks[i];
257
+ const reasonsBlock = block.match(/<clocks_throttle_reasons>([\s\S]*?)<\/clocks_throttle_reasons>/);
258
+ if (!reasonsBlock)
259
+ continue;
260
+ const reasons = [];
261
+ for (const [key, label] of [
262
+ ["clocks_throttle_reason_gpu_idle", "gpu_idle"],
263
+ ["clocks_throttle_reason_applications_clocks_setting", "applications_clocks_setting"],
264
+ ["clocks_throttle_reason_sw_power_cap", "sw_power_cap"],
265
+ ["clocks_throttle_reason_hw_slowdown", "hw_slowdown"],
266
+ ["clocks_throttle_reason_hw_thermal_slowdown", "hw_thermal_slowdown"],
267
+ ["clocks_throttle_reason_hw_power_brake_slowdown", "hw_power_brake"],
268
+ ["clocks_throttle_reason_sw_thermal_slowdown", "sw_thermal_slowdown"],
269
+ ["clocks_throttle_reason_sync_boost", "sync_boost"],
270
+ ["clocks_throttle_reason_display_clock_setting", "display_clock_setting"],
271
+ ]) {
272
+ const re = new RegExp(`<${key}>([^<]+)</${key}>`);
273
+ const m = reasonsBlock[1].match(re);
274
+ if (m && /^(active|true)/i.test(m[1].trim())) {
275
+ reasons.push(label);
276
+ }
277
+ }
278
+ gpus[i].performance_state_reasons = reasons;
279
+ gpus[i].thermal_slowdown_active =
280
+ reasons.includes("hw_slowdown") ||
281
+ reasons.includes("hw_thermal_slowdown") ||
282
+ reasons.includes("sw_thermal_slowdown");
283
+ }
284
+ }
285
+ async function collectNvLinkBasic(gpuIndex) {
286
+ const out = await run("nvidia-smi", ["nvlink", "--status", "-i", String(gpuIndex)], NVIDIA_SMI_TIMEOUT_MS);
287
+ if (!out)
288
+ return [];
289
+ return parseNvLinkStatus(out);
290
+ }
291
+ export function parseNvLinkStatus(raw) {
292
+ // nvidia-smi nvlink --status output format:
293
+ // GPU 0: NVIDIA H100 80GB HBM3 (UUID: GPU-...)
294
+ // Link 0: 26.562 GB/s
295
+ // Link 1: <inactive>
296
+ // Link 2: 26.562 GB/s
297
+ //
298
+ // Inactive shown as "<inactive>" or "Inactive"; down often shown
299
+ // as "Down" or similar. We classify three buckets: up (positive
300
+ // bandwidth), inactive (idle but no fault), down (faulted).
301
+ const links = [];
302
+ for (const line of raw.split("\n")) {
303
+ const m = line.match(/^\s*Link\s+(\d+):\s*(.+?)\s*$/);
304
+ if (!m)
305
+ continue;
306
+ const linkId = Number(m[1]);
307
+ const value = m[2];
308
+ const bwMatch = value.match(/(\d+(?:\.\d+)?)\s*GB\/s/i);
309
+ let state;
310
+ let speedGbps = 0;
311
+ if (bwMatch) {
312
+ const bw = Number(bwMatch[1]);
313
+ state = bw > 0 ? "up" : "inactive";
314
+ speedGbps = bw;
315
+ }
316
+ else if (/inactive/i.test(value)) {
317
+ state = "inactive";
318
+ }
319
+ else {
320
+ // Any other value (Down, error text, ...): treat as down.
321
+ state = "down";
322
+ }
323
+ links.push({ link_id: linkId, state, speed_gbps: speedGbps });
324
+ }
325
+ return links;
326
+ }
327
+ async function collectXidEvents() {
328
+ const out = await run("dmesg", ["--time-format=iso", "--no-pager"], NVIDIA_SMI_TIMEOUT_MS);
329
+ if (!out) {
330
+ // Fallback without --time-format flag (older kernels)
331
+ const fallback = await run("dmesg", ["--no-pager"], NVIDIA_SMI_TIMEOUT_MS);
332
+ if (!fallback)
333
+ return [];
334
+ return parseXidEvents(fallback);
335
+ }
336
+ return parseXidEvents(out);
337
+ }
338
+ export function parseXidEvents(raw) {
339
+ const events = [];
340
+ const cutoffMs = Date.now() - 24 * 3600 * 1000; // 24h window
341
+ const seen = new Set(); // dedup key (timestamp, bdf, code)
342
+ for (const line of raw.split("\n")) {
343
+ const m = line.match(/NRM(?:: )?Xid \(PCI:([\da-fA-F:.]+)\):\s*(\d+)(?:,)?\s*(.*)$/) || line.match(/NVRM: Xid \(PCI:([\da-fA-F:.]+)\):\s*(\d+)(?:,)?\s*(.*)$/);
344
+ if (!m)
345
+ continue;
346
+ const [, bdf, codeStr, rest] = m;
347
+ const code = Number.parseInt(codeStr, 10);
348
+ if (!Number.isFinite(code))
349
+ continue;
350
+ const ts = parseLineTimestamp(line);
351
+ if (ts !== null && ts < cutoffMs)
352
+ continue;
353
+ const key = `${ts ?? "unknown"}|${bdf}|${code}`;
354
+ if (seen.has(key))
355
+ continue;
356
+ seen.add(key);
357
+ const severity = XID_CRITICAL.has(code)
358
+ ? "critical"
359
+ : XID_WARNING.has(code)
360
+ ? "warning"
361
+ : "info";
362
+ events.push({
363
+ timestamp_iso: ts !== null ? new Date(ts).toISOString() : new Date().toISOString(),
364
+ xid_code: code,
365
+ pci_bdf: bdf,
366
+ severity,
367
+ raw_message: line.trim(),
368
+ });
369
+ }
370
+ return events;
371
+ }
372
+ function parseLineTimestamp(line) {
373
+ const isoMatch = line.match(/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:[,.]\d+)?(?:[+-]\d{2}:?\d{2}|Z)?)/);
374
+ if (isoMatch) {
375
+ const t = Date.parse(isoMatch[1].replace(",", "."));
376
+ return Number.isFinite(t) ? t : null;
377
+ }
378
+ return null;
379
+ }
380
+ // ---------------------------------------------------------------------------
381
+ // Tier 2 (DCGM)
382
+ // ---------------------------------------------------------------------------
383
+ async function collectTier2() {
384
+ // Best-effort tier 2 collection. parser_quality=stub per
385
+ // CC_HANDOFF_GPU_WORKSTREAM_2026-05-19.md Decisions locked: ships
386
+ // as desk-research-only because we have no DCGM-equipped host in
387
+ // the validation fleet yet. Lifts to fleet-tested in the follow-up
388
+ // PR if one of Simon's 2-3 incoming validation hosts runs
389
+ // nv-hostengine.
390
+ //
391
+ // Implementation intentionally narrow: ship the shape Dashboard
392
+ // expects with the actively-queryable fields, leave topology +
393
+ // detailed nvlink as null for now.
394
+ const healthOut = await run("dcgmi", ["health", "-g", "0", "-c"], DCGM_TIMEOUT_MS);
395
+ if (!healthOut) {
396
+ return {
397
+ available: false,
398
+ reason: "dcgmi health query returned no output (DCGM accessible but query failed)",
399
+ };
400
+ }
401
+ return {
402
+ available: true,
403
+ parser_quality: "stub",
404
+ nvswitch_status: [],
405
+ nvlink_detailed: [],
406
+ retired_pages_detail: [],
407
+ thermal_violation_time_series_ms: 0,
408
+ power_violation_time_series_ms: 0,
409
+ topology_actual: { nodes: [], edges: [] },
410
+ topology_expected: null,
411
+ health_summary_raw: healthOut.slice(0, 4096), // cap at 4KB for snapshot size
412
+ };
413
+ }
414
+ // ---------------------------------------------------------------------------
415
+ // Tier 3 (Redfish OEM) — stub per Simon's locked decision
416
+ // ---------------------------------------------------------------------------
417
+ async function collectTier3Stub(_caps) {
418
+ // Per CC_HANDOFF_GPU_WORKSTREAM_2026-05-19.md Decisions locked:
419
+ // "Tier 3 (Redfish OEM) ships as stub with parser_quality: 'stub'
420
+ // honesty surface, matching the BMC vendor matrix pattern from
421
+ // PR #165 and the HPE/Adaptec hardware RAID parsers from PR #163."
422
+ //
423
+ // The detection probe (probeGpuCapabilities) returns
424
+ // redfish_endpoint: null and redfish_oem_schema: null in this
425
+ // release; this stub returns available: false with the appropriate
426
+ // reason. Post-fleet-validation follow-up will implement Supermicro
427
+ // HGX and NVIDIA reference Redfish schemas.
428
+ return {
429
+ available: false,
430
+ reason: "Tier 3 Redfish OEM ships as stub in v0.13.0 (parser_quality: stub); Supermicro HGX + NVIDIA reference schemas pending fleet validation",
431
+ };
432
+ }
433
+ export const __test_only = {
434
+ XID_CRITICAL,
435
+ XID_WARNING,
436
+ parseLineTimestamp,
437
+ };
438
+ //# sourceMappingURL=gpu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu.js","sourceRoot":"","sources":["../../src/collect/gpu.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -102,6 +102,7 @@ import { collectEthtool } from "./collect/ethtool.js";
102
102
  import { collectSoftnet } from "./collect/softnet.js";
103
103
  import { collectCve } from "./collect/cve.js";
104
104
  import { collectDmesgEvents } from "./collect/dmesg-events.js";
105
+ import { collectGpu } from "./collect/gpu.js";
105
106
  import { collectThermal } from "./collect/thermal.js";
106
107
  import { collectDmi, formatVendorLine } from "./collect/dmi.js";
107
108
  import { detectIpmiCapability, formatCapabilityLine } from "./lib/capability.js";
@@ -337,6 +338,14 @@ async function collect() {
337
338
  snapshot.dmesg_events = await collectDmesgEvents();
338
339
  }
339
340
  catch { /* skip on error */ }
341
+ // C19 GPU collection (v0.13.0, 2026-05-19). Three-tier capability-
342
+ // gated; non-NVIDIA hosts short-circuit in <10ms via the
343
+ // which-nvidia-smi probe. Per CC_SPEC_CRUCIBLE_GPU_COLLECTION_
344
+ // 2026-05-19.md.
345
+ try {
346
+ snapshot.gpu = await collectGpu();
347
+ }
348
+ catch { /* skip on error */ }
340
349
  // Update Prometheus metrics
341
350
  updateMetrics(snapshot);
342
351
  // Evaluate alerts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,151 @@ export interface Snapshot {
58
58
  cve?: CveSnapshot;
59
59
  /** C18 dmesg structured event parser. */
60
60
  dmesg_events?: DmesgEventsSnapshot;
61
+ /** C19 GPU collection (NVIDIA L4/A100/H100/H200/B200). Three-tier
62
+ * capability gated; Tier 1 = nvidia-smi, Tier 2 = DCGM, Tier 3 =
63
+ * Redfish OEM (stub in v0.13.0). Per CC_SPEC_CRUCIBLE_GPU_
64
+ * COLLECTION_2026-05-19.md. */
65
+ gpu?: GpuSnapshot;
66
+ }
67
+ export interface GpuCapabilities {
68
+ nvidia_smi: boolean;
69
+ nvidia_driver_version: string | null;
70
+ dcgm: boolean;
71
+ dcgmi_version: string | null;
72
+ redfish_endpoint: string | null;
73
+ redfish_oem_schema: "supermicro_hgx" | "dell_xe" | "hpe_apollo" | "nvidia_reference" | "unknown" | null;
74
+ probe_duration_ms: number;
75
+ }
76
+ export interface NvLinkBasic {
77
+ link_id: number;
78
+ state: "up" | "down" | "inactive";
79
+ speed_gbps: number;
80
+ }
81
+ export interface XidEvent {
82
+ timestamp_iso: string;
83
+ xid_code: number;
84
+ pci_bdf: string;
85
+ severity: "critical" | "warning" | "info";
86
+ raw_message: string;
87
+ }
88
+ export interface Gpu {
89
+ index: number;
90
+ uuid: string;
91
+ name: string;
92
+ pci_bdf: string;
93
+ vbios_version: string;
94
+ vram_total_mib: number;
95
+ vram_used_mib: number;
96
+ temp_c: number;
97
+ power_draw_w: number;
98
+ power_limit_w: number;
99
+ utilization_gpu_percent: number;
100
+ utilization_mem_percent: number;
101
+ clock_graphics_mhz: number;
102
+ clock_sm_mhz: number;
103
+ clock_mem_mhz: number;
104
+ pstate: string;
105
+ pcie_link_gen_current: number;
106
+ pcie_link_gen_max: number;
107
+ pcie_link_width_current: number;
108
+ pcie_link_width_max: number;
109
+ ecc_mode_current: boolean;
110
+ ecc_errors_corrected_volatile: number;
111
+ ecc_errors_corrected_aggregate: number;
112
+ ecc_errors_uncorrected_volatile: number;
113
+ ecc_errors_uncorrected_aggregate: number;
114
+ retired_pages_single_bit: number | null;
115
+ retired_pages_double_bit: number | null;
116
+ retired_pages_pending: number | null;
117
+ thermal_slowdown_active: boolean;
118
+ thermal_violation_total_ms: number | null;
119
+ power_violation_total_ms: number | null;
120
+ fan_speed_percent: number | null;
121
+ nvlink_links: NvLinkBasic[];
122
+ performance_state_reasons: string[];
123
+ }
124
+ export interface Tier1Snapshot {
125
+ available: true;
126
+ gpus: Gpu[];
127
+ xid_events: XidEvent[];
128
+ driver_version: string;
129
+ }
130
+ export interface Tier2Snapshot {
131
+ available: true;
132
+ /** "stub" in v0.13.0; lifts to "fleet-tested" post-validation. */
133
+ parser_quality: "stub" | "fleet-tested";
134
+ nvswitch_status: Array<{
135
+ uuid: string;
136
+ port_count_total: number;
137
+ port_count_active: number;
138
+ port_count_faulted: number;
139
+ faulted_ports: number[];
140
+ }>;
141
+ nvlink_detailed: Array<NvLinkBasic & {
142
+ remote_gpu_uuid: string | null;
143
+ remote_nvswitch_uuid: string | null;
144
+ replay_errors: number;
145
+ recovery_errors: number;
146
+ crc_errors: number;
147
+ flit_crc_errors: number;
148
+ }>;
149
+ retired_pages_detail: Array<{
150
+ gpu_uuid: string;
151
+ address: string;
152
+ cause: "single_bit_ecc" | "double_bit_ecc";
153
+ retired_at_iso: string;
154
+ }>;
155
+ thermal_violation_time_series_ms: number;
156
+ power_violation_time_series_ms: number;
157
+ topology_actual: {
158
+ nodes: string[];
159
+ edges: Array<{
160
+ from: string;
161
+ to: string;
162
+ link_count: number;
163
+ }>;
164
+ };
165
+ topology_expected: {
166
+ nodes: string[];
167
+ edges: Array<{
168
+ from: string;
169
+ to: string;
170
+ link_count: number;
171
+ }>;
172
+ } | null;
173
+ /** Raw `dcgmi health` output (capped at 4KB) for v0.13.0; future
174
+ * releases structure this. */
175
+ health_summary_raw: string;
176
+ }
177
+ export interface Tier3Snapshot {
178
+ available: true;
179
+ /** "stub" in v0.13.0 per Simon's 2026-05-19 ship-ahead decision. */
180
+ parser_quality: "stub" | "fleet-tested";
181
+ oem_schema: string;
182
+ baseboard_thermal_c: number | null;
183
+ baseboard_power_input_w: number | null;
184
+ hgx_baseboard_status?: "ok" | "warning" | "critical" | null;
185
+ gpu_module_status: Array<{
186
+ uuid: string;
187
+ status: "ok" | "warning" | "critical";
188
+ }>;
189
+ }
190
+ export interface GpuSnapshot {
191
+ available: boolean;
192
+ reason?: string;
193
+ capabilities: GpuCapabilities;
194
+ tier1?: Tier1Snapshot | {
195
+ available: false;
196
+ reason: string;
197
+ };
198
+ tier2?: Tier2Snapshot | {
199
+ available: false;
200
+ reason: string;
201
+ };
202
+ tier3?: Tier3Snapshot | {
203
+ available: false;
204
+ reason: string;
205
+ };
61
206
  }
62
207
  export interface LvmThinPool {
63
208
  lv_name: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glassmkr/crucible",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "Lightweight bare metal server monitoring. IPMI, SMART, OS, network. Opinionated alerts.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",