commit 94a592de40006ac69c41e223362deef15b70c353 Author: Damian Johnson <ata...@torproject.org> Date: Mon Jul 27 09:52:08 2015 -0700
Retrieve the pid along with the process name Our connection panel wants both the process name and pid. Why not? It's already right there... --- nyx/util/tracker.py | 26 +++++++++++++++++--------- test/util/tracker/port_usage_tracker.py | 4 ++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/nyx/util/tracker.py b/nyx/util/tracker.py index 48697dc..ebb3b84 100644 --- a/nyx/util/tracker.py +++ b/nyx/util/tracker.py @@ -85,6 +85,11 @@ Resources = collections.namedtuple('Resources', [ 'timestamp', ]) +Process = collections.namedtuple('Process', [ + 'pid', + 'name', +]) + def get_connection_tracker(): """ @@ -248,7 +253,7 @@ def _process_for_ports(local_ports, remote_ports): :param list local_ports: local port numbers to look up :param list remote_ports: remote port numbers to look up - :returns: **dict** mapping the ports to the associated process names + :returns: **dict** mapping the ports to the associated **Process** :raises: **IOError** if unsuccessful """ @@ -257,12 +262,15 @@ def _process_for_ports(local_ports, remote_ports): line_comp = line.split() if not line: - return None, None, None # blank line + return None, None, None, None # blank line elif len(line_comp) != 10: - raise ValueError('lines are expected to have ten fields') + raise ValueError('lines are expected to have ten fields: %s' % line) elif line_comp[9] != '(ESTABLISHED)': - return None, None, None # connection isn't established + return None, None, None, None # connection isn't established + elif not line_comp[1].isdigit(): + raise ValueError('expected the pid (which is the second value) to be an integer: %s' % line) + pid = int(line_comp[1]) cmd = line_comp[0] port_map = line_comp[8] @@ -282,7 +290,7 @@ def _process_for_ports(local_ports, remote_ports): elif not connection.is_valid_port(remote_port): raise ValueError("'%s' isn't a valid port" % remote_port) - return int(local_port), int(remote_port), cmd + return int(local_port), int(remote_port), pid, cmd # atagar@fenrir:~/Desktop/nyx$ lsof -i tcp:51849 -i tcp:37277 # COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME @@ -302,12 +310,12 @@ def _process_for_ports(local_ports, remote_ports): for line in lsof_call: try: - local_port, remote_port, cmd = _parse_lsof_line(line) + local_port, remote_port, pid, cmd = _parse_lsof_line(line) if local_port in local_ports: - results[local_port] = cmd + results[local_port] = Process(pid, cmd) elif remote_port in remote_ports: - results[remote_port] = cmd + results[remote_port] = Process(pid, cmd) except ValueError as exc: raise IOError('unrecognized output from lsof (%s): %s' % (exc, line)) @@ -668,7 +676,7 @@ class PortUsageTracker(Daemon): :param list ports: port numbers to look up - :returns: **dict** mapping port numbers to the process using it + :returns: **dict** mapping port numbers to the **Process** using it """ self._last_requested_ports = ports diff --git a/test/util/tracker/port_usage_tracker.py b/test/util/tracker/port_usage_tracker.py index 219344f..8528e69 100644 --- a/test/util/tracker/port_usage_tracker.py +++ b/test/util/tracker/port_usage_tracker.py @@ -1,7 +1,7 @@ import time import unittest -from nyx.util.tracker import PortUsageTracker, _process_for_ports +from nyx.util.tracker import Process, PortUsageTracker, _process_for_ports from mock import Mock, patch @@ -50,7 +50,7 @@ class TestPortUsageTracker(unittest.TestCase): self.assertEqual({}, _process_for_ports([80, 443], [])) self.assertEqual({}, _process_for_ports([], [80, 443])) - self.assertEqual({37277: 'python', 51849: 'tor'}, _process_for_ports([37277], [51849])) + self.assertEqual({37277: Process(2462, 'python'), 51849: Process(2001, 'tor')}, _process_for_ports([37277], [51849])) @patch('nyx.util.tracker.system.call') def test_process_for_ports_malformed(self, call_mock): _______________________________________________ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits