Fix bugs and formatting of health messages
This commit is contained in:
		| @@ -146,7 +146,7 @@ def format_info(cluster_information, oformat): | ||||
|         health_text += " (maintenance on)" | ||||
|  | ||||
|     ainformation.append( | ||||
|         "{}Cluster health:{}      {}{}{}".format( | ||||
|         "{}Cluster health:{}  {}{}{}".format( | ||||
|             ansiprint.purple(), | ||||
|             ansiprint.end(), | ||||
|             health_colour, | ||||
| @@ -155,8 +155,23 @@ def format_info(cluster_information, oformat): | ||||
|         ) | ||||
|     ) | ||||
|     if cluster_information["health_messages"]: | ||||
|         for line in cluster_information["health_messages"]: | ||||
|             ainformation.append("                     > {}".format(line)) | ||||
|         health_messages = "\n                 > ".join( | ||||
|             sorted(cluster_information["health_messages"]) | ||||
|         ) | ||||
|         ainformation.append( | ||||
|             "{}Health messages:{} > {}".format( | ||||
|                 ansiprint.purple(), | ||||
|                 ansiprint.end(), | ||||
|                 health_messages, | ||||
|             ) | ||||
|         ) | ||||
|     else: | ||||
|         ainformation.append( | ||||
|             "{}Health messages:{} N/A".format( | ||||
|                 ansiprint.purple(), | ||||
|                 ansiprint.end(), | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     if oformat == "short": | ||||
|         return "\n".join(ainformation) | ||||
|   | ||||
| @@ -62,30 +62,35 @@ def getClusterHealth(zkhandler, node_list, vm_list, ceph_osd_list): | ||||
|  | ||||
|     for index, node in enumerate(node_list): | ||||
|         # Apply node health values to total health number | ||||
|         cluster_health -= 100 - node["health"] | ||||
|         try: | ||||
|             node_health_int = int(node["health"]) | ||||
|         except Exception: | ||||
|             node_health_int = 100 | ||||
|         cluster_health -= 100 - node_health_int | ||||
|  | ||||
|         for entry in node["health_details"]: | ||||
|             if entry["health_delta"] > 0: | ||||
|                 messages.append( | ||||
|                     f"{node['name']}: plugin {entry['plugin_name']}: {entry['message']}" | ||||
|                     f"{node['name']}: plugin '{entry['name']}': {entry['message']}" | ||||
|                 ) | ||||
|  | ||||
|         # Handle unhealthy node states | ||||
|         if node["daemon_state"] not in ["run"]: | ||||
|             cluster_health -= health_delta_map["node_stopped"] | ||||
|             messages.append( | ||||
|                 f"cluster: {node['name']} in {node['daemon_state']} daemon state" | ||||
|                 f"cluster: Node {node['name']} in {node['daemon_state'].upper()} daemon state" | ||||
|             ) | ||||
|         elif node["domain_state"] not in ["ready"]: | ||||
|             cluster_health -= health_delta_map["node_flushed"] | ||||
|             messages.append( | ||||
|                 f"cluster: {node['name']} in {node['domain_state']} domain state" | ||||
|                 f"cluster: Node {node['name']} in {node['domain_state'].upper()} domain state" | ||||
|             ) | ||||
|  | ||||
|     for index, vm in enumerate(vm_list): | ||||
|         # Handle unhealthy VM states | ||||
|         if vm["state"] not in ["start", "disable", "migrate", "unmigrate", "provision"]: | ||||
|             cluster_health -= health_delta_map["vm_stopped"] | ||||
|             messages.append(f"cluster: {vm['name']} in {vm['state']} state") | ||||
|             messages.append(f"cluster: VM {vm['name']} in {vm['state'].upper()} state") | ||||
|  | ||||
|     for index, ceph_osd in enumerate(ceph_osd_list): | ||||
|         in_texts = {1: "in", 0: "out"} | ||||
| @@ -95,12 +100,12 @@ def getClusterHealth(zkhandler, node_list, vm_list, ceph_osd_list): | ||||
|         if in_texts[ceph_osd["stats"]["in"]] not in ["in"]: | ||||
|             cluster_health -= health_delta_map["osd_out"] | ||||
|             messages.append( | ||||
|                 f"cluster: OSD {ceph_osd['id']} in {in_texts[ceph_osd['stats']['in']]} state" | ||||
|                 f"cluster: Ceph OSD {ceph_osd['id']} in {in_texts[ceph_osd['stats']['in']].upper()} state" | ||||
|             ) | ||||
|         elif up_texts[ceph_osd["stats"]["up"]] not in ["up"]: | ||||
|             cluster_health -= health_delta_map["osd_down"] | ||||
|             messages.append( | ||||
|                 f"cluster: OSD {ceph_osd['id']} in {up_texts[ceph_osd['stats']['up']]} state" | ||||
|                 f"cluster: Ceph OSD {ceph_osd['id']} in {up_texts[ceph_osd['stats']['up']].upper()} state" | ||||
|             ) | ||||
|  | ||||
|     # Check for (n-1) overprovisioning | ||||
| @@ -128,7 +133,7 @@ def getClusterHealth(zkhandler, node_list, vm_list, ceph_osd_list): | ||||
|     if alloc_total > n_minus_1_total: | ||||
|         cluster_health -= health_delta_map["memory_overprovisioned"] | ||||
|         messages.append( | ||||
|             f"cluster: Total VM memory is overprovisioned ({alloc_total} > {n_minus_1_total} n-1)" | ||||
|             f"cluster: Total memory is OVERPROVISIONED ({alloc_total} > {n_minus_1_total} @ N-1)" | ||||
|         ) | ||||
|  | ||||
|     # Check Ceph cluster health | ||||
| @@ -136,16 +141,19 @@ def getClusterHealth(zkhandler, node_list, vm_list, ceph_osd_list): | ||||
|     ceph_health_status = ceph_health["status"] | ||||
|     ceph_health_entries = ceph_health["checks"].keys() | ||||
|  | ||||
|     ceph_health_status_map = { | ||||
|         "HEALTH_ERR": "ERROR", | ||||
|         "HEALTH_WARN": "WARNING", | ||||
|     } | ||||
|     for entry in ceph_health_entries: | ||||
|         messages.append( | ||||
|             f"cluster: Ceph {ceph_health_status_map[ceph_health['checks'][entry]['severity']]} {entry}: {ceph_health['checks'][entry]['summary']['message']}" | ||||
|         ) | ||||
|  | ||||
|     if ceph_health_status == "HEALTH_ERR": | ||||
|         cluster_health -= health_delta_map["ceph_err"] | ||||
|         messages.append( | ||||
|             f"cluster: Ceph cluster in ERROR state: {', '.join(ceph_health_entries)}" | ||||
|         ) | ||||
|     elif ceph_health_status == "HEALTH_WARN": | ||||
|         cluster_health -= health_delta_map["ceph_warn"] | ||||
|         messages.append( | ||||
|             f"cluster: Ceph cluster in WARNING state: {', '.join(ceph_health_entries)}" | ||||
|         ) | ||||
|  | ||||
|     return cluster_health, messages | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user