[tor-commits] [arm/master] Using a named tuple for tracked resource usage
atagar at torproject.org
atagar at torproject.org
Mon Oct 21 21:10:15 UTC 2013
commit e1ac26ec80eda75d16f2d936edaa01b38f7e4439
Author: Damian Johnson <atagar at torproject.org>
Date: Sun Oct 20 19:07:58 2013 -0700
Using a named tuple for tracked resource usage
Swapping us over to a named tuple so we can change our callers from tuple
expansion to using a named tuple's attributes.
---
arm/util/sysTools.py | 36 ++++++++++++++++++++++++------------
1 file changed, 24 insertions(+), 12 deletions(-)
diff --git a/arm/util/sysTools.py b/arm/util/sysTools.py
index 573b233..51d41ba 100644
--- a/arm/util/sysTools.py
+++ b/arm/util/sysTools.py
@@ -2,7 +2,7 @@
Helper functions for working with the underlying system.
"""
-import os
+import collections
import time
import threading
@@ -18,6 +18,20 @@ RESOURCE_TRACKERS = {} # mapping of pids to their resource tracker instances
RUNTIMES = []
SAMPLING_PERIOD = 5 # time of the sampling period
+# Process resources we poll...
+#
+# cpu_sample - average cpu usage since we last checked
+# cpu_average - average cpu usage since we first started tracking the process
+# memory_bytes - memory usage of the process in bytes
+# memory_precent - percentage of our memory used by this process
+
+Resources = collections.namedtuple('Resources', [
+ 'cpu_sample',
+ 'cpu_average',
+ 'memory_bytes',
+ 'memory_percent',
+])
+
CONFIG = conf.config_dict("arm", {
"queries.resourceUsage.rate": 5,
})
@@ -81,10 +95,7 @@ class ResourceTracker(arm.util.tracker.Daemon):
self.processPid = processPid
- self.cpuSampling = 0.0 # latest cpu usage sampling
- self.cpuAvg = 0.0 # total average cpu usage
- self.memUsage = 0 # last sampled memory usage in bytes
- self.memUsagePercentage = 0.0 # percentage cpu usage
+ self._last_sample = None
# resolves usage via proc results if true, ps otherwise
self._useProc = proc.is_available()
@@ -100,15 +111,19 @@ class ResourceTracker(arm.util.tracker.Daemon):
def getResourceUsage(self):
"""
- Provides the last cached resource usage as a tuple of the form:
+ Provides the last cached resource usage as a named tuple of the form:
(cpuUsage_sampling, cpuUsage_avg, memUsage_bytes, memUsage_percent)
"""
self._valLock.acquire()
- results = (self.cpuSampling, self.cpuAvg, self.memUsage, self.memUsagePercentage)
+
+ if self._last_sample is None:
+ result = Resources(0.0, 0.0, 0, 0.0)
+ else:
+ result = self._last_sample
self._valLock.release()
- return results
+ return result
def lastQueryFailed(self):
"""
@@ -197,10 +212,7 @@ class ResourceTracker(arm.util.tracker.Daemon):
newValues["cpuSampling"] = newValues["cpuAvg"]
self._valLock.acquire()
- self.cpuSampling = newValues["cpuSampling"]
- self.cpuAvg = newValues["cpuAvg"]
- self.memUsage = newValues["memUsage"]
- self.memUsagePercentage = newValues["memUsagePercentage"]
+ self._last_sample = Resources(newValues["cpuSampling"], newValues["cpuAvg"], newValues["memUsage"], newValues["memUsagePercentage"])
self._lastCpuTotal = newValues["_lastCpuTotal"]
self.lastLookup = time.time()
self._failureCount = 0
More information about the tor-commits
mailing list