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)
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
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
def __init__(self): self.unit = 1048576 self.cadvisor = CadvisorAPIClient(Config.cadvisor_ip(), Config.cadvisor_port())
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 {}
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
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
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
def cadvisor_client(): return CadvisorAPIClient('127.0.0.1', '9344')