def get_component_status(self): component_data = [] try: components = self.api_instance.list_component_status() for c in components.items: status, msg = '', '' for condition in c.conditions: if condition.type == 'Healthy': msg = condition.message if condition.status == 'True': status = 'RUNNING' elif condition.status == 'False': status = 'ERROR' else: status = condition.status component = ClusterHealthData(namespace='component', name=c.metadata.name, status=status, ready='1/1', age=0, msg=msg, restart_count=0) component_data.append(component.__dict__) except ApiException as e: logger.error(msg='list component error ' + e.reason, exc_info=True) return component_data
def get_pod_status(self, items): pod_data = [] for s in items: restart_count = 0 if s.status.container_statuses is not None: count = len(s.status.container_statuses) ready = 0 for c in s.status.container_statuses: restart_count = restart_count + c.restart_count if c.ready: ready = ready + 1 ready_status = str(ready) + '/' + str(count) # 计算存活时间 now = timezone.now() age_time = now - s.status.start_time age = '' if age_time.days > 0: age = str(age_time.days) + 'd' else: seconds = age_time.seconds hour = int(seconds / 60 / 60) if hour >= 1: age = str(hour) + 'h' minute = int((seconds % 3600) / 60) else: minute = int(seconds / 60) if minute >= 1: age = age + str(minute) + 'm' system_pod = ClusterHealthData(namespace=s.metadata.namespace, name=s.metadata.name, status=s.status.phase, ready=ready_status, age=age, msg=s.status.message, restart_count=restart_count) pod_data.append(system_pod.__dict__) return pod_data
def get_kubernetes_status(self): self.check_authorization(self.retry_count) message = '' component_data, monitor_data, system_data = [], [], [] try: components = self.api_instance.list_component_status() for c in components.items: status, msg = '', '' for condition in c.conditions: if condition.type == 'Healthy': msg = condition.message if condition.status == 'True': status = 'RUNNING' elif condition.status == 'False': status = 'ERROR' else: status = condition.status component = ClusterHealthData(namespace='component', name=c.metadata.name, status=status, ready='1/1', age=0, msg=msg, restart_count=0) component_data.append(component.__dict__) system_pods = self.api_instance.list_namespaced_pod('kube-system') system_data = self.get_pod_status(system_pods.items) monitor_pods = self.api_instance.list_namespaced_pod('kube-operator') monitor_data = self.get_pod_status(monitor_pods.items) except ApiException as e: message = e.reason logger.error(msg='list pod error ' + e.reason, exc_info=True) health_data = { 'component': component_data, 'kube-system': system_data, 'monitoring': monitor_data, 'message': message } return health_data