HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //usr/local/qcloud/monitor/barad/plugin/base/plugin_base.py
import logging
import sys
import traceback
import commands
from abc import ABCMeta, abstractmethod
from cutils import console_logger, generate_config, is_metal, CommUtils, is_minios
import constant
import urllib2
import re
import time,threading
import datetime
import os
import subprocess

sys.path.append(os.getcwd()+"/../comm/")
sys.path.append(os.getcwd()+"/../plugin/collector/utils/")
import cutils
from utils.collect_vm_msg import CollectVmMesg

class BaseSender(object):
    def __init__(self, logger = None):
        #print self.__class__.__module__, self.__class__.__name__

        self.__config = generate_config(constant.PLUGIN_CONFIG_PATH, self.__class__.__name__)
        self.__logger = logger if logger is not None else console_logger()
        self.init()

    def get_config(self, key):
        return self.__config[key]

    def logger(self):
        return self.__logger

    '''
        for sender plugins please override the 'send_data' function
    '''
    def init(self):
        pass

    def send_data(self, data):
        pass

class BaseCollector(object):
    __metaclass__ = ABCMeta
    def __init__(self, executor = None):
        self.__executor = executor
        self.__frequency = 60
        self.__collect_list = []
        self.__logger = executor.logger() if executor is not None else console_logger()

        self.__config = generate_config(constant.PLUGIN_CONFIG_PATH,"MetaDataServer")
        self.init()

    def set_frequency(self, freq):
        self.__frequency = freq

    def frequency(self):
        return self.__frequency

    def get_config(self, key):
        return self.__config[key]

    def logger(self):
        return self.__logger

    def collect(self):
        self.__collect_list = []
        try:
            self.do_collect()
        except Exception,e:
            error = traceback.format_exc().replace("\n","\\n")
            self.__logger.error(error)
        try:
            if self.__executor is not None:
                self.__executor.put_data(self.get_data())
        except Exception,e:
            error = traceback.format_exc().replace("\n","\\n")
            self.__logger.error(error)

    def put_data(self, data):
        if isinstance(data,list):
            self.__collect_list += data
        else:
            self.__collect_list.append(data)

    def get_data(self):
        return self.__collect_list


    def dump_data(self):
        import json
        print json.dumps(self.__collect_list, indent = 4)
    '''
        for collector plugins please override these functions below
    '''
    @abstractmethod
    def do_collect(self):
        '''
            call push_data function to fill your data
            the data format is :
            { 'sender':'sender_plugin_name', 'datas':[{}, {}, {}] }
        '''
        pass

    @abstractmethod
    def init(self):
        '''
            do some initialized job
        '''
        pass


class VmBaseCollector(BaseCollector):
    def __init__(self, executor = None):
        self.metadata_instance = CollectVmMesg()
        super(VmBaseCollector, self).__init__(executor)
        self.logger().info("CollectVmMesg id is %s"%self.metadata_instance)
          
    def get_vm_project_id(self):
        return 0

    def get_vm_instance_id(self):
        return self.metadata_instance.get_vm_instance_id()          
    
    def get_vm_app_id(self):
        return self.metadata_instance.get_vm_app_id()

    def get_diskid(self, serial):
        return self.metadata_instance.get_diskid(serial)             

    def get_cbs_diskid(self, serial):
        return self.metadata_instance.get_cbs_diskid(serial)
    
    def get_sn(self):
        return self.metadata_instance.get_sn()

    def get_ntp_server(self):
        return self.metadata_instance.get_ntp_server()

    def get_vm_uuid(self):
        return self.metadata_instance.get_vm_uuid()

    def get_vmip(self):
        return self.metadata_instance.get_vmip()
    
    def get_lanip(self):
        return self.metadata_instance.get_lanip()

    def set_ntptime_offset(self,offset):
        return self.metadata_instance.set_ntptime_offset(offset)

    def get_ntptime_offset(self):
        return self.metadata_instance.get_ntptime_offset()
    
    def get_barad_version(self):
        return self.metadata_instance.get_barad_version()

    def get_vm_region(self):
        return self.metadata_instance.get_vm_region()


class HostBaseCollector(BaseCollector):
    """
    the abstract common collector
    """
    __metaclass__ = ABCMeta
    MSG_VMM_BASE_INFO = 1
    MSG_VMM_NETWORK_INFO = 2
    MSG_VMM_STORAGE_INFO = 3
    MSG_VM_BASE_INFO = 4
    MSG_VM_NETWORK_INFO = 5
    MSG_VM_STORAGE_INFO = 6
    MSG_VM_CPU_INFO = 7
    MSG_VMM_CHILDREN_INFO = 8
    def __init__(self, executor = None):
        super(HostBaseCollector, self).__init__(executor)