diff --git a/src/middlewared/middlewared/alert/source/enclosure_status.py b/src/middlewared/middlewared/alert/source/enclosure_status.py index 200ee651a796..2b49d20315a9 100644 --- a/src/middlewared/middlewared/alert/source/enclosure_status.py +++ b/src/middlewared/middlewared/alert/source/enclosure_status.py @@ -4,7 +4,13 @@ # See the file LICENSE.IX for complete terms and conditions from dataclasses import dataclass -from middlewared.alert.base import AlertClass, AlertCategory, AlertLevel, Alert, AlertSource +from middlewared.alert.base import ( + AlertClass, + AlertCategory, + AlertLevel, + Alert, + AlertSource, +) @dataclass(slots=True, frozen=True, kw_only=True) @@ -16,20 +22,14 @@ class BadElement: value_raw: int def args(self): - return [ - self.enc_name, - self.descriptor, - self.status, - self.value, - self.value_raw - ] + return [self.enc_name, self.descriptor, self.status, self.value, self.value_raw] class EnclosureUnhealthyAlertClass(AlertClass): category = AlertCategory.HARDWARE level = AlertLevel.CRITICAL title = "Enclosure Status Is Not Healthy" - text = "Enclosure (%s): Element \"%s\" is reporting a status of \"%s\" with a value of \"%s\". (raw value \"%s\")" + text = 'Enclosure (%s): Element "%s" is reporting a status of "%s" with a value of "%s". (raw value "%s")' products = ("SCALE_ENTERPRISE",) @@ -45,37 +45,37 @@ class EnclosureStatusAlertSource(AlertSource): products = ("SCALE_ENTERPRISE",) failover_related = True run_on_backup_node = False - bad = ('critical', 'noncritical', 'unknown', 'unrecoverable') + bad = ("critical", "noncritical", "unknown", "unrecoverable") bad_elements: list | list[tuple[BadElement, int]] = list() async def should_report(self, ele_type: str, ele_value: dict[str]): """We only want to raise an alert for an element's status if it meets a certain criteria""" - if not ele_value['value']: + if not ele_value["value"]: # if we don't have an actual value, doesn't # matter what status the element is reporting # we'll skip it so we don't raise alarm to # end-user unnecessarily return False - elif ele_value['status'].lower() not in self.bad: + elif ele_value["status"].lower() not in self.bad: return False return True async def check(self): good_enclosures, bad_elements = [], [] - for enc in await self.middleware.call('enclosure2.query'): - good_enclosures.append([enc['name']]) - enc['elements'].pop('Array Device Slot') # dont care about disk slots - for element_type, element_values in enc['elements'].items(): + for enc in await self.middleware.call("enclosure2.query"): + good_enclosures.append([enc["name"]]) + enc["elements"].pop("Array Device Slot") # dont care about disk slots + for element_type, element_values in enc["elements"].items(): for ele_value in element_values.values(): if await self.should_report(element_type, ele_value): current_bad_element = BadElement( - enc_name=enc['name'], - descriptor=ele_value['descriptor'], - status=ele_value['status'], - value=ele_value['value'], - value_raw=ele_value['value_raw'] + enc_name=enc["name"], + descriptor=ele_value["descriptor"], + status=ele_value["status"], + value=ele_value["value"], + value_raw=ele_value["value_raw"], ) for previous_bad_element, count in self.bad_elements: if previous_bad_element == current_bad_element: @@ -96,7 +96,9 @@ async def check(self): except ValueError: pass - alerts.append(Alert(EnclosureUnhealthyAlertClass, args=current_bad_element.args())) + alerts.append( + Alert(EnclosureUnhealthyAlertClass, args=current_bad_element.args()) + ) for enclosure in good_enclosures: alerts.append(Alert(EnclosureHealthyAlertClass, args=enclosure))