| Index: third_party/psutil/psutil/_psbsd.py
|
| diff --git a/third_party/psutil/psutil/_psbsd.py b/third_party/psutil/psutil/_psbsd.py
|
| index 6c4624efc529f42e442ebb33330087a8559d99da..b437a6a500445e727e7384ac22e87abf594e9ed7 100644
|
| --- a/third_party/psutil/psutil/_psbsd.py
|
| +++ b/third_party/psutil/psutil/_psbsd.py
|
| @@ -1,62 +1,84 @@
|
| #!/usr/bin/env python
|
| #
|
| -# $Id: _psbsd.py 806 2010-11-12 23:09:35Z g.rodola $
|
| +# $Id: _psbsd.py 1142 2011-10-05 18:45:49Z 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
|
| +# found in the LICENSE file.
|
| +
|
| +"""FreeBSD platform implementation."""
|
|
|
| import errno
|
| import os
|
|
|
| -try:
|
| - from collections import namedtuple
|
| -except ImportError:
|
| - from psutil.compat import namedtuple # python < 2.6
|
| -
|
| import _psutil_bsd
|
| +import _psutil_posix
|
| import _psposix
|
| -from psutil.error import AccessDenied, NoSuchProcess
|
| +from psutil.error import AccessDenied, NoSuchProcess, TimeoutExpired
|
| +from psutil._compat import namedtuple
|
| +from psutil._common import *
|
|
|
| +__extra__all__ = []
|
|
|
| # --- constants
|
|
|
| NUM_CPUS = _psutil_bsd.get_num_cpus()
|
| -TOTAL_PHYMEM = _psutil_bsd.get_total_phymem()
|
| +BOOT_TIME = _psutil_bsd.get_system_boot_time()
|
| +_TERMINAL_MAP = _psposix._get_terminal_map()
|
| +_cputimes_ntuple = namedtuple('cputimes', 'user nice system idle irq')
|
|
|
| # --- public functions
|
|
|
| -def avail_phymem():
|
| - "Return the amount of physical memory available on the system, in bytes."
|
| - return _psutil_bsd.get_avail_phymem()
|
| -
|
| -def used_phymem():
|
| - "Return the amount of physical memory currently in use on the system, in bytes."
|
| - return TOTAL_PHYMEM - _psutil_bsd.get_avail_phymem()
|
| -
|
| -def total_virtmem():
|
| - "Return the amount of total virtual memory available on the system, in bytes."
|
| - return _psutil_bsd.get_total_virtmem()
|
| -
|
| -def avail_virtmem():
|
| - "Return the amount of virtual memory currently in use on the system, in bytes."
|
| - return _psutil_bsd.get_avail_virtmem()
|
| -
|
| -def used_virtmem():
|
| - """Return the amount of used memory currently in use on the system, in bytes."""
|
| - return _psutil_bsd.get_total_virtmem() - _psutil_bsd.get_avail_virtmem()
|
| +def phymem_usage():
|
| + """Physical system memory as a (total, used, free) tuple."""
|
| + total = _psutil_bsd.get_total_phymem()
|
| + free = _psutil_bsd.get_avail_phymem()
|
| + used = total - free
|
| + # XXX check out whether we have to do the same math we do on Linux
|
| + percent = usage_percent(used, total, _round=1)
|
| + return ntuple_sysmeminfo(total, used, free, percent)
|
| +
|
| +def virtmem_usage():
|
| + """Virtual system memory as a (total, used, free) tuple."""
|
| + total = _psutil_bsd.get_total_virtmem()
|
| + free = _psutil_bsd.get_avail_virtmem()
|
| + used = total - free
|
| + percent = usage_percent(used, total, _round=1)
|
| + return ntuple_sysmeminfo(total, used, free, percent)
|
|
|
| def get_system_cpu_times():
|
| - """Return a dict representing the following CPU times:
|
| - user, nice, system, idle, interrupt."""
|
| - values = _psutil_bsd.get_system_cpu_times()
|
| - return dict(user=values[0], nice=values[1], system=values[2],
|
| - idle=values[3], irq=values[4])
|
| -
|
| -def get_pid_list():
|
| - """Returns a list of PIDs currently running on the system."""
|
| - return _psutil_bsd.get_pid_list()
|
| -
|
| -def pid_exists(pid):
|
| - """Check For the existence of a unix pid."""
|
| - return _psposix.pid_exists(pid)
|
| + """Return system per-CPU times as a named tuple"""
|
| + user, nice, system, idle, irq = _psutil_bsd.get_system_cpu_times()
|
| + return _cputimes_ntuple(user, nice, system, idle, irq)
|
| +
|
| +def get_system_per_cpu_times():
|
| + """Return system CPU times as a named tuple"""
|
| + ret = []
|
| + for cpu_t in _psutil_bsd.get_system_per_cpu_times():
|
| + user, nice, system, idle, irq = cpu_t
|
| + item = _cputimes_ntuple(user, nice, system, idle, irq)
|
| + ret.append(item)
|
| + return ret
|
| +
|
| +def disk_partitions(all=False):
|
| + retlist = []
|
| + partitions = _psutil_bsd.get_disk_partitions()
|
| + for partition in partitions:
|
| + device, mountpoint, fstype = partition
|
| + if device == 'none':
|
| + device = ''
|
| + if not all:
|
| + if not os.path.isabs(device) \
|
| + or not os.path.exists(device):
|
| + continue
|
| + ntuple = ntuple_partition(device, mountpoint, fstype)
|
| + retlist.append(ntuple)
|
| + return retlist
|
| +
|
| +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
|
|
|
|
|
| def wrap_exceptions(method):
|
| @@ -75,12 +97,20 @@ def wrap_exceptions(method):
|
| raise
|
| return wrapper
|
|
|
| +_status_map = {
|
| + _psutil_bsd.SSTOP : STATUS_STOPPED,
|
| + _psutil_bsd.SSLEEP : STATUS_SLEEPING,
|
| + _psutil_bsd.SRUN : STATUS_RUNNING,
|
| + _psutil_bsd.SIDL : STATUS_IDLE,
|
| + _psutil_bsd.SWAIT : STATUS_WAITING,
|
| + _psutil_bsd.SLOCK : STATUS_LOCKED,
|
| + _psutil_bsd.SZOMB : STATUS_ZOMBIE,
|
| +}
|
| +
|
|
|
| -class BSDProcess(object):
|
| +class Process(object):
|
| """Wrapper class around underlying C implementation."""
|
|
|
| - _meminfo_ntuple = namedtuple('meminfo', 'rss vms')
|
| - _cputimes_ntuple = namedtuple('cputimes', 'user system')
|
| __slots__ = ["pid", "_process_name"]
|
|
|
| def __init__(self, pid):
|
| @@ -92,10 +122,10 @@ class BSDProcess(object):
|
| """Return process name as a string of limited len (15)."""
|
| return _psutil_bsd.get_process_name(self.pid)
|
|
|
| + @wrap_exceptions
|
| def get_process_exe(self):
|
| - # no such thing as "exe" on BSD; it will maybe be determined
|
| - # later from cmdline[0]
|
| - return ""
|
| + """Return process executable pathname."""
|
| + return _psutil_bsd.get_process_exe(self.pid)
|
|
|
| @wrap_exceptions
|
| def get_process_cmdline(self):
|
| @@ -103,31 +133,41 @@ class BSDProcess(object):
|
| return _psutil_bsd.get_process_cmdline(self.pid)
|
|
|
| @wrap_exceptions
|
| + def get_process_terminal(self):
|
| + tty_nr = _psutil_bsd.get_process_tty_nr(self.pid)
|
| + try:
|
| + return _TERMINAL_MAP[tty_nr]
|
| + except KeyError:
|
| + return None
|
| +
|
| + @wrap_exceptions
|
| def get_process_ppid(self):
|
| """Return process parent pid."""
|
| return _psutil_bsd.get_process_ppid(self.pid)
|
|
|
| @wrap_exceptions
|
| - def get_process_uid(self):
|
| - """Return process real user id."""
|
| - return _psutil_bsd.get_process_uid(self.pid)
|
| + def get_process_uids(self):
|
| + """Return real, effective and saved user ids."""
|
| + real, effective, saved = _psutil_bsd.get_process_uids(self.pid)
|
| + return ntuple_uids(real, effective, saved)
|
|
|
| @wrap_exceptions
|
| - def get_process_gid(self):
|
| - """Return process real group id."""
|
| - return _psutil_bsd.get_process_gid(self.pid)
|
| + def get_process_gids(self):
|
| + """Return real, effective and saved group ids."""
|
| + real, effective, saved = _psutil_bsd.get_process_gids(self.pid)
|
| + return ntuple_gids(real, effective, saved)
|
|
|
| @wrap_exceptions
|
| def get_cpu_times(self):
|
| """return a tuple containing process user/kernel time."""
|
| user, system = _psutil_bsd.get_cpu_times(self.pid)
|
| - return self._cputimes_ntuple(user, system)
|
| + return ntuple_cputimes(user, system)
|
|
|
| @wrap_exceptions
|
| def get_memory_info(self):
|
| """Return a tuple with the process' RSS and VMS size."""
|
| rss, vms = _psutil_bsd.get_memory_info(self.pid)
|
| - return self._meminfo_ntuple(rss, vms)
|
| + return ntuple_meminfo(rss, vms)
|
|
|
| @wrap_exceptions
|
| def get_process_create_time(self):
|
| @@ -140,6 +180,16 @@ class BSDProcess(object):
|
| """Return the number of threads belonging to the process."""
|
| return _psutil_bsd.get_process_num_threads(self.pid)
|
|
|
| + @wrap_exceptions
|
| + def get_process_threads(self):
|
| + """Return the number of threads belonging to the process."""
|
| + rawlist = _psutil_bsd.get_process_threads(self.pid)
|
| + retlist = []
|
| + for thread_id, utime, stime in rawlist:
|
| + ntuple = ntuple_thread(thread_id, utime, stime)
|
| + retlist.append(ntuple)
|
| + return retlist
|
| +
|
| def get_open_files(self):
|
| """Return files opened by process by parsing lsof output."""
|
| lsof = _psposix.LsofParser(self.pid, self._process_name)
|
| @@ -152,6 +202,29 @@ class BSDProcess(object):
|
| lsof = _psposix.LsofParser(self.pid, self._process_name)
|
| return lsof.get_process_connections()
|
|
|
| + @wrap_exceptions
|
| + def process_wait(self, timeout=None):
|
| + try:
|
| + return _psposix.wait_pid(self.pid, timeout)
|
| + except TimeoutExpired:
|
| + raise TimeoutExpired(self.pid, self._process_name)
|
| +
|
| + @wrap_exceptions
|
| + def get_process_nice(self):
|
| + return _psutil_posix.getpriority(self.pid)
|
| +
|
| + @wrap_exceptions
|
| + def set_process_nice(self, value):
|
| + return _psutil_posix.setpriority(self.pid, value)
|
|
|
| -PlatformProcess = BSDProcess
|
| + @wrap_exceptions
|
| + def get_process_status(self):
|
| + code = _psutil_bsd.get_process_status(self.pid)
|
| + if code in _status_map:
|
| + return _status_map[code]
|
| + return constant(-1, "?")
|
|
|
| + @wrap_exceptions
|
| + def get_process_io_counters(self):
|
| + rc, wc, rb, wb = _psutil_bsd.get_process_io_counters(self.pid)
|
| + return ntuple_io(rc, wc, rb, wb)
|
|
|