@glassmkr/crucible 0.13.24 → 0.13.26
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { parseSmartctlJson } from "../smart.js";
|
|
2
|
+
import { parseSmartctlJson, unpackSeagateCounter } from "../smart.js";
|
|
3
3
|
describe("parseSmartctlJson", () => {
|
|
4
4
|
it("returns null when smartctl could not interrogate the device (no smart_status)", () => {
|
|
5
5
|
// Real case (agentic-17): /dev/sda is the BMC's virtual-media USB device
|
|
@@ -143,5 +143,167 @@ describe("parseSmartctlJson", () => {
|
|
|
143
143
|
}, "/dev/sda");
|
|
144
144
|
expect(info.percentage_used).toBe(70);
|
|
145
145
|
});
|
|
146
|
+
it("parses the expanded early-warning attribute set on an HDD", () => {
|
|
147
|
+
const info = parseSmartctlJson({
|
|
148
|
+
model_name: "WDC WD40EFRX",
|
|
149
|
+
smart_status: { passed: true },
|
|
150
|
+
ata_smart_attributes: {
|
|
151
|
+
table: [
|
|
152
|
+
{ id: 5, name: "Reallocated_Sector_Ct", raw: { value: 2 } },
|
|
153
|
+
{ id: 10, name: "Spin_Retry_Count", raw: { value: 1 } },
|
|
154
|
+
{ id: 187, name: "Reported_Uncorrect", raw: { value: 4 } },
|
|
155
|
+
{ id: 188, name: "Command_Timeout", raw: { value: 7 } },
|
|
156
|
+
{ id: 189, name: "High_Fly_Writes", raw: { value: 3 } },
|
|
157
|
+
{ id: 196, name: "Reallocated_Event_Count", raw: { value: 2 } },
|
|
158
|
+
{ id: 197, name: "Current_Pending_Sector", raw: { value: 8 } },
|
|
159
|
+
{ id: 198, name: "Offline_Uncorrectable", raw: { value: 5 } },
|
|
160
|
+
{ id: 199, name: "UDMA_CRC_Error_Count", raw: { value: 11 } },
|
|
161
|
+
],
|
|
162
|
+
},
|
|
163
|
+
}, "/dev/sdb");
|
|
164
|
+
expect(info).toMatchObject({
|
|
165
|
+
reallocated_sectors: 2,
|
|
166
|
+
spin_retries: 1,
|
|
167
|
+
reported_uncorrectable: 4,
|
|
168
|
+
command_timeout: 7,
|
|
169
|
+
high_fly_writes: 3,
|
|
170
|
+
reallocation_events: 2,
|
|
171
|
+
pending_sectors: 8,
|
|
172
|
+
offline_uncorrectable: 5,
|
|
173
|
+
udma_crc_errors: 11,
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
it("unpacks the packed 188 raw ONLY on Seagate; 187/189 stay verbatim", () => {
|
|
177
|
+
// Seagate packs 188 as 16-bit sub-counters; the low 16 bits are the count.
|
|
178
|
+
expect(unpackSeagateCounter(0)).toBe(0);
|
|
179
|
+
expect(unpackSeagateCounter(7)).toBe(7);
|
|
180
|
+
expect(unpackSeagateCounter(0x000100000002)).toBe(2);
|
|
181
|
+
const seagate = parseSmartctlJson({
|
|
182
|
+
model_name: "ST12000NM0007",
|
|
183
|
+
smart_status: { passed: true },
|
|
184
|
+
ata_smart_attributes: {
|
|
185
|
+
table: [
|
|
186
|
+
{ id: 188, name: "Command_Timeout", raw: { value: 0x000100000002 } },
|
|
187
|
+
// 187/189 are NOT packed even on Seagate: must pass through verbatim,
|
|
188
|
+
// never truncated by a magnitude heuristic.
|
|
189
|
+
{ id: 187, name: "Reported_Uncorrect", raw: { value: 0x000100000002 } },
|
|
190
|
+
{ id: 189, name: "High_Fly_Writes", raw: { value: 70000 } },
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
}, "/dev/sdc");
|
|
194
|
+
expect(seagate.command_timeout).toBe(2);
|
|
195
|
+
expect(seagate.reported_uncorrectable).toBe(0x000100000002);
|
|
196
|
+
expect(seagate.high_fly_writes).toBe(70000);
|
|
197
|
+
});
|
|
198
|
+
it("leaves a non-Seagate 188 verbatim even above 65535 (no false truncation)", () => {
|
|
199
|
+
// A WD drive reporting a genuine large 188 must not be truncated: the
|
|
200
|
+
// >0xffff heuristic is Seagate-only, or a real count corrupts.
|
|
201
|
+
const wd = parseSmartctlJson({
|
|
202
|
+
model_name: "WDC WD40EFRX",
|
|
203
|
+
smart_status: { passed: true },
|
|
204
|
+
ata_smart_attributes: {
|
|
205
|
+
table: [{ id: 188, name: "Command_Timeout", raw: { value: 70000 } }],
|
|
206
|
+
},
|
|
207
|
+
}, "/dev/sdb");
|
|
208
|
+
expect(wd.command_timeout).toBe(70000);
|
|
209
|
+
});
|
|
210
|
+
it("does not read a SATA-SSD id-189 (SSD Health Flags) as high fly writes", () => {
|
|
211
|
+
// Seagate Nytro XF1230 SATA SSD reports id 189 as "SSD_Health_Flags", not
|
|
212
|
+
// head-flying. 189 is name-gated so a flags bitfield never feeds the
|
|
213
|
+
// high-fly-writes burst detector.
|
|
214
|
+
const ssd = parseSmartctlJson({
|
|
215
|
+
model_name: "XF1230-1A0480",
|
|
216
|
+
smart_status: { passed: true },
|
|
217
|
+
ata_smart_attributes: {
|
|
218
|
+
table: [{ id: 189, name: "SSD_Health_Flags", raw: { value: 8 } }],
|
|
219
|
+
},
|
|
220
|
+
}, "/dev/sdb");
|
|
221
|
+
expect(ssd.high_fly_writes).toBeUndefined();
|
|
222
|
+
});
|
|
223
|
+
it("summarizes the self-test log, keeping the newest failure separate", () => {
|
|
224
|
+
// Newest entry is a later PASSING short test; the read failure two slots
|
|
225
|
+
// back must still surface via last_failed_* (with its LBA), or a routine
|
|
226
|
+
// short test would mask a genuine surface defect.
|
|
227
|
+
const info = parseSmartctlJson({
|
|
228
|
+
model_name: "TOSHIBA MG07ACA14TE",
|
|
229
|
+
smart_status: { passed: true },
|
|
230
|
+
power_on_time: { hours: 30200 },
|
|
231
|
+
ata_smart_self_test_log: {
|
|
232
|
+
standard: {
|
|
233
|
+
table: [
|
|
234
|
+
{ type: { string: "Short offline" }, status: { value: 0, string: "Completed without error", passed: true }, lifetime_hours: 30190 },
|
|
235
|
+
{ type: { string: "Extended offline" }, status: { value: 121, string: "Completed: read failure", passed: false }, lifetime_hours: 30157, lba: 234593524 },
|
|
236
|
+
{ type: { string: "Short offline" }, status: { value: 0, string: "Completed without error", passed: true }, lifetime_hours: 29000 },
|
|
237
|
+
],
|
|
238
|
+
error_count_total: 1,
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
}, "/dev/sdd");
|
|
242
|
+
expect(info.self_test).toEqual({
|
|
243
|
+
last_type: "Short offline",
|
|
244
|
+
last_status: "Completed without error",
|
|
245
|
+
last_passed: true,
|
|
246
|
+
last_lifetime_hours: 30190,
|
|
247
|
+
last_failed_lba: 234593524,
|
|
248
|
+
last_failed_lifetime_hours: 30157,
|
|
249
|
+
error_count_total: 1,
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
it("classifies a fatal self-test (nibble 3) as a failure even when smartctl omits `passed`", () => {
|
|
253
|
+
// smartmontools deliberately omits status.passed for nibble 3
|
|
254
|
+
// (fatal/unknown error). Failure detection must rely on the high nibble
|
|
255
|
+
// alone, or a fatal self-test failure is silently dropped.
|
|
256
|
+
const info = parseSmartctlJson({
|
|
257
|
+
model_name: "WDC WD100EFAX",
|
|
258
|
+
smart_status: { passed: true },
|
|
259
|
+
power_on_time: { hours: 500 },
|
|
260
|
+
ata_smart_self_test_log: {
|
|
261
|
+
standard: {
|
|
262
|
+
table: [
|
|
263
|
+
{ type: { string: "Extended offline" }, status: { value: 0x30, string: "Completed: unknown failure or in progress" }, lifetime_hours: 480 },
|
|
264
|
+
],
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
}, "/dev/sdf");
|
|
268
|
+
expect(info.self_test?.last_failed_lifetime_hours).toBe(480);
|
|
269
|
+
});
|
|
270
|
+
it("does not treat an aborted self-test as a failure", () => {
|
|
271
|
+
// Status nibble 1 = aborted by host. Some smartctl versions mark it
|
|
272
|
+
// passed=false; an abort is an interruption, not a drive failure.
|
|
273
|
+
const info = parseSmartctlJson({
|
|
274
|
+
model_name: "ST4000DM004",
|
|
275
|
+
smart_status: { passed: true },
|
|
276
|
+
ata_smart_self_test_log: {
|
|
277
|
+
standard: {
|
|
278
|
+
table: [
|
|
279
|
+
{ type: { string: "Extended offline" }, status: { value: 25, string: "Aborted by host", passed: false }, lifetime_hours: 100 },
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
}, "/dev/sde");
|
|
284
|
+
expect(info.self_test?.last_status).toBe("Aborted by host");
|
|
285
|
+
expect(info.self_test?.last_failed_lifetime_hours).toBeUndefined();
|
|
286
|
+
expect(info.self_test?.last_failed_lba).toBeUndefined();
|
|
287
|
+
});
|
|
288
|
+
it("omits self_test when the drive has no self-test log", () => {
|
|
289
|
+
const info = parseSmartctlJson({
|
|
290
|
+
model_name: "X",
|
|
291
|
+
smart_status: { passed: true },
|
|
292
|
+
}, "/dev/sda");
|
|
293
|
+
expect(info.self_test).toBeUndefined();
|
|
294
|
+
});
|
|
295
|
+
it("parses NVMe media_errors and num_err_log_entries", () => {
|
|
296
|
+
const info = parseSmartctlJson({
|
|
297
|
+
model_name: "Samsung PM9A3",
|
|
298
|
+
smart_status: { passed: true },
|
|
299
|
+
nvme_smart_health_information_log: {
|
|
300
|
+
percentage_used: 3,
|
|
301
|
+
media_errors: 2,
|
|
302
|
+
num_err_log_entries: 14,
|
|
303
|
+
},
|
|
304
|
+
}, "/dev/nvme0n1");
|
|
305
|
+
expect(info.media_errors).toBe(2);
|
|
306
|
+
expect(info.num_err_log_entries).toBe(14);
|
|
307
|
+
});
|
|
146
308
|
});
|
|
147
309
|
//# sourceMappingURL=smart.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart.test.js","sourceRoot":"","sources":["../../../src/collect/__tests__/smart.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"smart.test.js","sourceRoot":"","sources":["../../../src/collect/__tests__/smart.test.ts"],"names":[],"mappings":"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"}
|
package/dist/collect/smart.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export declare function parseSmartctlJson(data: Record<string, unknown> & {
|
|
|
21
21
|
critical_warning?: number;
|
|
22
22
|
available_spare?: number;
|
|
23
23
|
available_spare_threshold?: number;
|
|
24
|
+
media_errors?: number;
|
|
25
|
+
num_err_log_entries?: number;
|
|
24
26
|
};
|
|
25
27
|
ata_smart_attributes?: {
|
|
26
28
|
table?: Array<{
|
|
@@ -32,7 +34,33 @@ export declare function parseSmartctlJson(data: Record<string, unknown> & {
|
|
|
32
34
|
};
|
|
33
35
|
}>;
|
|
34
36
|
};
|
|
37
|
+
ata_smart_self_test_log?: {
|
|
38
|
+
standard?: {
|
|
39
|
+
table?: Array<{
|
|
40
|
+
type?: {
|
|
41
|
+
string?: string;
|
|
42
|
+
};
|
|
43
|
+
status?: {
|
|
44
|
+
value?: number;
|
|
45
|
+
string?: string;
|
|
46
|
+
passed?: boolean;
|
|
47
|
+
};
|
|
48
|
+
lifetime_hours?: number;
|
|
49
|
+
lba?: number;
|
|
50
|
+
}>;
|
|
51
|
+
error_count_total?: number;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
35
54
|
}, device: string): SmartInfo | null;
|
|
55
|
+
/**
|
|
56
|
+
* Unpack a Seagate multi-counter SMART raw value. Seagate firmware packs up
|
|
57
|
+
* to three 16-bit counters into the 48-bit raw for some attributes (188
|
|
58
|
+
* Command_Timeout is the documented case: the low 16 bits are the actual
|
|
59
|
+
* timeout count, higher words are threshold-bucketed variants). Values that
|
|
60
|
+
* fit in 16 bits pass through unchanged, so plain counters on other vendors
|
|
61
|
+
* are unaffected.
|
|
62
|
+
*/
|
|
63
|
+
export declare function unpackSeagateCounter(raw: number): number;
|
|
36
64
|
/**
|
|
37
65
|
* Decode the NVMe Critical Warning byte (NVM Express spec §5.21):
|
|
38
66
|
* bit 0: available spare below threshold
|
package/dist/collect/smart.js
CHANGED
|
@@ -76,6 +76,15 @@ export function parseSmartctlJson(data, device) {
|
|
|
76
76
|
if (typeof nvme.available_spare_threshold === "number") {
|
|
77
77
|
info.nvme_available_spare_threshold = nvme.available_spare_threshold;
|
|
78
78
|
}
|
|
79
|
+
// Error counters from the same health log page: uncorrectable media
|
|
80
|
+
// errors and the error-information log entry count. Growth over time is
|
|
81
|
+
// the signal; the dashboard owns interpretation.
|
|
82
|
+
if (typeof nvme.media_errors === "number") {
|
|
83
|
+
info.media_errors = nvme.media_errors;
|
|
84
|
+
}
|
|
85
|
+
if (typeof nvme.num_err_log_entries === "number") {
|
|
86
|
+
info.num_err_log_entries = nvme.num_err_log_entries;
|
|
87
|
+
}
|
|
79
88
|
}
|
|
80
89
|
// SATA specific
|
|
81
90
|
if (data.ata_smart_attributes?.table) {
|
|
@@ -95,6 +104,10 @@ export function parseSmartctlJson(data, device) {
|
|
|
95
104
|
// that the regex above already catches. Skip anything that looks like a
|
|
96
105
|
// temperature attribute.
|
|
97
106
|
let ssdWearUsedPct = null;
|
|
107
|
+
// Seagate firmware packs multi-counters into some 48-bit raws; the unpack
|
|
108
|
+
// is applied ONLY to Seagate 188 (see below). Detect by model.
|
|
109
|
+
const modelStr = `${data.model_name ?? ""} ${data.model_family ?? ""}`.toLowerCase();
|
|
110
|
+
const isSeagate = /seagate|\bst\d{3,}/.test(modelStr);
|
|
98
111
|
for (const attr of data.ata_smart_attributes.table) {
|
|
99
112
|
if (attr.id === 5 || attr.name === "Reallocated_Sector_Ct") {
|
|
100
113
|
info.reallocated_sectors = attr.raw?.value || 0;
|
|
@@ -102,6 +115,45 @@ export function parseSmartctlJson(data, device) {
|
|
|
102
115
|
if (attr.id === 197 || attr.name === "Current_Pending_Sector") {
|
|
103
116
|
info.pending_sectors = attr.raw?.value || 0;
|
|
104
117
|
}
|
|
118
|
+
// Drive-health early-warning expansion (2026-07-16): the remaining
|
|
119
|
+
// Backblaze-five markers (187/188/198) plus path (199), mechanical
|
|
120
|
+
// (10, 189) and remap-event (196) counters. Raw values only; the
|
|
121
|
+
// dashboard owns threshold/trend interpretation.
|
|
122
|
+
if (attr.id === 187 || attr.name === "Reported_Uncorrect") {
|
|
123
|
+
// Verbatim: smartmontools treats 187 as a raw 48-bit value. Only
|
|
124
|
+
// Seagate 188 is a documented packed counter (see below), so do NOT
|
|
125
|
+
// truncate 187 (a magnitude heuristic would corrupt a legitimate
|
|
126
|
+
// count above 65535 on any vendor).
|
|
127
|
+
info.reported_uncorrectable = attr.raw?.value || 0;
|
|
128
|
+
}
|
|
129
|
+
if (attr.id === 188 || attr.name === "Command_Timeout") {
|
|
130
|
+
// Seagate packs 188 as three 16-bit counters in the 48-bit raw; the
|
|
131
|
+
// low 16 bits are the actual timeout count. Unpack ONLY on Seagate;
|
|
132
|
+
// every other vendor reports a plain raw that must pass through, or a
|
|
133
|
+
// genuine large count would be truncated.
|
|
134
|
+
const raw = attr.raw?.value || 0;
|
|
135
|
+
info.command_timeout = isSeagate ? unpackSeagateCounter(raw) : raw;
|
|
136
|
+
}
|
|
137
|
+
// 189: name-gated, NOT id-gated. ID 189 is High_Fly_Writes on rotating
|
|
138
|
+
// HDDs but "SSD Health Flags" (PLP/thermal state) on some SATA SSDs
|
|
139
|
+
// (e.g. Seagate Nytro XF1230), where an id-only match would feed a
|
|
140
|
+
// flags bitfield into the high-fly-writes burst detector as a false
|
|
141
|
+
// warning. The drivedb name is authoritative (the id-231 lesson).
|
|
142
|
+
if (attr.name === "High_Fly_Writes") {
|
|
143
|
+
info.high_fly_writes = attr.raw?.value || 0;
|
|
144
|
+
}
|
|
145
|
+
if (attr.id === 10 || attr.name === "Spin_Retry_Count") {
|
|
146
|
+
info.spin_retries = attr.raw?.value || 0;
|
|
147
|
+
}
|
|
148
|
+
if (attr.id === 196 || attr.name === "Reallocated_Event_Count") {
|
|
149
|
+
info.reallocation_events = attr.raw?.value || 0;
|
|
150
|
+
}
|
|
151
|
+
if (attr.id === 198 || attr.name === "Offline_Uncorrectable") {
|
|
152
|
+
info.offline_uncorrectable = attr.raw?.value || 0;
|
|
153
|
+
}
|
|
154
|
+
if (attr.id === 199 || attr.name === "UDMA_CRC_Error_Count") {
|
|
155
|
+
info.udma_crc_errors = attr.raw?.value || 0;
|
|
156
|
+
}
|
|
105
157
|
const name = (attr.name || "").toLowerCase();
|
|
106
158
|
const isWearName = /wear.?level|wearout|life.?left|life.?time|percent.?life|ssd.?life|endurance/.test(name);
|
|
107
159
|
const isWearId = attr.id === 202 || attr.id === 233 || attr.id === 177 || attr.id === 173;
|
|
@@ -121,8 +173,55 @@ export function parseSmartctlJson(data, device) {
|
|
|
121
173
|
info.percentage_used = ssdWearUsedPct;
|
|
122
174
|
}
|
|
123
175
|
}
|
|
176
|
+
// SMART self-test log (ATA; `--all` includes it, so this is parse-only).
|
|
177
|
+
// Emit a compact summary rather than the whole 21-slot table. last_failed_*
|
|
178
|
+
// tracks the newest FAILED entry separately from the newest entry: a later
|
|
179
|
+
// passing short test would otherwise mask a read failure. Log entries
|
|
180
|
+
// persist for the drive's life and lifetime_hours wraps mod 65536 (ATA
|
|
181
|
+
// spec), so consumers must recency-gate against power_on_hours before
|
|
182
|
+
// alerting on a failure.
|
|
183
|
+
const selftest = data.ata_smart_self_test_log?.standard;
|
|
184
|
+
if (selftest?.table && selftest.table.length > 0) {
|
|
185
|
+
const newest = selftest.table[0];
|
|
186
|
+
// Failure = status high nibble 3..8 (fatal/unknown/electrical/servo/read/
|
|
187
|
+
// handling damage per ATA), which already excludes aborted-by-host (1)
|
|
188
|
+
// and interrupted-by-reset (2). The nibble is the authoritative signal;
|
|
189
|
+
// we do NOT also require status.passed === false, because smartmontools
|
|
190
|
+
// omits `passed` for nibble 3 (fatal/unknown), so an AND would silently
|
|
191
|
+
// drop a fatal self-test failure.
|
|
192
|
+
const failed = selftest.table.find((e) => {
|
|
193
|
+
const nibble = (e.status?.value ?? 0) >> 4;
|
|
194
|
+
return nibble >= 3 && nibble <= 8;
|
|
195
|
+
});
|
|
196
|
+
info.self_test = {
|
|
197
|
+
last_type: newest.type?.string,
|
|
198
|
+
last_status: newest.status?.string || "unknown",
|
|
199
|
+
last_passed: newest.status?.passed,
|
|
200
|
+
last_lifetime_hours: newest.lifetime_hours,
|
|
201
|
+
};
|
|
202
|
+
if (failed) {
|
|
203
|
+
info.self_test.last_failed_lifetime_hours = failed.lifetime_hours;
|
|
204
|
+
if (typeof failed.lba === "number") {
|
|
205
|
+
info.self_test.last_failed_lba = failed.lba;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (typeof selftest.error_count_total === "number") {
|
|
209
|
+
info.self_test.error_count_total = selftest.error_count_total;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
124
212
|
return info;
|
|
125
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* Unpack a Seagate multi-counter SMART raw value. Seagate firmware packs up
|
|
216
|
+
* to three 16-bit counters into the 48-bit raw for some attributes (188
|
|
217
|
+
* Command_Timeout is the documented case: the low 16 bits are the actual
|
|
218
|
+
* timeout count, higher words are threshold-bucketed variants). Values that
|
|
219
|
+
* fit in 16 bits pass through unchanged, so plain counters on other vendors
|
|
220
|
+
* are unaffected.
|
|
221
|
+
*/
|
|
222
|
+
export function unpackSeagateCounter(raw) {
|
|
223
|
+
return raw > 0xffff ? raw % 0x10000 : raw;
|
|
224
|
+
}
|
|
126
225
|
/**
|
|
127
226
|
* Decode the NVMe Critical Warning byte (NVM Express spec §5.21):
|
|
128
227
|
* bit 0: available spare below threshold
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart.js","sourceRoot":"","sources":["../../src/collect/smart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,qBAAqB;IACrB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAAE,SAAS;YAC9F,mEAAmE;YACnE,iEAAiE;YACjE,oEAAoE;YACpE,8DAA8D;YAC9D,sCAAsC;YACtC,IAAI,CAAC;gBACH,IAAI,QAAQ,CAAC,YAAY,CAAC,cAAc,KAAK,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;oBAAE,SAAS;YAC7F,CAAC;YAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"smart.js","sourceRoot":"","sources":["../../src/collect/smart.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -678,6 +678,32 @@ export interface SmartInfo {
|
|
|
678
678
|
};
|
|
679
679
|
nvme_available_spare?: number;
|
|
680
680
|
nvme_available_spare_threshold?: number;
|
|
681
|
+
reported_uncorrectable?: number;
|
|
682
|
+
command_timeout?: number;
|
|
683
|
+
high_fly_writes?: number;
|
|
684
|
+
spin_retries?: number;
|
|
685
|
+
reallocation_events?: number;
|
|
686
|
+
offline_uncorrectable?: number;
|
|
687
|
+
/** 199 UDMA CRC: interface/cabling errors, NOT media health. */
|
|
688
|
+
udma_crc_errors?: number;
|
|
689
|
+
media_errors?: number;
|
|
690
|
+
num_err_log_entries?: number;
|
|
691
|
+
/**
|
|
692
|
+
* Newest SMART self-test log state (ATA; smartctl --all carries the log).
|
|
693
|
+
* last_failed_* is the newest FAILED entry, kept separately because a later
|
|
694
|
+
* passing test would otherwise mask a read failure in the newest slot.
|
|
695
|
+
* lifetime_hours wraps mod 65536 per ATA spec; consumers must recency-gate
|
|
696
|
+
* a failure against power_on_hours before alerting.
|
|
697
|
+
*/
|
|
698
|
+
self_test?: {
|
|
699
|
+
last_type?: string;
|
|
700
|
+
last_status: string;
|
|
701
|
+
last_passed?: boolean;
|
|
702
|
+
last_lifetime_hours?: number;
|
|
703
|
+
last_failed_lba?: number;
|
|
704
|
+
last_failed_lifetime_hours?: number;
|
|
705
|
+
error_count_total?: number;
|
|
706
|
+
};
|
|
681
707
|
}
|
|
682
708
|
export interface NetworkInfo {
|
|
683
709
|
interface: string;
|