Пример #1
0
    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
Пример #2
0
 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
Пример #3
0
 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