def __handle_stat(self, stat, id, topic, container_name): try: read_dt = parser.parse(stat["read"]) timestamp = int((time.mktime(read_dt.timetuple()) + (read_dt.microsecond / 1000000.0)) * 1000) memory_usage = float(stat["memory_stats"]["usage"]) / float(stat["memory_stats"]["limit"]) Metric.create(topic=topic, container=container_name, timestamp=timestamp, name="memory", value=memory_usage) # Calculate CPU usage. The docker API returns the number of cycles consumed # by the container and the number of cycles consumed by the system. We need # to take the difference over time and divide them to retrieve the usage # percentage. total_usage = float(stat["cpu_stats"]["cpu_usage"]["total_usage"]) system_usage = float(stat["cpu_stats"]["system_cpu_usage"]) if id in self.id_to_cpu: usage_diff = total_usage - self.id_to_cpu[id]["total"] system_diff = system_usage - self.id_to_cpu[id]["system"] if usage_diff >= 0: usage_pct = usage_diff / system_diff else: usage_pct = 0.0 Metric.create(topic=topic, container=container_name, timestamp=timestamp, name="cpu", value=usage_pct) self.id_to_cpu[id] = {"total": total_usage, "system": system_usage} except: # We don't want to kill the stat thread, and we don't really mind # if some statistics aren't saved properly pass
def __handle_stat(self, stat, id, topic, container_name): try: read_dt = parser.parse(stat['read']) timestamp = int((time.mktime(read_dt.timetuple()) + (read_dt.microsecond / 1000000.0)) * 1000) memory_usage = float(stat['memory_stats']['usage']) / float( stat['memory_stats']['limit']) Metric.create(topic=topic, container=container_name, timestamp=timestamp, name='memory', value=memory_usage) # Calculate CPU usage. The docker API returns the number of cycles consumed # by the container and the number of cycles consumed by the system. We need # to take the difference over time and divide them to retrieve the usage # percentage. total_usage = float(stat['cpu_stats']['cpu_usage']['total_usage']) system_usage = float(stat['cpu_stats']['system_cpu_usage']) if id in self.id_to_cpu: usage_diff = total_usage - self.id_to_cpu[id]['total'] system_diff = system_usage - self.id_to_cpu[id]['system'] if usage_diff >= 0: usage_pct = usage_diff / system_diff else: usage_pct = 0.0 Metric.create(topic=topic, container=container_name, timestamp=timestamp, name='cpu', value=usage_pct) self.id_to_cpu[id] = {'total': total_usage, 'system': system_usage} except: # We don't want to kill the stat thread, and we don't really mind # if some statistics aren't saved properly pass