]> git.proxmox.com Git - pve-storage.git/commitdiff
fix #4165: disk: SMART: add normalized field
authorMatthias Heiserer <m.heiserer@proxmox.com>
Thu, 21 Jul 2022 10:45:58 +0000 (12:45 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 22 Sep 2022 12:14:19 +0000 (14:14 +0200)
This makes it consistent with the naming scheme in PBS/GUI.
Keep value for API stability reasons and remove it in the next major version.

Signed-off-by: Matthias Heiserer <m.heiserer@proxmox.com>
Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
Tested-by: Dominik Csapak <d.cspak@proxmox.com>
PVE/Diskmanage.pm
test/disk_tests/hdd_smart/sda_smart_expected.json
test/disk_tests/hdd_smart/sdb_smart_expected.json
test/disk_tests/ssd_smart/sda_smart_expected.json
test/disk_tests/ssd_smart/sdb_smart_expected.json
test/disk_tests/ssd_smart/sdc_smart_expected.json
test/disk_tests/ssd_smart/sdd_smart_expected.json
test/disk_tests/ssd_smart/sde_smart_expected.json

index 81df67f9b20350b7e57c58769d5048a4207552d7..d384694e0ae085d2e6510e9fe0f4eef6bd472d49 100644 (file)
@@ -123,7 +123,9 @@ sub get_smart_data {
                $entry->{name} = $2 if defined $2;
                $entry->{flags} = $3 if defined $3;
                # the +0 makes a number out of the strings
+               # fixme remove next line in major release, use normalized instead
                $entry->{value} = $4+0 if defined $4;
+               $entry->{normalized} = $4+0 if defined $4;
                $entry->{worst} = $5+0 if defined $5;
                # some disks report the default threshold as --- instead of 000
                if (defined($6) && $6 eq '---') {
index 01bb860baac35bc9d1ca616e8a14c1c9fd2829be..73cd01cc96648ddced9c380cd1c36556ca037d46 100644 (file)
@@ -4,6 +4,7 @@
            "threshold" : 6,
            "fail" : "-",
            "flags" : "POSR--",
+           "normalized" : 117,
            "value" : 117,
            "id" : "  1",
            "raw" : "158983656",
@@ -12,6 +13,7 @@
        },
        {
            "flags" : "PO----",
+           "normalized" : 92,
            "value" : 92,
            "raw" : "0",
            "name" : "Spin_Up_Time",
@@ -21,6 +23,7 @@
            "threshold" : 0
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "flags" : "-O--CK",
            "id" : "  4",
@@ -31,6 +34,7 @@
            "fail" : "-"
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "flags" : "PO--CK",
            "id" : "  5",
@@ -42,6 +46,7 @@
        },
        {
            "flags" : "POSR--",
+           "normalized" : 75,
            "value" : 75,
            "raw" : "30779387",
            "worst" : 60,
            "name" : "Power_On_Hours",
            "id" : "  9",
            "flags" : "-O--CK",
+           "normalized" : 99,
            "value" : 99,
            "fail" : "-",
            "threshold" : 0
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "flags" : "PO--C-",
            "id" : " 10",
@@ -72,6 +79,7 @@
        },
        {
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100,
            "id" : " 12",
            "raw" : "190",
@@ -84,6 +92,7 @@
            "threshold" : 0,
            "fail" : "-",
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100,
            "id" : "183",
            "raw" : "0",
            "fail" : "-",
            "threshold" : 99,
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100,
            "raw" : "0",
            "worst" : 100,
            "name" : "Reported_Uncorrect",
            "raw" : "0",
            "id" : "187",
+           "normalized" : 100,
            "value" : 100,
            "flags" : "-O--CK",
            "fail" : "-",
        },
        {
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100,
            "raw" : "0 0 0",
            "worst" : 100,
            "threshold" : 0,
            "fail" : "-",
            "flags" : "-O-RCK",
+           "normalized" : 100,
            "value" : 100,
            "id" : "189",
            "raw" : "0",
            "name" : "Airflow_Temperature_Cel",
            "raw" : "31 (Min/Max 20/33)",
            "id" : "190",
+           "normalized" : 69,
            "value" : 69,
            "flags" : "-O---K",
            "fail" : "-",
            "name" : "G-Sense_Error_Rate",
            "raw" : "0",
            "id" : "191",
+           "normalized" : 100,
            "value" : 100,
            "flags" : "-O--CK"
        },
            "name" : "Power-Off_Retract_Count",
            "worst" : 100,
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "fail" : "-"
        },
        {
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100,
            "raw" : "201",
            "worst" : 100,
        {
            "fail" : "-",
            "threshold" : 0,
+           "normalized" : 31,
            "value" : 31,
            "flags" : "-O---K",
            "name" : "Temperature_Celsius",
            "id" : "194"
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "flags" : "-O--C-",
            "id" : "197",
            "name" : "Offline_Uncorrectable",
            "raw" : "0",
            "id" : "198",
+           "normalized" : 100,
            "value" : 100,
            "flags" : "----C-",
            "fail" : "-",
        {
            "threshold" : 0,
            "fail" : "-",
+           "normalized" : 200,
            "value" : 200,
            "flags" : "-OSRCK",
            "id" : "199",
            "worst" : 253,
            "id" : "240",
            "flags" : "------",
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "threshold" : 0
            "worst" : 253,
            "raw" : "24013587236",
            "id" : "241",
+           "normalized" : 100,
            "value" : 100,
            "flags" : "------"
        },
        {
            "flags" : "------",
+           "normalized" : 100,
            "value" : 100,
            "id" : "242",
            "raw" : "66916845706732",
index 41e55fb066b816c2bfc19664e88fbf159af7d994..ae0f014ee1c395640fbc2d7d4bf3e332b17960ee 100644 (file)
@@ -7,11 +7,13 @@
            "name" : "Raw_Read_Error_Rate",
            "worst" : 63,
            "raw" : "215697022",
+           "normalized" : 83,
            "value" : 83,
            "flags" : "POSR--"
        },
        {
            "flags" : "PO----",
+           "normalized" : 92,
            "value" : 92,
            "id" : "  3",
            "raw" : "0",
@@ -23,6 +25,7 @@
        {
            "fail" : "-",
            "threshold" : 20,
+           "normalized" : 100,
            "value" : 100,
            "flags" : "-O--CK",
            "worst" : 100,
@@ -32,6 +35,7 @@
        },
        {
            "flags" : "PO--CK",
+           "normalized" : 100,
            "value" : 100,
            "id" : "  5",
            "raw" : "0",
@@ -46,6 +50,7 @@
            "name" : "Seek_Error_Rate",
            "worst" : 60,
            "flags" : "POSR--",
+           "normalized" : 91,
            "value" : 91,
            "threshold" : 30,
            "fail" : "-"
@@ -56,6 +61,7 @@
            "worst" : 89,
            "id" : "  9",
            "flags" : "-O--CK",
+           "normalized" : 89,
            "value" : 89,
            "fail" : "-",
            "threshold" : 0
@@ -63,6 +69,7 @@
        {
            "fail" : "-",
            "threshold" : 97,
+           "normalized" : 100,
            "value" : 100,
            "flags" : "PO--C-",
            "worst" : 100,
@@ -78,6 +85,7 @@
            "name" : "Power_Cycle_Count",
            "worst" : 100,
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100
        },
        {
@@ -85,6 +93,7 @@
            "worst" : 100,
            "raw" : "0",
            "id" : "184",
+           "normalized" : 100,
            "value" : 100,
            "flags" : "-O--CK",
            "fail" : "-",
            "name" : "Reported_Uncorrect",
            "worst" : 100,
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "name" : "Command_Timeout",
            "worst" : 100,
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "name" : "High_Fly_Writes",
            "id" : "189",
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "flags" : "-O-RCK",
+           "normalized" : 45,
            "value" : 45,
            "raw" : "55 (147 229 55 24 0)",
            "worst" : 36,
            "name" : "G-Sense_Error_Rate",
            "id" : "191",
            "flags" : "-O---K",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "worst" : 100,
            "name" : "Power-Off_Retract_Count",
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "fail" : "-",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "flags" : "-O--CK",
            "name" : "Load_Cycle_Count",
            "threshold" : 0,
            "fail" : "-",
            "flags" : "-O--CK",
+           "normalized" : 55,
            "value" : 55,
            "id" : "194",
            "raw" : "55 (0 16 0 0 0)",
            "name" : "Hardware_ECC_Recovered",
            "worst" : 13,
            "raw" : "215697022",
+           "normalized" : 23,
            "value" : 23,
            "flags" : "-O---K"
        },
            "name" : "Current_Pending_Sector",
            "raw" : "0",
            "id" : "197",
+           "normalized" : 100,
            "value" : 100,
            "flags" : "-O--C-",
            "fail" : "-",
            "name" : "Offline_Uncorrectable",
            "raw" : "0",
            "id" : "198",
+           "normalized" : 100,
            "value" : 100,
            "flags" : "----C-",
            "fail" : "-",
        {
            "fail" : "-",
            "threshold" : 0,
+           "normalized" : 200,
            "value" : 200,
            "flags" : "-OSRCK",
            "worst" : 200,
index a71fab2eb12578a1119bf1f7dc2874cbac1b83ac..2b42cf86e31e35b064eaf660124c489bae97b1d7 100644 (file)
@@ -10,6 +10,7 @@
            "flags" : "POSR-K",
            "raw" : "0",
            "fail" : "-",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "flags" : "-O--CK",
            "raw" : "0",
            "fail" : "-",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "name" : "Power_On_Hours",
            "threshold" : 0,
            "worst" : 100,
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "raw" : "1309",
            "flags" : "-O--CK",
            "fail" : "-",
            "id" : " 12",
+           "normalized" : 100,
            "value" : 100
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "raw" : "0",
            "flags" : "-O--CK",
@@ -53,6 +58,7 @@
            "worst" : 100
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "id" : "172",
            "raw" : "0",
            "flags" : "-O--CK",
            "fail" : "-",
            "id" : "173",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "name" : "Unexpect_Power_Loss_Ct",
            "threshold" : 0,
            "worst" : 100,
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "raw" : "53",
@@ -87,6 +95,7 @@
            "flags" : "PO--CK",
            "fail" : "-",
            "id" : "180",
+           "normalized" : 0,
            "value" : 0,
            "threshold" : 0,
            "name" : "Unused_Reserve_NAND_Blk",
            "raw" : "0",
            "flags" : "-O--CK",
            "id" : "183",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "flags" : "-O--CK",
            "raw" : "0",
            "fail" : "-",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "name" : "Reported_Uncorrect",
            "threshold" : 0,
            "worst" : 100,
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "flags" : "-O--CK",
            "fail" : "-",
            "flags" : "-O---K",
            "raw" : "32 (Min/Max 22/46)",
+           "normalized" : 68,
            "value" : 68
        },
        {
            "flags" : "-O--CK",
            "fail" : "-",
            "id" : "196",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "name" : "Reallocated_Event_Count",
            "fail" : "-",
            "flags" : "-O--CK",
            "raw" : "0",
+           "normalized" : 100,
            "value" : 100,
            "worst" : 100,
            "name" : "Current_Pending_Sector",
            "raw" : "0",
            "fail" : "-",
            "id" : "198",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "fail" : "-",
            "raw" : "0",
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "id" : "202",
            "flags" : "----CK",
            "name" : "Write_Error_Rate",
            "threshold" : 0,
            "worst" : 100,
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "raw" : "0",
            "raw" : "0",
            "flags" : "-O--CK",
            "id" : "210",
+           "normalized" : 100,
            "value" : 100
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "id" : "246",
            "fail" : "-",
            "raw" : "211228065",
            "flags" : "-O--CK",
            "id" : "247",
+           "normalized" : 100,
            "value" : 100
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "raw" : "253276904",
index 6f55c3e4ce9fed06911620e0f7ccd3826896beb2..06147540df72f0e7e19f93bfe75a2f7919b0d4da 100644 (file)
@@ -10,6 +10,7 @@
            "flags" : "-O--CK",
            "raw" : "0",
            "id" : "  5",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "fail" : "-",
            "raw" : "1259",
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "id" : " 12",
            "raw" : "191",
@@ -37,6 +40,7 @@
            "raw" : "0",
            "flags" : "PO--CK",
            "fail" : "-",
+           "normalized" : 100,
            "value" : 100,
            "worst" : 100,
            "threshold" : 10,
@@ -46,6 +50,7 @@
            "threshold" : 0,
            "name" : "Program_Fail_Count",
            "worst" : 100,
+           "normalized" : 100,
            "value" : 100,
            "raw" : "0",
            "flags" : "-O--CK",
            "fail" : "-",
            "flags" : "-O--CK",
            "raw" : "0",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "worst" : 100,
            "threshold" : 0,
            "name" : "Unsafe_Shutdown_Count",
+           "normalized" : 100,
            "value" : 100,
            "id" : "174",
            "raw" : "164",
@@ -73,6 +80,7 @@
            "fail" : "-"
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "flags" : "PO--CK",
@@ -86,6 +94,7 @@
            "worst" : 100,
            "threshold" : 0,
            "name" : "SATA_Downshift_Count",
+           "normalized" : 100,
            "value" : 100,
            "id" : "183",
            "raw" : "0",
            "worst" : 100,
            "name" : "End-to-End_Error",
            "threshold" : 90,
+           "normalized" : 100,
            "value" : 100,
            "id" : "184",
            "fail" : "-",
            "worst" : 100,
            "name" : "Reported_Uncorrect",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "id" : "187",
            "fail" : "-",
            "fail" : "-",
            "raw" : "28 (Min/Max 21/30)",
            "flags" : "-O---K",
+           "normalized" : 72,
            "value" : 72
        },
        {
            "worst" : 100,
            "threshold" : 0,
            "name" : "Unsafe_Shutdown_Count",
+           "normalized" : 100,
            "value" : 100,
            "id" : "192",
            "raw" : "164",
            "fail" : "-",
            "raw" : "28",
            "flags" : "-O---K",
+           "normalized" : 100,
            "value" : 100,
            "worst" : 100,
            "name" : "Temperature_Internal",
            "worst" : 100,
            "threshold" : 0,
            "name" : "Current_Pending_Sector",
+           "normalized" : 100,
            "value" : 100,
            "id" : "197",
            "raw" : "0",
            "worst" : 100,
            "threshold" : 0,
            "name" : "CRC_Error_Count",
+           "normalized" : 100,
            "value" : 100,
            "id" : "199",
            "flags" : "-OSRCK",
            "fail" : "-",
            "flags" : "-O--CK",
            "raw" : "296600",
+           "normalized" : 100,
            "value" : 100
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "id" : "226",
            "raw" : "3747",
            "raw" : "0",
            "flags" : "-O--CK",
            "fail" : "-",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "flags" : "-O--CK",
            "fail" : "-",
            "id" : "228",
+           "normalized" : 100,
            "value" : 100
        },
        {
            "raw" : "0",
            "flags" : "PO--CK",
            "id" : "232",
+           "normalized" : 100,
            "value" : 100,
            "name" : "Available_Reservd_Space",
            "threshold" : 10,
            "worst" : 100
        },
        {
+           "normalized" : 97,
            "value" : 97,
            "fail" : "-",
            "flags" : "-O--CK",
            "worst" : 97
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "raw" : "0/0",
            "fail" : "-",
            "raw" : "296600",
            "flags" : "-O--CK",
+           "normalized" : 100,
            "value" : 100
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "id" : "242",
            "fail" : "-",
index f0cffcf23b3a65e3ed2c608489cd2ae87f5852e4..fad095bf9df61e00e3437e8eedf900080650c809 100644 (file)
@@ -3,6 +3,7 @@
     "health" : "PASSED",
     "attributes" : [
        {
+           "normalized" : 99,
            "value" : 99,
            "fail" : "-",
            "raw" : "34",
index a85e7d7344c1dafa3a257b4deefc2f446a5818a7..8e0bebf0a5cd3c7e6160f72ffeb722accc76fa90 100644 (file)
@@ -7,6 +7,7 @@
            "worst" : 100,
            "raw" : "0",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "name" : "Reallocated_Sector_Ct"
        },
@@ -17,6 +18,7 @@
            "id" : "  9",
            "name" : "Power_On_Hours",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "raw" : "799"
        },
@@ -24,6 +26,7 @@
            "name" : "Power_Cycle_Count",
            "raw" : "92",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "fail" : "-",
            "worst" : 100,
            "id" : "165",
            "name" : "Unknown_Attribute",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "raw" : "9699447"
        },
        {
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "raw" : "1",
@@ -56,6 +61,7 @@
            "fail" : "-",
            "worst" : 100,
            "raw" : "46",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "name" : "Unknown_Attribute"
@@ -63,6 +69,7 @@
        {
            "name" : "Unknown_Attribute",
            "raw" : "5",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "fail" : "-",
@@ -75,6 +82,7 @@
            "id" : "169",
            "worst" : 100,
            "fail" : "-",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "raw" : "1079",
@@ -83,6 +91,7 @@
        {
            "raw" : "0",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "name" : "Unknown_Attribute",
            "id" : "170",
            "flags" : "-O--CK",
            "name" : "Unknown_Attribute",
            "raw" : "0",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0
        },
        {
            "name" : "Unknown_Attribute",
            "raw" : "0",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "fail" : "-",
        {
            "name" : "Unknown_Attribute",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "raw" : "1",
            "worst" : 100,
        },
        {
            "name" : "Unknown_Attribute",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "raw" : "22",
            "flags" : "-O--CK",
            "id" : "184",
            "name" : "End-to-End_Error",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "raw" : "0"
        },
        {
            "name" : "Reported_Uncorrect",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "raw" : "0",
        {
            "name" : "Command_Timeout",
            "raw" : "0",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "fail" : "-",
        },
        {
            "threshold" : 0,
+           "normalized" : 73,
            "value" : 73,
            "raw" : "27 (Min/Max 23/64)",
            "name" : "Temperature_Celsius",
            "flags" : "-O--CK",
            "id" : "199",
            "name" : "UDMA_CRC_Error_Count",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "raw" : "0"
        {
            "name" : "Unknown_SSD_Attribute",
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "raw" : "146029805602",
            "worst" : 100,
        },
        {
            "raw" : "100",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 4,
            "name" : "Available_Reservd_Space",
        },
        {
            "threshold" : 0,
+           "normalized" : 100,
            "value" : 100,
            "raw" : "1574",
            "name" : "Media_Wearout_Indicator",
            "fail" : "-",
            "worst" : 100,
            "raw" : "2303",
+           "normalized" : 100,
            "value" : 100,
            "threshold" : 0,
            "name" : "Unknown_Attribute"
            "flags" : "----CK",
            "name" : "Total_LBAs_Written",
            "raw" : "2111",
+           "normalized" : 253,
            "value" : 253,
            "threshold" : 0
        },
            "id" : "242",
            "name" : "Total_LBAs_Read",
            "threshold" : 0,
+           "normalized" : 253,
            "value" : 253,
            "raw" : "1542"
        },
        {
            "name" : "Unknown_Attribute",
+           "normalized" : 0,
            "value" : 0,
            "threshold" : 0,
            "raw" : "0",
index 1d45c1de1d4c516c8a081f730883566724986ecc..0fa1214b6103feb5ed4595f46c0392e62091a791 100644 (file)
@@ -9,12 +9,14 @@
            "flags": "-O--CK",
            "name": "Raw_Read_Error_Rate",
            "threshold": 50,
+           "normalized": 120,
            "value": 120,
            "worst": 120
        },
        {
            "id": "  5",
            "fail": "-",
+           "normalized": 100,
            "value": 100,
            "worst": 100,
            "threshold": 3,
@@ -28,6 +30,7 @@
            "raw": "7963h+07m+54.620s",
            "flags": "-O--CK",
            "worst": 91,
+           "normalized": 91,
            "value": 91,
            "name": "Power_On_Hours_and_Msec",
            "threshold": 0
@@ -38,6 +41,7 @@
            "threshold": 0,
            "name": "Power_Cycle_Count",
            "worst": 99,
+           "normalized": 99,
            "value": 99,
            "flags": "-O--CK",
            "raw": "1153"
@@ -46,6 +50,7 @@
            "flags": "-O-R--",
            "raw": "0",
            "worst": 100,
+           "normalized": 100,
            "value": 100,
            "threshold": 0,
            "name": "Program_Fail_Count",
@@ -60,6 +65,7 @@
            "name": "Erase_Fail_Count",
            "threshold": 0,
            "worst": 100,
+           "normalized": 100,
            "value": 100
        },
        {
@@ -67,6 +73,7 @@
            "id": "174",
            "raw": "113",
            "flags": "----CK",
+           "normalized": 0,
            "value": 0,
            "worst": 0,
            "threshold": 0,
@@ -75,6 +82,7 @@
        {
            "id": "177",
            "fail": "-",
+           "normalized": 0,
            "value": 0,
            "worst": 0,
            "name": "Wear_Range_Delta",
@@ -88,6 +96,7 @@
            "threshold": 0,
            "name": "Program_Fail_Count",
            "worst": 100,
+           "normalized": 100,
            "value": 100,
            "fail": "-",
            "id": "181"
        {
            "threshold": 0,
            "name": "Erase_Fail_Count",
+           "normalized": 100,
            "value": 100,
            "worst": 100,
            "flags": "-O--CK",
        {
            "flags": "-O--C-",
            "raw": "0",
+           "normalized": 100,
            "value": 100,
            "worst": 100,
            "threshold": 0,
            "id": "187"
        },
        {
+           "normalized": 27,
            "value": 27,
            "worst": 49,
            "name": "Airflow_Temperature_Cel",
            "threshold": 0,
            "name": "Temperature_Celsius",
            "worst": 49,
+           "normalized": 27,
            "value": 27,
            "flags": "-O---K",
            "raw": "27 (Min/Max 2/49)",
            "id": "195",
            "fail": "-",
            "worst": 120,
+           "normalized": 120,
            "value": 120,
            "threshold": 0,
            "name": "ECC_Uncorr_Error_Count",
            "flags": "PO--CK",
            "threshold": 3,
            "name": "Reallocated_Event_Count",
+           "normalized": 100,
            "value": 100,
            "worst": 100
        },
        {
+           "normalized": 120,
            "value": 120,
            "worst": 120,
            "threshold": 0,
        {
            "raw": "0/0",
            "flags": "--SRC-",
+           "normalized": 120,
            "value": 120,
            "worst": 120,
            "threshold": 0,
            "id": "204"
        },
        {
+           "normalized": 100,
            "value": 100,
            "worst": 100,
            "threshold": 0,
            "id": "231",
            "fail": "-",
            "worst": 91,
+           "normalized": 91,
            "value": 91,
            "name": "SSD_Life_Left",
            "threshold": 11,
            "flags": "-O--CK",
            "name": "SandForce_Internal",
            "threshold": 0,
+           "normalized": 0,
            "value": 0,
            "worst": 0,
            "fail": "-",
            "id": "233"
        },
        {
+           "normalized": 0,
            "value": 0,
            "worst": 0,
            "name": "SandForce_Internal",
        },
        {
            "worst": 0,
+           "normalized": 0,
            "value": 0,
            "name": "Lifetime_Writes_GiB",
            "threshold": 0,
        {
            "flags": "-O--CK",
            "raw": "34599",
+           "normalized": 0,
            "value": 0,
            "worst": 0,
            "threshold": 0,
            "threshold": 10,
            "name": "Unknown_Attribute",
            "worst": 99,
+           "normalized": 99,
            "value": 99,
            "flags": "------",
            "raw": "4063273",