@@ -96,15 +96,15 @@ def _parse_stat(self, stat):
9696 def update (self , uptime ):
9797 """Update information about pids"""
9898 if self .done :
99- logger .debug (" Pid: %d is done" , self . pid )
99+ logger .debug (f' Pid: { self . pid :d } is done' )
100100 return
101- logger .debug (" Update pid: %d" , self .pid )
101+ logger .debug (f' Update pid: { self .pid :d } ' )
102102 self .uptime = uptime
103103
104104 try :
105- tasks = [int (f ) for f in os .listdir (f'/proc/{ self .pid } /task' ) if re .match (r"^\d+$" , f )]
105+ tasks = [int (f ) for f in os .listdir (f'/proc/{ self .pid :d } /task' ) if re .match (r"^\d+$" , f )]
106106 except Exception :
107- logger .debug (f'Failed to read /proc/{ self .pid } /task, most likely due to process ending' )
107+ logger .debug (f'Failed to read /proc/{ self .pid :d } /task, most likely due to process ending' )
108108 self .done = True
109109 return
110110
@@ -136,7 +136,7 @@ def __init__(self, id, outQueue, config):
136136 super (Sampler , self ).__init__ (id , outQueue , config )
137137 self .processes = {}
138138 self .create_time = time .time ()
139- self .previous_sample = None
139+ self .previous_total = None
140140 self .previous_sample_time = None
141141 self .software_mapper = None
142142
@@ -152,6 +152,7 @@ def __init__(self, id, outQueue, config):
152152
153153 def map_software (self ,
154154 aggr : Dict ) -> Dict :
155+ """Map usage to softwares"""
155156 output = dict ()
156157 if not self .software_mapper :
157158 logger .debug ('No software_mapper loaded...' )
@@ -169,64 +170,41 @@ def map_software(self,
169170 logger .debug (e )
170171 return output
171172
172- def collect_sample (self ):
173- logger .debug ('collect_sample()' )
174-
173+ def _collect_sample (self ) -> Tuple [Dict , Dict ]:
174+ logger .debug ('_collect_sample()' )
175175 with open ('/proc/uptime' , 'r' ) as f :
176176 uptime = float (f .readline ().split ()[0 ])
177-
178177 for pid in self .pids :
179178 logger .debug (f'evaluate pid: { pid } ' )
180179 if pid not in self .processes .keys ():
181180 logger .debug (f'Create new instance of Process for pid: { pid } ' )
182181 self .processes [pid ] = Process (pid , self .jobid )
183182 self .processes [pid ].update (uptime )
184-
185183 # Send information about current usage
186- aggr , total = self ._aggregate ()
187- sample = dict (current = dict (
188- software = self .map_software (aggr ),
189- total_user = total ['user' ],
190- total_system = total ['system' ]))
191- return sample
184+ return self ._aggregate
192185
193186 def sample (self ):
194187 logger .debug ('sample()' )
195-
196- with open ('/proc/uptime' , 'r' ) as f :
197- uptime = float (f .readline ().split ()[0 ])
198-
199- for pid in self .pids :
200- logger .debug (f'evaluate pid: { pid } ' )
201- if pid not in self .processes .keys ():
202- logger .debug (f'Create new instance of Process for pid: { pid } ' )
203- self .processes [pid ] = Process (pid , self .jobid )
204- self .processes [pid ].update (uptime )
205-
206- # Send information about current usage
207- aggr , total = self ._aggregate ()
208- if self .previous_sample_time is not None :
209- time_diff = time .time () - self .previous_sample_time
210- if time_diff > self .sampler_interval / 2 :
211- sample = {
212- "current" : {
213- "software" : self .map_software (aggr ),
214- "total_user" : total ["user" ],
215- "total_system" : total ["system" ],
216- "user" : (total ["user" ] - self .previous_total ["user" ])
217- / time_diff ,
218- "system" : (total ["system" ] - self .previous_total ["system" ])
219- / time_diff ,
220- }
221- }
222-
223- self .store (sample )
224- self .previous_total = total
225- self .previous_sample_time = time .time ()
226- self ._most_recent_sample = self .storage_wrapping (sample )
227- else :
188+ aggr , total = self ._collect_sample ()
189+ # Initial call
190+ if self .previous_sample_time is None :
191+ self .previous_total = total
192+ self .previous_sample_time = time .time ()
193+ return
194+ time_diff = time .time () - self .previous_sample_time
195+ previous_user = self .previous_sample ['total' ]['user' ]
196+ previous_system = self .previous_sample ['total' ]['system' ]
197+ if time_diff > self .sampler_interval / 2 :
198+ sample = dict (current = dict (
199+ software = self .map_software (aggr ),
200+ total_user = total ["user" ],
201+ total_system = total ["system" ],
202+ user = (total ["user" ] - previous_user ) / time_diff ,
203+ system = (total ["system" ] - previous_system ) / time_diff ))
204+ self .store (sample )
228205 self .previous_total = total
229206 self .previous_sample_time = time .time ()
207+ self ._most_recent_sample = self .storage_wrapping (sample )
230208
231209 @property
232210 def valid_procs (self ):
0 commit comments