From 252c7b8d7d166b2f65d8cbb3443f06558a562811 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Mon, 18 Apr 2022 17:14:26 +0200 Subject: [PATCH] fix smartctl bugs --- ereuse_devicehub/parser/parser.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/ereuse_devicehub/parser/parser.py b/ereuse_devicehub/parser/parser.py index fc46d351..95a0e86d 100644 --- a/ereuse_devicehub/parser/parser.py +++ b/ereuse_devicehub/parser/parser.py @@ -120,7 +120,11 @@ class ParseSnapshot: def get_usb_num(self): return len( - [u for u in self.dmi.get("Port Connector") if u.get("Port Type") == "USB"] + [ + u + for u in self.dmi.get("Port Connector") + if "USB" in u.get("Port Type", "").upper() + ] ) def get_serial_num(self): @@ -128,7 +132,7 @@ class ParseSnapshot: [ u for u in self.dmi.get("Port Connector") - if u.get("Port Type") == "SERIAL" + if "SERIAL" in u.get("Port Type", "").upper() ] ) @@ -137,7 +141,7 @@ class ParseSnapshot: [ u for u in self.dmi.get("Port Connector") - if u.get("Port Type") == "PCMCIA" + if "PCMCIA" in u.get("Port Type", "").upper() ] ) @@ -461,6 +465,8 @@ class ParseSnapshotLsHw: def get_data_storage(self): for sm in self.smart: + if sm.get('smartctl', {}).get('exit_status') != 0: + continue model = sm.get('model_name') manufacturer = None if model and len(model.split(" ")) > 1: @@ -487,7 +493,7 @@ class ParseSnapshotLsHw: SSD = 'SolidStateDrive' HDD = 'HardDrive' type_dev = x.get('device', {}).get('type') - trim = x.get("trim", {}).get("supported") == "true" + trim = x.get('trim', {}).get("supported") in [True, "true"] return SSD if type_dev in SSDS or trim else HDD def get_data_storage_interface(self, x): @@ -503,15 +509,14 @@ class ParseSnapshotLsHw: return "ATA" def get_data_storage_size(self, x): - type_dev = x.get('device', {}).get('protocol', '').lower() - total_capacity = "{type}_total_capacity".format(type=type_dev) - if not x.get(total_capacity): + total_capacity = x.get('user_capacity', {}).get('bytes') + if not total_capacity: return 1 # convert bytes to Mb - return x.get(total_capacity) / 1024**2 + return total_capacity / 1024**2 def get_test_data_storage(self, smart): - log = "smart_health_information_log" + hours = smart.get("power_on_time", {}).get('hours', 0) action = { "status": "Completed without error", "reallocatedSectorCount": smart.get("reallocated_sector_count", 0), @@ -519,7 +524,8 @@ class ParseSnapshotLsHw: "assessment": True, "severity": "Info", "offlineUncorrectable": smart.get("offline_uncorrectable", 0), - "lifetime": 0, + "lifetime": hours, + "powerOnHours": hours, "type": "TestDataStorage", "length": "Short", "elapsed": 0, @@ -529,11 +535,6 @@ class ParseSnapshotLsHw: "powerCycleCount": smart.get("power_cycle_count", 0), } - for k in smart.keys(): - if log in k: - action['lifetime'] = smart[k].get("power_on_hours", 0) - action['powerOnHours'] = smart[k].get("power_on_hours", 0) - return action def errors(self, txt=None, severity=Severity.Info):