commit 9ea729942a7046ea72ccfbddb011c0342eaf3560 Author: Damian Johnson atagar@torproject.org Date: Mon May 27 21:40:55 2013 -0700
Utilizing stem's pid resolution
Dropping our getPid() helper function in favor of stem's new Controller method for doing this. --- src/cli/controller.py | 10 +++---- src/cli/graphing/bandwidthStats.py | 2 +- src/cli/graphing/resourceStats.py | 2 +- src/cli/headerPanel.py | 3 +- src/util/torConfig.py | 2 +- src/util/torTools.py | 55 ++++-------------------------------- 6 files changed, 15 insertions(+), 59 deletions(-)
diff --git a/src/cli/controller.py b/src/cli/controller.py index 03b05e2..0e45ca9 100644 --- a/src/cli/controller.py +++ b/src/cli/controller.py @@ -499,10 +499,10 @@ def connResetListener(controller, eventType, _): if getController().getPanel("torrc") == None: torConfig.getTorrc().load(True)
- torPid = controller.get_info("process/pid", None) - - if torPid and torPid != resolver.getPid(): - resolver.setPid(torPid) + try: + resolver.setPid(controller.get_pid()) + except ValueError: + pass
def startTorMonitor(startTime): """ @@ -515,7 +515,7 @@ def startTorMonitor(startTime): # attempts to fetch the tor pid, warning if unsuccessful (this is needed for # checking its resource usage, among other things) conn = torTools.getConn() - torPid = conn.getMyPid() + torPid = conn.controller.get_pid(None)
if not torPid and conn.isAlive(): log.warn("Unable to determine Tor's pid. Some information, like its resource usage will be unavailable.") diff --git a/src/cli/graphing/bandwidthStats.py b/src/cli/graphing/bandwidthStats.py index 698a2b1..935e23d 100644 --- a/src/cli/graphing/bandwidthStats.py +++ b/src/cli/graphing/bandwidthStats.py @@ -125,7 +125,7 @@ class BandwidthStats(graphPanel.GraphStats): # TODO: stem dropped system caching support so we'll need to think of # something else uptime = None - queryPid = conn.getMyPid() + queryPid = conn.controller.get_pid(None) if queryPid: queryParam = ["%cpu", "rss", "%mem", "etime"] queryCmd = "ps -p %s -o %s" % (queryPid, ",".join(queryParam)) diff --git a/src/cli/graphing/resourceStats.py b/src/cli/graphing/resourceStats.py index d9c15b5..c0f18c9 100644 --- a/src/cli/graphing/resourceStats.py +++ b/src/cli/graphing/resourceStats.py @@ -14,7 +14,7 @@ class ResourceStats(graphPanel.GraphStats):
def __init__(self): graphPanel.GraphStats.__init__(self) - self.queryPid = torTools.getConn().getMyPid() + self.queryPid = torTools.getConn().controller.get_pid(None)
def clone(self, newCopy=None): if not newCopy: newCopy = ResourceStats() diff --git a/src/cli/headerPanel.py b/src/cli/headerPanel.py index b1bd65e..895db01 100644 --- a/src/cli/headerPanel.py +++ b/src/cli/headerPanel.py @@ -516,8 +516,7 @@ class HeaderPanel(panel.Panel, threading.Thread): self.vals["sys/os"] = unameVals[0] self.vals["sys/version"] = unameVals[2]
- pid = conn.getMyPid() - self.vals["tor/pid"] = pid if pid else "" + self.vals["tor/pid"] = conn.controller.get_pid("")
startTime = conn.getStartTime() self.vals["tor/startTime"] = startTime if startTime else "" diff --git a/src/util/torConfig.py b/src/util/torConfig.py index 52caae6..5f4e525 100644 --- a/src/util/torConfig.py +++ b/src/util/torConfig.py @@ -343,7 +343,7 @@ def getConfigLocation():
conn = torTools.getConn() configLocation = conn.getInfo("config-file", None) - torPid, torPrefix = conn.getMyPid(), conn.getPathPrefix() + torPid, torPrefix = conn.controller.get_pid(None), conn.getPathPrefix() if not configLocation: raise IOError("unable to query the torrc location")
try: diff --git a/src/util/torTools.py b/src/util/torTools.py index 397a32a..62898d5 100644 --- a/src/util/torTools.py +++ b/src/util/torTools.py @@ -51,37 +51,6 @@ REQ_EVENTS = {"NEWDESC": "information related to descriptors will grow stale", "NS": "information related to the consensus will grow stale", "NEWCONSENSUS": "information related to the consensus will grow stale"}
-def getPid(controlPort=9051, pidFilePath=None): - """ - Attempts to determine the process id for a running tor process. This uses - the PidFile if it's available, otherwise trying to figure it out from our - process name and control port. - - Arguments: - controlPort - control port of the tor process if multiple exist - pidFilePath - path to the pid file generated by tor - """ - - # attempts to fetch via the PidFile, failing if: - # - the option is unset - # - unable to read the file (such as insufficient permissions) - - if pidFilePath: - try: - pidFile = open(pidFilePath, "r") - pidEntry = pidFile.readline().strip() - pidFile.close() - - if pidEntry.isdigit(): return pidEntry - except: pass - - pid = stem.util.system.get_pid_by_name('tor') - - if pid is None: - pid = stem.util.system.get_pid_by_port(controlPort) - - return pid - def isTorRunning(): """ Simple check for if a tor process is running. If this can't be determined @@ -523,14 +492,6 @@ class Controller: else: return False
- def getMyPid(self): - """ - Provides the pid of the attached tor process (None if no controller exists - or this can't be determined). - """ - - return self._getRelayAttr("pid", None) - def getMyUser(self): """ Provides the user this process is running under. If unavailable this @@ -553,7 +514,7 @@ class Controller:
result = None if self.isAlive() and proc.is_available(): - myPid = self.getMyPid() + myPid = self.controller.get_pid(None)
if myPid: try: result = len(os.listdir("/proc/%s/fd" % myPid)) @@ -996,7 +957,8 @@ class Controller: if self._isReset: break
if not self._isReset: - errorLine, torPid = "", self.getMyPid() + errorLine, torPid = "", self.controller.get_pid(None) + if torPid: for line in pkillOutput: if line.startswith("pkill: %s - " % torPid): @@ -1320,11 +1282,6 @@ class Controller: if line.startswith("s "): result = line[2:].split() break - elif key == "pid": - result = self.getInfo("process/pid", None) - - if not result: - result = getPid(int(self.getOption("ControlPort", 9051)), self.getOption("PidFile", None)) elif key == "user": # provides the empty string if the query fails queriedUser = self.getInfo("process/user", None) @@ -1332,7 +1289,7 @@ class Controller: if queriedUser != None and queriedUser != "": result = queriedUser else: - myPid = self.getMyPid() + myPid = self.controller.get_pid(None)
if myPid: # if proc contents are available then fetch the pid from there and @@ -1378,7 +1335,7 @@ class Controller: # adjusts the prefix path to account for jails under FreeBSD (many # thanks to Fabian Keil!) if not prefixPath and os.uname()[0] == "FreeBSD": - torPid = getConn().getMyPid() + torPid = getConn().controller.get_pid(None) jid = system.get_bsd_jail_id(torPid) if jid != 0: # Output should be something like: @@ -1404,7 +1361,7 @@ class Controller: self._pathPrefixLogging = False # prevents logging if fetched again result = prefixPath elif key == "startTime": - myPid = self.getMyPid() + myPid = self.controller.get_pid(None)
if myPid: if proc.is_available():
tor-commits@lists.torproject.org