def get_critical_from_host(self, hostname: str) -> Dict[str, Any]:
results: Dict[str, Any] = {}
- for sys_id, component in self.data[hostname]['status'].items():
- for component_name, data_component in component.items():
- if component_name not in results.keys():
- results[component_name] = {}
- for member, data_member in data_component.items():
- if component_name == 'power':
- data_member['status']['health'] = 'critical'
- data_member['status']['state'] = 'unplugged'
- if component_name == 'memory':
- data_member['status']['health'] = 'critical'
- data_member['status']['state'] = 'errors detected'
- if self._get_health_value(data_member) != 'ok':
- results[component_name][member] = data_member
+
+ for component, component_data in self.data[hostname]['status'].items():
+ for sys_id, data_sys in component_data.items():
+ if sys_id not in results.keys():
+ results[sys_id] = {}
+ if component not in results[sys_id].keys():
+ results[sys_id][component] = {}
+ for member_name, member_data in data_sys.items():
+ _health = self._get_health_value(member_data)
+ if _health and _health != 'ok':
+ if member_name not in results.keys():
+ results[sys_id][component][member_name] = {}
+ results[sys_id][component][member_name] = member_data
return results
def criticals(self, **kw: Any) -> Dict[str, Any]:
'summary': ['HOST', 'SN', 'STORAGE', 'CPU', 'NET', 'MEMORY', 'POWER', 'FANS'],
'fullreport': [],
'firmwares': ['HOST', 'COMPONENT', 'NAME', 'DATE', 'VERSION', 'STATUS'],
- 'criticals': ['HOST', 'COMPONENT', 'NAME', 'STATUS', 'STATE'],
+ 'criticals': ['HOST', 'SYS_ID', 'COMPONENT', 'NAME', 'STATUS', 'STATE'],
'memory': ['HOST', 'SYS_ID', 'NAME', 'STATUS', 'STATE'],
'storage': ['HOST', 'SYS_ID', 'NAME', 'MODEL', 'SIZE', 'PROTOCOL', 'SN', 'STATUS', 'STATE'],
'processors': ['HOST', 'SYS_ID', 'NAME', 'MODEL', 'CORES', 'THREADS', 'STATUS', 'STATE'],
def _criticals_table(self, hostname: Optional[str], table: PrettyTable, format: Format) -> str:
completion = self.node_proxy_criticals(hostname=hostname)
data = raise_if_exception(completion)
- # data = self.node_proxy_criticals(hostname=hostname)
+
if format == Format.json:
return json.dumps(data)
for host, host_details in data.items():
- for component, component_details in host_details.items():
- for member, member_details in component_details.items():
- description = member_details.get('description') or member_details.get('name')
- table.add_row((host, component, description, member_details['status']['health'], member_details['status']['state']))
+ for sys_id, components in host_details.items():
+ for component, component_details in components.items():
+ for _, member_details in component_details.items():
+ description = member_details.get('description') or member_details.get('name') or member_details.get('id')
+ status = member_details.get('status') or {}
+ health = status.get('health', 'N/A')
+ state = status.get('state', 'N/A')
+ table.add_row((host, sys_id, component, description, health, state))
return table.get_string()
def _common_table(self, category: str, hostname: Optional[str], table: PrettyTable, format: Format) -> str: