コード例 #1
0
ファイル: disk.py プロジェクト: m4ce/python-agent
    def __init__(self, docker_client=None):
        self.unit = 1048576
        self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                          Config.cadvisor_port())

        self.docker_client = docker_client
        self.docker_storage_driver = None

        if self.docker_client:
            self.docker_storage_driver = \
                self.docker_client.info().get("Driver", None)
コード例 #2
0
    def __init__(self, docker_client=None):
        self.unit = 1048576
        self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                          Config.cadvisor_port())

        self.docker_client = docker_client
        self.docker_storage_driver = None

        if self.docker_client:
            self.docker_storage_driver = \
                self.docker_client.info().get("Driver", None)
コード例 #3
0
ファイル: disk.py プロジェクト: aruneli/python-agent
class DiskCollector(object):
    def __init__(self):
        self.unit = 1048576
        self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                          Config.cadvisor_port())

    def _convert_units(self, number):
        # Return in MB
        return round(float(number)/self.unit, 3)

    def _get_mountpoints_cadvisor(self):
        data = {}
        stat = self.cadvisor.get_latest_stat()

        if 'filesystem' in stat.keys():
            for fs in stat['filesystem']:
                device = fs['device']
                percent_used = float(fs['usage']) / float(fs['capacity']) * 100

                data[device] = {
                    'free': self._convert_units(fs['capacity'] - fs['usage']),
                    'total': self._convert_units(fs['capacity']),
                    'used': self._convert_units(fs['usage']),
                    'percentUsed': round(percent_used, 2)
                }

        return data

    def key_name(self):
        return 'diskInfo'

    def get_data(self):
        data = {}
        data['mountPoints'] = {}

        if platform.system() == 'Linux':
            data['mountPoints'].update(self._get_mountpoints_cadvisor())

        return data
コード例 #4
0
ファイル: disk.py プロジェクト: dx9/python-agent
class DiskCollector(object):
    def __init__(self):
        self.unit = 1048576
        self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                          Config.cadvisor_port())

    def _convert_units(self, number):
        # Return in MB
        return round(float(number) / self.unit, 3)

    def _get_mountpoints_cadvisor(self):
        data = {}
        stat = self.cadvisor.get_latest_stat()

        if 'filesystem' in stat.keys():
            for fs in stat['filesystem']:
                device = fs['device']
                percent_used = float(fs['usage']) / float(fs['capacity']) * 100

                data[device] = {
                    'free': self._convert_units(fs['capacity'] - fs['usage']),
                    'total': self._convert_units(fs['capacity']),
                    'used': self._convert_units(fs['usage']),
                    'percentUsed': round(percent_used, 2)
                }

        return data

    def key_name(self):
        return 'diskInfo'

    def get_data(self):
        data = {}
        data['mountPoints'] = {}

        if platform.system() == 'Linux':
            data['mountPoints'].update(self._get_mountpoints_cadvisor())

        return data
コード例 #5
0
ファイル: disk.py プロジェクト: aruneli/python-agent
 def __init__(self):
     self.unit = 1048576
     self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                       Config.cadvisor_port())
コード例 #6
0
ファイル: disk.py プロジェクト: dx9/python-agent
 def __init__(self):
     self.unit = 1048576
     self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                       Config.cadvisor_port())
