| Index: third_party/psutil/psutil/_psbsd.py
|
| diff --git a/third_party/psutil/psutil/_psbsd.py b/third_party/psutil/psutil/_psbsd.py
|
| index b437a6a500445e727e7384ac22e87abf594e9ed7..63def97a50e4e56ac8fb8cdb5d3cb0c61641b529 100644
|
| --- a/third_party/psutil/psutil/_psbsd.py
|
| +++ b/third_party/psutil/psutil/_psbsd.py
|
| @@ -1,6 +1,6 @@
|
| #!/usr/bin/env python
|
| #
|
| -# $Id: _psbsd.py 1142 2011-10-05 18:45:49Z g.rodola $
|
| +# $Id: _psbsd.py 1206 2011-10-26 21:13:51Z g.rodola $
|
| #
|
| # Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved.
|
| # Use of this source code is governed by a BSD-style license that can be
|
| @@ -59,6 +59,23 @@ def get_system_per_cpu_times():
|
| item = _cputimes_ntuple(user, nice, system, idle, irq)
|
| ret.append(item)
|
| return ret
|
| +
|
| +# XXX
|
| +# Ok, this is very dirty.
|
| +# On FreeBSD < 8 we cannot gather per-cpu information, see:
|
| +# http://code.google.com/p/psutil/issues/detail?id=226
|
| +# If NUM_CPUS > 1, on first call we return single cpu times to avoid a
|
| +# crash at psutil import time.
|
| +# Next calls will fail with NotImplementedError
|
| +if not hasattr(_psutil_bsd, "get_system_per_cpu_times"):
|
| + def get_system_per_cpu_times():
|
| + if NUM_CPUS == 1:
|
| + return [get_system_cpu_times]
|
| + if get_system_per_cpu_times.__called__:
|
| + raise NotImplementedError("supported only starting from FreeBSD 8")
|
| + get_system_per_cpu_times.__called__ = True
|
| + return [get_system_cpu_times]
|
| +get_system_per_cpu_times.__called__ = False
|
|
|
| def disk_partitions(all=False):
|
| retlist = []
|
| @@ -78,7 +95,8 @@ def disk_partitions(all=False):
|
| get_pid_list = _psutil_bsd.get_pid_list
|
| pid_exists = _psposix.pid_exists
|
| get_disk_usage = _psposix.get_disk_usage
|
| -network_io_counters = _psutil_osx.get_network_io_counters
|
| +network_io_counters = _psutil_bsd.get_network_io_counters
|
| +disk_io_counters = _psutil_bsd.get_disk_io_counters
|
|
|
|
|
| def wrap_exceptions(method):
|
| @@ -145,6 +163,13 @@ class Process(object):
|
| """Return process parent pid."""
|
| return _psutil_bsd.get_process_ppid(self.pid)
|
|
|
| + # XXX - available on FreeBSD >= 8 only
|
| + if hasattr(_psutil_bsd, "get_process_cwd"):
|
| + @wrap_exceptions
|
| + def get_process_cwd(self):
|
| + """Return process current working directory."""
|
| + return _psutil_bsd.get_process_cwd(self.pid)
|
| +
|
| @wrap_exceptions
|
| def get_process_uids(self):
|
| """Return real, effective and saved user ids."""
|
| @@ -190,17 +215,32 @@ class Process(object):
|
| retlist.append(ntuple)
|
| return retlist
|
|
|
| + @wrap_exceptions
|
| def get_open_files(self):
|
| - """Return files opened by process by parsing lsof output."""
|
| - lsof = _psposix.LsofParser(self.pid, self._process_name)
|
| - return lsof.get_process_open_files()
|
| -
|
| - def get_connections(self):
|
| + """Return files opened by process as a list of namedtuples."""
|
| + # XXX - C implementation available on FreeBSD >= 8 only
|
| + # else fallback on lsof parser
|
| + if hasattr(_psutil_bsd, "get_process_open_files"):
|
| + rawlist = _psutil_bsd.get_process_open_files(self.pid)
|
| + return [ntuple_openfile(path, fd) for path, fd in rawlist]
|
| + else:
|
| + lsof = _psposix.LsofParser(self.pid, self._process_name)
|
| + return lsof.get_process_open_files()
|
| +
|
| + def get_connections(self, kind='inet'):
|
| """Return network connections opened by a process as a list of
|
| namedtuples by parsing lsof output.
|
| """
|
| + if kind not in conn_tmap:
|
| + raise ValueError("invalid %r kind argument; choose between %s"
|
| + % (kind, ', '.join([repr(x) for x in conn_tmap])))
|
| + families, types = conn_tmap[kind]
|
| + ret = []
|
| lsof = _psposix.LsofParser(self.pid, self._process_name)
|
| - return lsof.get_process_connections()
|
| + for conn in lsof.get_process_connections():
|
| + if conn.family in families and conn.type in types:
|
| + ret.append(conn)
|
| + return ret
|
|
|
| @wrap_exceptions
|
| def process_wait(self, timeout=None):
|
|
|