Example #1
0
    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
Example #2
0
    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