@glassmkr/crucible 0.9.2 → 0.9.4
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.
- package/dist/__tests__/doctor.test.d.ts +1 -0
- package/dist/__tests__/doctor.test.js +48 -0
- package/dist/__tests__/doctor.test.js.map +1 -0
- package/dist/alerts/__tests__/rules.test.js +126 -0
- package/dist/alerts/__tests__/rules.test.js.map +1 -1
- package/dist/alerts/rules.js +26 -10
- package/dist/alerts/rules.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +32 -0
- package/dist/cli.js.map +1 -1
- package/dist/collect/__tests__/security.test.d.ts +1 -0
- package/dist/collect/__tests__/security.test.js +86 -0
- package/dist/collect/__tests__/security.test.js.map +1 -0
- package/dist/collect/ipmi.js +9 -4
- package/dist/collect/ipmi.js.map +1 -1
- package/dist/collect/security.d.ts +5 -0
- package/dist/collect/security.js +27 -1
- package/dist/collect/security.js.map +1 -1
- package/dist/doctor.d.ts +5 -0
- package/dist/doctor.js +86 -0
- package/dist/doctor.js.map +1 -0
- package/dist/index.js +62 -27
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/vendor-sensors.test.js +64 -6
- package/dist/lib/__tests__/vendor-sensors.test.js.map +1 -1
- package/dist/lib/types.d.ts +16 -2
- package/dist/lib/vendor-sensors.d.ts +45 -6
- package/dist/lib/vendor-sensors.js +55 -12
- package/dist/lib/vendor-sensors.js.map +1 -1
- package/dist/metrics-server.js +7 -2
- package/dist/metrics-server.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { isPsuSensor, isPsuRedundancySensor, classifyPsuRedundancyState } from "../vendor-sensors.js";
|
|
2
|
+
import { isPsuSensor, isPsuRedundancySensor, classifyPsuRedundancyState, classifyPsuSensorBitmask } from "../vendor-sensors.js";
|
|
3
3
|
describe("isPsuSensor", () => {
|
|
4
|
-
it("matches generic
|
|
4
|
+
it("matches generic PSU / Power Supply patterns across vendors", () => {
|
|
5
5
|
expect(isPsuSensor("PSU1 Status", "supermicro")).toBe(true);
|
|
6
6
|
expect(isPsuSensor("PSU1 Status", "dell")).toBe(true);
|
|
7
7
|
expect(isPsuSensor("Power Supply 1", "hpe")).toBe(true);
|
|
8
8
|
expect(isPsuSensor("Power Supply 1", "generic")).toBe(true);
|
|
9
9
|
});
|
|
10
|
-
it("matches
|
|
10
|
+
it("matches PS<N> with space or underscore separator across vendors (glassmkr#29)", () => {
|
|
11
|
+
// Fleet data: Supermicro H12SST uses "PS1 Status", Dell iDRAC uses
|
|
12
|
+
// "PS1 Status", Gigabyte MC12-LE0/MZ62-HD0/R292-4S1 use "PS1_Status".
|
|
13
|
+
// The pre-fix regex was Dell-gated which was wrong — all three
|
|
14
|
+
// vendor families use this shape on real BMCs.
|
|
11
15
|
expect(isPsuSensor("PS1 Status", "dell")).toBe(true);
|
|
12
|
-
expect(isPsuSensor("
|
|
13
|
-
expect(isPsuSensor("
|
|
14
|
-
expect(isPsuSensor("
|
|
16
|
+
expect(isPsuSensor("PS1 Status", "supermicro")).toBe(true);
|
|
17
|
+
expect(isPsuSensor("PS1_Status", "supermicro")).toBe(true); // Gigabyte BMC on Supermicro-DMI box (x12qch)
|
|
18
|
+
expect(isPsuSensor("PS2_Status", "generic")).toBe(true);
|
|
19
|
+
expect(isPsuSensor("PS3 Status", "dell")).toBe(true);
|
|
15
20
|
});
|
|
16
21
|
it("does not match PS Redundancy as an individual PSU sensor", () => {
|
|
17
22
|
expect(isPsuSensor("PS Redundancy", "dell")).toBe(false);
|
|
@@ -19,6 +24,8 @@ describe("isPsuSensor", () => {
|
|
|
19
24
|
it("rejects unrelated sensors", () => {
|
|
20
25
|
expect(isPsuSensor("CPU1 Temp", "dell")).toBe(false);
|
|
21
26
|
expect(isPsuSensor("Some Random Sensor", "supermicro")).toBe(false);
|
|
27
|
+
// PS without digit
|
|
28
|
+
expect(isPsuSensor("PS", "supermicro")).toBe(false);
|
|
22
29
|
});
|
|
23
30
|
});
|
|
24
31
|
describe("isPsuRedundancySensor", () => {
|
|
@@ -46,4 +53,55 @@ describe("classifyPsuRedundancyState", () => {
|
|
|
46
53
|
expect(classifyPsuRedundancyState("0x42")).toBe("unknown");
|
|
47
54
|
});
|
|
48
55
|
});
|
|
56
|
+
describe("classifyPsuSensorBitmask (glassmkr#29)", () => {
|
|
57
|
+
// IPMI 2.0 sensor type 0x08 discrete-state bit semantics.
|
|
58
|
+
it("returns 'failed' for bit 1 (Power Supply Failure detected)", () => {
|
|
59
|
+
expect(classifyPsuSensorBitmask("0x02", "0x0180", "supermicro")).toBe("failed");
|
|
60
|
+
expect(classifyPsuSensorBitmask("0x03", "0x0180", "supermicro")).toBe("failed"); // bit 0 + bit 1
|
|
61
|
+
});
|
|
62
|
+
it("returns 'ac_lost' for bit 3/4/5 (input lost / out-of-range)", () => {
|
|
63
|
+
expect(classifyPsuSensorBitmask("0x08", "0x0180", "supermicro")).toBe("ac_lost");
|
|
64
|
+
expect(classifyPsuSensorBitmask("0x10", "0x0180", "supermicro")).toBe("ac_lost");
|
|
65
|
+
expect(classifyPsuSensorBitmask("0x20", "0x0180", "supermicro")).toBe("ac_lost");
|
|
66
|
+
});
|
|
67
|
+
it("returns 'predictive' for bit 2", () => {
|
|
68
|
+
expect(classifyPsuSensorBitmask("0x04", "0x0180", "supermicro")).toBe("predictive");
|
|
69
|
+
});
|
|
70
|
+
it("returns 'ok' for 0x01 (Presence detected, no failure bits)", () => {
|
|
71
|
+
expect(classifyPsuSensorBitmask("0x01", "0x0100", "supermicro")).toBe("ok");
|
|
72
|
+
expect(classifyPsuSensorBitmask("0x01", "0x0181", "supermicro")).toBe("ok");
|
|
73
|
+
});
|
|
74
|
+
it("returns 'ok' on ambiguous 0x0 + mask lacking presence bit (under-report safe default)", () => {
|
|
75
|
+
// mz62hd / x570d4u / x12qch shape: BMC doesn't claim it can report
|
|
76
|
+
// bit 0, so a Reading of 0x0 isn't enough to call PSU absent.
|
|
77
|
+
expect(classifyPsuSensorBitmask("0x00", "0x0180", "generic")).toBe("ok");
|
|
78
|
+
expect(classifyPsuSensorBitmask("0x00", "0x0080", "asrockrack")).toBe("ok");
|
|
79
|
+
expect(classifyPsuSensorBitmask("0x00", "0x0100", "supermicro")).toBe("ok");
|
|
80
|
+
});
|
|
81
|
+
it("returns 'absent' when mask supports bit 0 but Reading lacks it", () => {
|
|
82
|
+
// BMC says "I can report presence" (mask & 0x01 = 1) and Reading is
|
|
83
|
+
// 0x0: PSU is genuinely absent.
|
|
84
|
+
expect(classifyPsuSensorBitmask("0x00", "0x0181", "supermicro")).toBe("absent");
|
|
85
|
+
});
|
|
86
|
+
it("returns 'inactive' for bit 7 alone when mask supports it (backup PSU in standby)", () => {
|
|
87
|
+
expect(classifyPsuSensorBitmask("0x80", "0x0180", "supermicro")).toBe("inactive");
|
|
88
|
+
});
|
|
89
|
+
it("does not return 'inactive' when bit 7 set but mask doesn't include it (and mask doesn't include bit 0 either)", () => {
|
|
90
|
+
// Mask 0x40 has neither presence (bit 0) nor inactive (bit 7), so
|
|
91
|
+
// bit 7 in Reading is not reportable and shouldn't be flagged.
|
|
92
|
+
expect(classifyPsuSensorBitmask("0x80", "0x0040", "supermicro")).toBe("ok");
|
|
93
|
+
});
|
|
94
|
+
it("returns 'unknown' for unparseable Reading", () => {
|
|
95
|
+
expect(classifyPsuSensorBitmask("na", "0x0180", "supermicro")).toBe("unknown");
|
|
96
|
+
expect(classifyPsuSensorBitmask("", "0x0180", "supermicro")).toBe("unknown");
|
|
97
|
+
expect(classifyPsuSensorBitmask("not a hex", "0x0180", "supermicro")).toBe("unknown");
|
|
98
|
+
});
|
|
99
|
+
it("handles missing/'na' mask gracefully", () => {
|
|
100
|
+
// Some sensor outputs omit the mask column entirely; fall through to
|
|
101
|
+
// failure-bit detection without crashing on parseInt(NaN).
|
|
102
|
+
expect(classifyPsuSensorBitmask("0x02", undefined, "supermicro")).toBe("failed");
|
|
103
|
+
expect(classifyPsuSensorBitmask("0x02", "na", "supermicro")).toBe("failed");
|
|
104
|
+
expect(classifyPsuSensorBitmask("0x00", "na", "supermicro")).toBe("ok"); // mask unknown → under-report
|
|
105
|
+
});
|
|
106
|
+
});
|
|
49
107
|
//# sourceMappingURL=vendor-sensors.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vendor-sensors.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/vendor-sensors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"vendor-sensors.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/vendor-sensors.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -246,10 +246,19 @@ export interface IpmiInfo {
|
|
|
246
246
|
status: string;
|
|
247
247
|
upper_critical?: number;
|
|
248
248
|
}>;
|
|
249
|
+
/**
|
|
250
|
+
* Named-sensor ECC counters from `ipmitool sensor`. `null` when the
|
|
251
|
+
* agent could not probe IPMI at all (no ipmitool, no /dev/ipmi0, etc.).
|
|
252
|
+
* Distinguishes "we have a real zero reading from the BMC" from "we
|
|
253
|
+
* couldn't ask". Before 0.9.4 this was always `{ correctable: 0,
|
|
254
|
+
* uncorrectable: 0 }` even when IPMI was unavailable, which made the
|
|
255
|
+
* Forge dashboard render "ECC: 0 / 0" on boxes that aren't being
|
|
256
|
+
* probed. glassmkr#29 / cross-vendor IPMI audit Phase 1.
|
|
257
|
+
*/
|
|
249
258
|
ecc_errors: {
|
|
250
259
|
correctable: number;
|
|
251
260
|
uncorrectable: number;
|
|
252
|
-
};
|
|
261
|
+
} | null;
|
|
253
262
|
/**
|
|
254
263
|
* ECC error counts derived from SEL events instead of named sensors.
|
|
255
264
|
* Dell iDRAC reports memory ECC only via SEL on the Memory entity, so
|
|
@@ -268,7 +277,12 @@ export interface IpmiInfo {
|
|
|
268
277
|
* exists; the rule then falls back to per-PSU status checks.
|
|
269
278
|
*/
|
|
270
279
|
psu_redundancy_state?: PsuRedundancyState;
|
|
271
|
-
|
|
280
|
+
/**
|
|
281
|
+
* `null` when ECC/sensor data is unavailable for the same reason as
|
|
282
|
+
* `ecc_errors`. Distinguishes "BMC reports 0 SEL events" from "we
|
|
283
|
+
* couldn't ask the BMC".
|
|
284
|
+
*/
|
|
285
|
+
sel_entries_count: number | null;
|
|
272
286
|
sel_events_recent: SelEvent[];
|
|
273
287
|
fans: FanStatus[];
|
|
274
288
|
}
|
|
@@ -3,16 +3,25 @@ import type { Vendor } from "./types.js";
|
|
|
3
3
|
* True if `name` looks like an individual PSU sensor (status / wattage / etc.)
|
|
4
4
|
* for the given vendor.
|
|
5
5
|
*
|
|
6
|
-
* Generic patterns cover Supermicro
|
|
7
|
-
*
|
|
6
|
+
* Generic patterns cover Supermicro / HPE / ASRockRack / Gigabyte / Dell
|
|
7
|
+
* across the validation fleet:
|
|
8
|
+
* "PSU1 Status" (ASRockRack X570D4U)
|
|
9
|
+
* "Power Supply 1" (HPE iLO)
|
|
10
|
+
* "PSU2 Power Out" (Supermicro extended)
|
|
11
|
+
* "PS1 Status" (Supermicro H12SST, space separator)
|
|
12
|
+
* "PS1_Status" (Gigabyte MC12-LE0, MZ62-HD0, R292-4S1, underscore separator)
|
|
13
|
+
* "PS1 Status" (Dell iDRAC PowerEdge family)
|
|
8
14
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
15
|
+
* Previously this filter only matched the "psu" or "power supply"
|
|
16
|
+
* substrings plus a Dell-gated `/^ps\d+\b/` pattern. That left every
|
|
17
|
+
* Supermicro/Gigabyte BMC that uses the `PS<N>` shape outside the
|
|
18
|
+
* filter, so the per-PSU rule path never even reached them.
|
|
19
|
+
* glassmkr#29 component.
|
|
11
20
|
*
|
|
12
|
-
*
|
|
21
|
+
* `PS Redundancy` (aggregate sensor) is excluded — see
|
|
13
22
|
* `isPsuRedundancySensor`.
|
|
14
23
|
*/
|
|
15
|
-
export declare function isPsuSensor(name: string,
|
|
24
|
+
export declare function isPsuSensor(name: string, _vendor: Vendor): boolean;
|
|
16
25
|
/**
|
|
17
26
|
* True if `name` is the aggregate PSU redundancy state sensor.
|
|
18
27
|
* Currently only Dell exposes this as a discrete sensor reading;
|
|
@@ -25,3 +34,33 @@ export declare function isPsuRedundancySensor(name: string, vendor: Vendor): boo
|
|
|
25
34
|
* "Redundancy Degraded", or "0x01"-style raw codes depending on iDRAC firmware.
|
|
26
35
|
*/
|
|
27
36
|
export declare function classifyPsuRedundancyState(valueOrStatus: string): "fully_redundant" | "redundancy_lost" | "redundancy_degraded" | "unknown";
|
|
37
|
+
/**
|
|
38
|
+
* Per-PSU sensor classification from the discrete-state bitmask reported
|
|
39
|
+
* by `ipmitool sensor` for sensor type 0x08 (Power Supply). The Reading
|
|
40
|
+
* column carries a hex value whose bits are defined by IPMI 2.0 spec
|
|
41
|
+
* table 42-3:
|
|
42
|
+
*
|
|
43
|
+
* bit 0 (0x01): Presence detected
|
|
44
|
+
* bit 1 (0x02): Power Supply Failure detected
|
|
45
|
+
* bit 2 (0x04): Predictive Failure
|
|
46
|
+
* bit 3 (0x08): Power Supply input lost (AC/DC)
|
|
47
|
+
* bit 4 (0x10): Power Supply input lost or out-of-range
|
|
48
|
+
* bit 5 (0x20): Power Supply input out-of-range, but present
|
|
49
|
+
* bit 6 (0x40): Configuration error
|
|
50
|
+
* bit 7 (0x80): Power Supply Inactive (standby; not delivering power)
|
|
51
|
+
*
|
|
52
|
+
* `mask` is the discrete-state assertion mask Crucible reads from the 4th
|
|
53
|
+
* column of `ipmitool sensor` for discrete sensors — which bits this BMC's
|
|
54
|
+
* firmware can assert. When the mask doesn't include the Presence bit, a
|
|
55
|
+
* Reading of 0x0 is ambiguous (PSU healthy with no events, OR PSU absent).
|
|
56
|
+
* In that case we under-report (return `ok`) rather than over-report.
|
|
57
|
+
* glassmkr#29.
|
|
58
|
+
*
|
|
59
|
+
* `vendor` is currently advisory — bit meanings are IPMI-standard across
|
|
60
|
+
* the bare-metal vendors we've observed on the validation fleet
|
|
61
|
+
* (Supermicro, Gigabyte, ASRockRack); the BMC-to-BMC variation is in the
|
|
62
|
+
* mask, not the bit semantics. Kept as a parameter for future per-vendor
|
|
63
|
+
* escape hatches.
|
|
64
|
+
*/
|
|
65
|
+
export type PsuSensorState = "ok" | "failed" | "ac_lost" | "predictive" | "absent" | "inactive" | "unknown";
|
|
66
|
+
export declare function classifyPsuSensorBitmask(valueHex: string, mask: string | undefined, _vendor: Vendor): PsuSensorState;
|
|
@@ -10,25 +10,33 @@
|
|
|
10
10
|
* True if `name` looks like an individual PSU sensor (status / wattage / etc.)
|
|
11
11
|
* for the given vendor.
|
|
12
12
|
*
|
|
13
|
-
* Generic patterns cover Supermicro
|
|
14
|
-
*
|
|
13
|
+
* Generic patterns cover Supermicro / HPE / ASRockRack / Gigabyte / Dell
|
|
14
|
+
* across the validation fleet:
|
|
15
|
+
* "PSU1 Status" (ASRockRack X570D4U)
|
|
16
|
+
* "Power Supply 1" (HPE iLO)
|
|
17
|
+
* "PSU2 Power Out" (Supermicro extended)
|
|
18
|
+
* "PS1 Status" (Supermicro H12SST, space separator)
|
|
19
|
+
* "PS1_Status" (Gigabyte MC12-LE0, MZ62-HD0, R292-4S1, underscore separator)
|
|
20
|
+
* "PS1 Status" (Dell iDRAC PowerEdge family)
|
|
15
21
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
22
|
+
* Previously this filter only matched the "psu" or "power supply"
|
|
23
|
+
* substrings plus a Dell-gated `/^ps\d+\b/` pattern. That left every
|
|
24
|
+
* Supermicro/Gigabyte BMC that uses the `PS<N>` shape outside the
|
|
25
|
+
* filter, so the per-PSU rule path never even reached them.
|
|
26
|
+
* glassmkr#29 component.
|
|
18
27
|
*
|
|
19
|
-
*
|
|
28
|
+
* `PS Redundancy` (aggregate sensor) is excluded — see
|
|
20
29
|
* `isPsuRedundancySensor`.
|
|
21
30
|
*/
|
|
22
|
-
export function isPsuSensor(name,
|
|
31
|
+
export function isPsuSensor(name, _vendor) {
|
|
23
32
|
const lower = name.toLowerCase();
|
|
24
33
|
if (lower.includes("psu") || lower.includes("power supply"))
|
|
25
34
|
return true;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
35
|
+
// Generic `PS<digit>` with optional space/underscore separator and
|
|
36
|
+
// suffix. Anchored to start so we don't accidentally swallow names
|
|
37
|
+
// like "PS Redundancy" (no digit) or "SOMETHING-PS1" (mid-string).
|
|
38
|
+
if (/^ps\d+[\s_]?/i.test(name))
|
|
39
|
+
return true;
|
|
32
40
|
return false;
|
|
33
41
|
}
|
|
34
42
|
/**
|
|
@@ -60,4 +68,39 @@ export function classifyPsuRedundancyState(valueOrStatus) {
|
|
|
60
68
|
return "fully_redundant";
|
|
61
69
|
return "unknown";
|
|
62
70
|
}
|
|
71
|
+
export function classifyPsuSensorBitmask(valueHex, mask, _vendor) {
|
|
72
|
+
const v = valueHex.trim().toLowerCase().replace(/^0x/, "");
|
|
73
|
+
if (!v || v === "na")
|
|
74
|
+
return "unknown";
|
|
75
|
+
const value = parseInt(v, 16);
|
|
76
|
+
if (Number.isNaN(value))
|
|
77
|
+
return "unknown";
|
|
78
|
+
const m = mask?.trim().toLowerCase().replace(/^0x/, "");
|
|
79
|
+
const maskNum = m && m !== "na" ? parseInt(m, 16) : NaN;
|
|
80
|
+
// Failure bits take precedence: a BMC that asserts both Presence (bit 0)
|
|
81
|
+
// AND Failure (bit 1) still has a failed PSU.
|
|
82
|
+
if (value & 0x02)
|
|
83
|
+
return "failed";
|
|
84
|
+
if (value & 0x08)
|
|
85
|
+
return "ac_lost";
|
|
86
|
+
if (value & 0x10)
|
|
87
|
+
return "ac_lost";
|
|
88
|
+
if (value & 0x20)
|
|
89
|
+
return "ac_lost";
|
|
90
|
+
if (value & 0x04)
|
|
91
|
+
return "predictive";
|
|
92
|
+
// Standby/inactive: in a redundant pair the inactive PSU may be the
|
|
93
|
+
// backup. Report as `inactive` and let the caller decide. Only
|
|
94
|
+
// meaningful if the BMC says it can report bit 7.
|
|
95
|
+
if (!Number.isNaN(maskNum) && (maskNum & 0x80) && (value & 0x80))
|
|
96
|
+
return "inactive";
|
|
97
|
+
// Presence: only meaningful when the BMC reports it can assert bit 0.
|
|
98
|
+
// If the mask doesn't include bit 0, Reading=0x0 is ambiguous, and
|
|
99
|
+
// returning `ok` is the under-report safe default.
|
|
100
|
+
if (!Number.isNaN(maskNum) && (maskNum & 0x01)) {
|
|
101
|
+
if (!(value & 0x01))
|
|
102
|
+
return "absent";
|
|
103
|
+
}
|
|
104
|
+
return "ok";
|
|
105
|
+
}
|
|
63
106
|
//# sourceMappingURL=vendor-sensors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vendor-sensors.js","sourceRoot":"","sources":["../../src/lib/vendor-sensors.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,uEAAuE;AACvE,sEAAsE;AACtE,wEAAwE;AACxE,gCAAgC;AAIhC
|
|
1
|
+
{"version":3,"file":"vendor-sensors.js","sourceRoot":"","sources":["../../src/lib/vendor-sensors.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AACzE,uEAAuE;AACvE,sEAAsE;AACtE,wEAAwE;AACxE,gCAAgC;AAIhC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,mEAAmE;IACnE,mEAAmE;IACnE,mEAAmE;IACnE,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,MAAc;IAChE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,aAAqB;IAC9D,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACrG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACrD,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAC7D,uEAAuE;IACvE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,iBAAiB,CAAC;IAC7C,OAAO,SAAS,CAAC;AACnB,CAAC;AAuCD,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,IAAwB,EACxB,OAAe;IAEf,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE1C,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAExD,yEAAyE;IACzE,8CAA8C;IAC9C,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,YAAY,CAAC;IAEtC,oEAAoE;IACpE,+DAA+D;IAC/D,kDAAkD;IAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IAEpF,sEAAsE;IACtE,mEAAmE;IACnE,mDAAmD;IACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/metrics-server.js
CHANGED
|
@@ -84,8 +84,13 @@ function formatPrometheus(snap) {
|
|
|
84
84
|
lines.push(`glassmkr_ipmi_sensor{sensor="${sensor.name}",unit="${sensor.unit}"} ${sensor.value}`);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
// ecc_errors is null when IPMI couldn't be probed at all (no
|
|
88
|
+
// ipmitool / no /dev/ipmi0). Omit the Prometheus lines in that case
|
|
89
|
+
// so scrapers don't record "0" as if it were a real measurement.
|
|
90
|
+
if (snap.ipmi.ecc_errors) {
|
|
91
|
+
lines.push(`glassmkr_ipmi_ecc_correctable ${snap.ipmi.ecc_errors.correctable}`);
|
|
92
|
+
lines.push(`glassmkr_ipmi_ecc_uncorrectable ${snap.ipmi.ecc_errors.uncorrectable}`);
|
|
93
|
+
}
|
|
89
94
|
// Fans
|
|
90
95
|
if (snap.ipmi.fans) {
|
|
91
96
|
for (const fan of snap.ipmi.fans) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-server.js","sourceRoot":"","sources":["../src/metrics-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"metrics-server.js","sourceRoot":"","sources":["../src/metrics-server.ts"],"names":[],"mappings":"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"}
|