You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.1 KiB
JavaScript
89 lines
2.1 KiB
JavaScript
import { _, RestOfLine, Newline, NumberValue, HexNumberValue, IdentifierValue } from "../primitives"
|
|
import { Header } from "../shared"
|
|
|
|
{
|
|
const matchValue = require("match-value");
|
|
const mapAttributeFlags = require("../../map-attribute-flags");
|
|
}
|
|
|
|
RootAttributes
|
|
= header:Header attributesSection:AttributesSection Newline* {
|
|
return { ...header, attributes: attributesSection }
|
|
};
|
|
|
|
AttributesSection
|
|
= AttributesSectionSATA
|
|
/ AttributesSectionNVMe
|
|
|
|
AttributesSectionSATA
|
|
= "=== START OF READ SMART DATA SECTION ===" Newline
|
|
"SMART Attributes Data Structure revision number:" _ NumberValue Newline
|
|
"Vendor Specific SMART Attributes with Thresholds:" Newline
|
|
"ID#" _ "ATTRIBUTE_NAME" _ "FLAG" _ "VALUE" _ "WORST" _ "THRESH" _ "TYPE" _ "UPDATED" _ "WHEN_FAILED" _ "RAW_VALUE" Newline
|
|
attributes:AttributeFieldSATA+ {
|
|
return attributes;
|
|
}
|
|
|
|
AttributesSectionNVMe
|
|
= "=== START OF SMART DATA SECTION ===" Newline
|
|
"SMART/Health Information (NVMe Log 0x02)" Newline
|
|
attributes:AttributeFieldNVMe+ {
|
|
return attributes;
|
|
}
|
|
|
|
AttributeFlags
|
|
= "0x" number:HexNumberValue {
|
|
return mapAttributeFlags(number);
|
|
}
|
|
|
|
AttributeUpdatedWhen
|
|
= "Always"
|
|
/ "Offline"
|
|
|
|
AttributeFailedWhen
|
|
= "FAILING_NOW"
|
|
/ "In_the_past"
|
|
/ "-"
|
|
|
|
AttributeFieldType
|
|
= "Pre-fail"
|
|
/ "Old_age"
|
|
|
|
AttributeFieldSATA
|
|
= _ id:NumberValue
|
|
_ attributeName:IdentifierValue
|
|
_ flags:AttributeFlags
|
|
_ value:NumberValue
|
|
_ worstValue:NumberValue
|
|
_ threshold:NumberValue
|
|
_ type:AttributeFieldType
|
|
_ updatedWhen:AttributeUpdatedWhen
|
|
_ failedWhen:AttributeFailedWhen
|
|
_ rawValue:RestOfLine {
|
|
return {
|
|
id,
|
|
attributeName,
|
|
flags,
|
|
value,
|
|
worstValue,
|
|
threshold,
|
|
rawValue,
|
|
updatedWhen: matchValue(updatedWhen, {
|
|
"Always": "always",
|
|
"Offline": "offline"
|
|
}),
|
|
type: matchValue(type, {
|
|
"Pre-fail": "preFail",
|
|
"Old_age": "oldAge"
|
|
}),
|
|
failingNow: (failedWhen === "FAILING_NOW"),
|
|
/* TODO: Should the below include the FAILING_NOW state? */
|
|
failedBefore: (failedWhen === "In_the_past")
|
|
};
|
|
}
|
|
|
|
AttributeFieldNVMe
|
|
= label:$[^:]+ ":" _ value:RestOfLine {
|
|
return { label: label, value };
|
|
}
|