[arm/master] Providing pid and process name to the task() method

commit efdce8091daeb3724a3105ca6126d1df98f1782d Author: Damian Johnson <atagar@torproject.org> Date: Mon Oct 28 11:50:19 2013 -0700 Providing pid and process name to the task() method Having the Daemon class provide the pid and process name to subclasses via their _task() method. This provides better encapulation, so subclasses don't need to reference private attributes. Oh, and also fixing the resource tracker since I completely broke it earlier. --- arm/util/tracker.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/arm/util/tracker.py b/arm/util/tracker.py index 647acee..4f22dee 100644 --- a/arm/util/tracker.py +++ b/arm/util/tracker.py @@ -89,10 +89,7 @@ class Daemon(threading.Thread): def __init__(self, rate): threading.Thread.__init__(self) - self.daemon = True - - # PID and process name of the tor process we're tracking. These should only - # be used under the daemon's lock. + self.setDaemon(True) self._daemon_lock = threading.RLock() self._process_name = None @@ -124,17 +121,17 @@ class Daemon(threading.Thread): continue # done waiting, try again with self._daemon_lock: - is_successful = self._task() + is_successful = self._task(self._process_pid, self._process_name) if is_successful: self._run_counter += 1 self._last_ran = time.time() - def _task(self): + def _task(self, process_pid, process_name): """ Task the resolver is meant to perform. This should be implemented by - subclasses. This is executed under the daemon's lock. + subclasses. """ pass @@ -214,7 +211,7 @@ class ConnectionTracker(Daemon): self._failure_count = 0 self._rate_too_low_count = 0 - def _task(self): + def _task(self, process_pid, process_name): if self._custom_resolver: resolver = self._custom_resolver is_default_resolver = False @@ -229,8 +226,8 @@ class ConnectionTracker(Daemon): self._connections = connection.get_connections( resolver, - process_pid = self._process_pid, - process_name = self._process_name, + process_pid = process_pid, + process_name = process_name, ) runtime = time.time() - start_time @@ -319,7 +316,6 @@ class ResourceTracker(Daemon): def __init__(self): Daemon.__init__(self, CONFIG["queries.resourceUsage.rate"]) - self._procss_pid = None self._last_sample = None # resolves usage via proc results if true, ps otherwise @@ -350,8 +346,8 @@ class ResourceTracker(Daemon): return self._failure_count != 0 - def _task(self): - if self._procss_pid is None: + def _task(self, process_pid, process_name): + if process_pid is None: return time_since_reset = time.time() - self.last_lookup @@ -359,14 +355,14 @@ class ResourceTracker(Daemon): try: if self._use_proc: - utime, stime, start_time = proc.get_stats(self._procss_pid, proc.Stat.CPU_UTIME, proc.Stat.CPU_STIME, proc.Stat.START_TIME) + utime, stime, start_time = proc.get_stats(process_pid, proc.Stat.CPU_UTIME, proc.Stat.CPU_STIME, proc.Stat.START_TIME) total_cpu_time = float(utime) + float(stime) cpu_delta = total_cpu_time - self._last_cpu_total new_values["cpuSampling"] = cpu_delta / time_since_reset new_values["cpuAvg"] = total_cpu_time / (time.time() - float(start_time)) new_values["_lastCpuTotal"] = total_cpu_time - mem_usage = int(proc.get_memory_usage(self._procss_pid)[0]) + mem_usage = int(proc.get_memory_usage(process_pid)[0]) total_memory = proc.get_physical_memory() new_values["memUsage"] = mem_usage new_values["memUsagePercentage"] = float(mem_usage) / total_memory @@ -381,7 +377,7 @@ class ResourceTracker(Daemon): # TIME ELAPSED RSS %MEM # 0:04.40 37:57 18772 0.9 - ps_call = system.call("ps -p %s -o cputime,etime,rss,%%mem" % self._procss_pid) + ps_call = system.call("ps -p %s -o cputime,etime,rss,%%mem" % process_pid) is_successful = False if ps_call and len(ps_call) >= 2:
participants (1)
-
atagar@torproject.org