コード例 #7
0
ファイル: cpu.py プロジェクト: m4ce/python-agent
class CpuCollector(object):
    def __init__(self):
        self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                          Config.cadvisor_port())

    def _get_cpuinfo_data(self):
        with open('/proc/cpuinfo') as f:
            data = f.readlines()

        return data

    def _get_linux_cpu_info(self):
        data = {}

        procs = []
        file_data = self._get_cpuinfo_data()
        for line in file_data:
            split_line = line.split(':')
            if split_line[0].strip() == "model name":
                procs.append(split_line[1].strip())
                freq = re.search(r'([0-9\.]+)\s?GHz', split_line[1])
                if freq:
                    data['mhz'] = float(freq.group(1)) * 1000

            if 'mhz' not in data:
                if split_line[0].strip() == "cpu MHz":
                    data['mhz'] = float(split_line[1].strip())

        data['modelName'] = procs[0]
        data['count'] = len(procs)

        return data

    def _get_cpu_percentages(self):
        data = {}
        data['cpuCoresPercentages'] = []

        stats = self.cadvisor.get_stats()

        if len(stats) >= 2:
            stat_latest = stats[-1]
            stat_prev = stats[-2]

            time_diff = self.cadvisor.timestamp_diff(stat_latest['timestamp'],
                                                     stat_prev['timestamp'])

            latest_usage = stat_latest['cpu']['usage']['per_cpu_usage']
            prev_usage = stat_prev['cpu']['usage']['per_cpu_usage']

            for idx, core_usage in enumerate(latest_usage):
                cpu_usage = float(core_usage) - float(prev_usage[idx])
                percentage = (cpu_usage/time_diff) * 100
                percentage = round(percentage, 3)

                if percentage > 100:
                    percentage = math.floor(percentage)

                data['cpuCoresPercentages'].append(percentage)

        return data

    def _get_load_average(self):
        return {'loadAvg': list(os.getloadavg())}

    def key_name(self):
        return "cpuInfo"

    def get_data(self):
        data = {}

        if platform.system() == 'Linux':
            data.update(self._get_linux_cpu_info())
            data.update(self._get_load_average())
            data.update(self._get_cpu_percentages())

        return data

    def get_labels(self, pfx="rancher"):
        if os.path.exists('/dev/kvm'):
            return {".".join([pfx, "kvm"]): "true"}
        else:
            return {}
コード例 #8
0
ファイル: cpu.py プロジェクト: cloudnautique/python-agent
class CpuCollector(object):
    def __init__(self):
        self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                          Config.cadvisor_port())

    def _get_cpuinfo_data(self):
        with open('/proc/cpuinfo') as f:
            data = f.readlines()

        return data

    def _get_linux_cpu_info(self):
        data = {}

        procs = []
        file_data = self._get_cpuinfo_data()
        for line in file_data:
            split_line = line.split(':')
            if split_line[0].strip() == "model name":
                procs.append(split_line[1].strip())

            if split_line[0].strip() == "cpu MHz":
                data['mhz'] = float(split_line[1].strip())

        data['modelName'] = procs[0]
        data['count'] = len(procs)

        return data

    def _get_cpu_percentages(self):
        data = {}
        data['cpuCoresPercentages'] = []

        stats = self.cadvisor.get_stats()
        stat_latest = stats[-1]
        stat_prev = stats[-2]

        time_diff = self.cadvisor.timestamp_diff(stat_latest['timestamp'],
                                                 stat_prev['timestamp'])

        latest_usage = stat_latest['cpu']['usage']['per_cpu_usage']
        prev_usage = stat_prev['cpu']['usage']['per_cpu_usage']

        for idx, core_usage in enumerate(latest_usage):
            cpu_usage = float(core_usage) - float(prev_usage[idx])
            percentage = (cpu_usage/time_diff) * 100
            percentage = round(percentage, 3)

            if percentage > 100:
                percentage = math.floor(percentage)

            data['cpuCoresPercentages'].append(percentage)

        return data

    def _get_load_average(self):
        return {'loadAvg': list(os.getloadavg())}

    def key_name(self):
        return "cpuInfo"

    def get_data(self):
        data = {}

        if platform.system() == 'Linux':
            data.update(self._get_linux_cpu_info())
            data.update(self._get_load_average())
            data.update(self._get_cpu_percentages())

        return data
