@@ -48,6 +48,8 @@ def __init__(self):
4848 data = file .readline ().split ()
4949 if data [0 ] != "cpu" :
5050 raise Exception ('did not start with "cpu"' )
51+ if len (data ) < 11 :
52+ raise Exception ("Unexpected /proc/stat format" )
5153 self .user = int (data [1 ])
5254 self .nice = int (data [2 ])
5355 self .system = int (data [3 ])
@@ -82,11 +84,11 @@ def idle_since(self, prev):
8284 + guest
8385 + guest_nice
8486 )
85- return float (idle ) / float ( total ) * 100
87+ return float (idle ) / total * 100 if total != 0 else 0.0
8688
8789elif sys .platform == "win32" :
8890 from ctypes .wintypes import DWORD
89- from ctypes import Structure , windll , WinError , GetLastError , byref
91+ from ctypes import Structure , windll , WinError , byref
9092
9193 class FILETIME (Structure ):
9294 _fields_ = [
@@ -104,7 +106,8 @@ def __init__(self):
104106 byref (user ),
105107 )
106108
107- assert success , WinError (GetLastError ())[1 ]
109+ if not success :
110+ raise WinError ()
108111
109112 self .idle = (idle .dwHighDateTime << 32 ) | idle .dwLowDateTime
110113 self .kernel = (kernel .dwHighDateTime << 32 ) | kernel .dwLowDateTime
@@ -114,7 +117,7 @@ def idle_since(self, prev):
114117 idle = self .idle - prev .idle
115118 user = self .user - prev .user
116119 kernel = self .kernel - prev .kernel
117- return float (idle ) / float (user + kernel ) * 100
120+ return float (idle ) / float (user + kernel - idle ) * 100 if ( user + kernel - idle ) != 0 else 0.0
118121
119122elif sys .platform == "darwin" :
120123 from ctypes import *
@@ -159,7 +162,8 @@ def idle_since(self, prev):
159162 system = self .system - prev .system
160163 idle = self .idle - prev .idle
161164 nice = self .nice - prev .nice
162- return float (idle ) / float (user + system + idle + nice ) * 100.0
165+ total = user + system + idle + nice
166+ return float (idle ) / total * 100 if total != 0 else 0.0
163167
164168else :
165169 print ("unknown platform" , sys .platform )
@@ -170,7 +174,7 @@ def idle_since(self, prev):
170174while True :
171175 time .sleep (1 )
172176 next_state = State ()
173- now = datetime .datetime .now (datetime .timezone .utc ).replace ( tzinfo = None ). isoformat ()
177+ now = datetime .datetime .now (datetime .timezone .utc ).isoformat ()
174178 idle = next_state .idle_since (cur_state )
175179 print ("%s,%s" % (now , idle ))
176180 sys .stdout .flush ()
0 commit comments