# -*- coding:utf-8 -*- from i3pystatus import IntervalModule class CpuUsage(IntervalModule): """ Shows CPU usage. The first output will be inacurate Linux only Available formatters: * {usage} """ format = "{usage:02}%" settings = ( ("format", "format string"), ) def init(self): self.prev_idle = 0 self.prev_busy = 0 self.interval = 1 def get_usage(self): """ parses /proc/stat and calcualtes total and busy time (more specific USER_HZ see man 5 proc for further informations ) """ with open('/proc/stat', 'r') as file_obj: stats = file_obj.readline().strip().split() cpu_timings = [int(x) for x in stats[1:]] cpu_total = sum(cpu_timings) del cpu_timings[3:5] cpu_busy = sum(cpu_timings) return cpu_total, cpu_busy def run(self): cpu_total, cpu_busy = self.get_usage() diff_cpu_total = cpu_total - self.prev_idle diff_cpu_busy = cpu_busy - self.prev_busy self.prev_idle = cpu_total self.prev_busy = cpu_busy cpu_busy_percentage = int(diff_cpu_busy / diff_cpu_total * 100) self.output = { "full_text": self.format.format( usage=cpu_busy_percentage ) }