コード例 #9
0
class DiskCollector(object):
    def __init__(self, docker_client=None):
        self.unit = 1048576
        self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                          Config.cadvisor_port())

        self.docker_client = docker_client
        self.docker_storage_driver = None

        if self.docker_client:
            self.docker_storage_driver = \
                self.docker_client.info().get("Driver", None)

    def _convert_units(self, number):
        # Return in MB
        return round(float(number)/self.unit, 3)

    def _get_dockerstorage_info(self):
        data = {}

        if self.docker_client:
            for item in self.docker_client.info().get("DriverStatus"):
                data[item[0]] = item[1]

        return data

    def _include_in_filesystem(self, device):
        include = True

        if self.docker_storage_driver == "devicemapper":
            if device.startswith("/dev/mapper/docker-"):
                include = False

        return include

    def _get_mountpoints_cadvisor(self):
        data = {}
        stat = self.cadvisor.get_latest_stat()

        if 'filesystem' in stat.keys():
            for fs in stat['filesystem']:
                device = fs['device']
                percent_used = \
                    float(fs['usage']) / float(fs['capacity']) * 100

                data[device] = {
                    'free': self._convert_units(fs['capacity'] - fs['usage']),
                    'total': self._convert_units(fs['capacity']),
                    'used': self._convert_units(fs['usage']),
                    'percentUsed': round(percent_used, 2)
                }

        return data

    def _get_machine_filesystems_cadvisor(self):
        data = {}
        machine_info = self.cadvisor.get_machine_stats()

        if 'filesystems' in machine_info.keys():
            for filesystem in machine_info['filesystems']:
                if self._include_in_filesystem(filesystem['device']):
                    data[filesystem['device']] = {
                        'capacity': self._convert_units(filesystem['capacity'])
                    }

        return data

    def key_name(self):
        return 'diskInfo'

    def get_data(self):
        data = {
            'fileSystems': {},
            'mountPoints': {},
            'dockerStorageDriverStatus': {},
            'dockerStorageDriver': self.docker_storage_driver
        }

        if platform.system() == 'Linux':
            data['fileSystems'].update(
                self._get_machine_filesystems_cadvisor())
            data['mountPoints'].update(self._get_mountpoints_cadvisor())

        data['dockerStorageDriverStatus'].update(
            self._get_dockerstorage_info())

        return data
コード例 #10
0
ファイル: disk.py プロジェクト: m4ce/python-agent
class DiskCollector(object):
    def __init__(self, docker_client=None):
        self.unit = 1048576
        self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(),
                                          Config.cadvisor_port())

        self.docker_client = docker_client
        self.docker_storage_driver = None

        if self.docker_client:
            self.docker_storage_driver = \
                self.docker_client.info().get("Driver", None)

    def _convert_units(self, number):
        # Return in MB
        return round(float(number) / self.unit, 3)

    def _get_dockerstorage_info(self):
        data = {}

        if self.docker_client:
            for item in self.docker_client.info().get("DriverStatus"):
                data[item[0]] = item[1]

        return data

    def _include_in_filesystem(self, device):
        include = True

        if self.docker_storage_driver == "devicemapper":
            pool = self._get_dockerstorage_info()

            pool_name = pool.get("Pool Name", "/dev/mapper/docker-")
            if pool_name.endswith("-pool"):
                pool_name = pool_name[:-5]

            if pool_name in device:
                include = False

        return include

    def _get_mountpoints_cadvisor(self):
        data = {}
        stat = self.cadvisor.get_latest_stat()

        if 'filesystem' in stat.keys():
            for fs in stat['filesystem']:
                device = fs['device']
                percent_used = \
                    float(fs['usage']) / float(fs['capacity']) * 100

                data[device] = {
                    'free': self._convert_units(fs['capacity'] - fs['usage']),
                    'total': self._convert_units(fs['capacity']),
                    'used': self._convert_units(fs['usage']),
                    'percentUsed': round(percent_used, 2)
                }

        return data

    def _get_machine_filesystems_cadvisor(self):
        data = {}
        machine_info = self.cadvisor.get_machine_stats()

        if 'filesystems' in machine_info.keys():
            for filesystem in machine_info['filesystems']:
                if self._include_in_filesystem(filesystem['device']):
                    data[filesystem['device']] = {
                        'capacity': self._convert_units(filesystem['capacity'])
                    }

        return data

    def key_name(self):
        return 'diskInfo'

    def get_data(self):
        data = {
            'fileSystems': {},
            'mountPoints': {},
            'dockerStorageDriverStatus': {},
            'dockerStorageDriver': self.docker_storage_driver
        }

        if platform.system() == 'Linux':
            data['fileSystems'].update(
                self._get_machine_filesystems_cadvisor())
            data['mountPoints'].update(self._get_mountpoints_cadvisor())

        data['dockerStorageDriverStatus'].update(
            self._get_dockerstorage_info())

        return data
コード例 #11
0
ファイル: test_utils.py プロジェクト: m4ce/python-agent
def cadvisor_client():
    return CadvisorAPIClient('127.0.0.1', '9344')