| TODO |
| ==== |
| |
| A collection of ideas and notes about stuff to implement in future versions. |
| "#NNN" occurrences refer to bug tracker issues at: |
| https://github.com/giampaolo/psutil/issues |
| |
| PLATFORMS |
| ========= |
| |
| - #355: Android (with patch) |
| - #605: AIX (with branch) |
| - #82: Cygwin (PR at #998) |
| - #276: GNU/Hurd |
| - #693: Windows Nano |
| - DragonFlyBSD |
| - HP-UX |
| |
| FEATURES |
| ======== |
| |
| - #371: sensors_temperatures() at least for OSX. |
| |
| - #669: Windows / net_if_addrs(): return broadcast addr. |
| |
| - #550: CPU info (frequency, architecture, threads per core, cores per socket, |
| sockets, ...) |
| |
| - #772: extended net_io_counters() metrics. |
| |
| - #900: wheels for OSX and Linux. |
| |
| - #922: extended net_io_stats() info. |
| |
| - #914: extended platform specific process info. |
| |
| - #898: wifi stats |
| |
| - #893: (BSD) process environ |
| |
| - #809: (BSD) per-process resource limits (rlimit()). |
| |
| - (UNIX) process root (different from cwd) |
| |
| - #782: (UNIX) process num of signals received. |
| |
| - (Linux) locked files via /proc/locks: |
| https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-proc-locks.html |
| |
| - #269: NIC rx/tx queue. This should probably go into net_if_stats(). |
| Figure out on what platforms this is supported: |
| Linux: yes |
| Others: ? |
| |
| - Process.threads(): thread names; patch for OSX available at: |
| https://code.google.com/p/plcrashreporter/issues/detail?id=65 |
| Sample code: |
| https://github.com/janmojzis/pstree/blob/master/proc_kvm.c |
| |
| - Asynchronous psutil.Popen (see http://bugs.python.org/issue1191964) |
| |
| - (Windows) fall back on using WMIC for Process methods returning AccessDenied |
| |
| - #613: thread names. |
| |
| - #604: emulate os.getloadavg() on Windows |
| |
| - scripts/taskmgr-gui.py (using tk). |
| |
| - system-wide number of open file descriptors: |
| - https://jira.hyperic.com/browse/SIGAR-30 |
| |
| - Number of system threads. |
| - Windows: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684824(v=vs.85).aspx |
| |
| - Doc / wiki which compares similarities between UNIX cli tools and psutil. |
| Example: |
| ``` |
| df -a -> psutil.disk_partitions |
| lsof -> psutil.Process.open_files() and psutil.Process.open_connections() |
| killall-> (actual script) |
| tty -> psutil.Process.terminal() |
| who -> psutil.users() |
| ``` |
| |
| - psutil.proc_tree() something which obtains a {pid:ppid, ...} dict for |
| all running processes in one shot. This can be factored out from |
| Process.children() and exposed as a first class function. |
| PROS: on Windows we can take advantage of _psutil_windows.ppid_map() |
| which is faster than iterating over all pids and calling ppid(). |
| CONS: scripts/pstree.py shows this can be easily done in the user code |
| so maybe it's not worth the addition. |
| |
| - advanced cmdline interface exposing the whole API and providing different |
| kind of outputs (e.g. pprinted, colorized, json). |
| |
| - [Linux]: process cgroups (http://en.wikipedia.org/wiki/Cgroups). They look |
| similar to prlimit() in terms of functionality but uglier (they should allow |
| limiting per-process network IO resources though, which is great). Needs |
| further reading. |
| |
| - Python 3.3. exposed different sched.h functions: |
| http://docs.python.org/dev/whatsnew/3.3.html#os |
| http://bugs.python.org/issue12655 |
| http://docs.python.org/dev/library/os.html#interface-to-the-scheduler |
| It might be worth to take a look and figure out whether we can include some |
| of those in psutil. |
| Also, we can probably reimplement wait_pid() on POSIX which is currently |
| implemented as a busy-loop. |
| |
| - os.times() provides 'elapsed' times (cpu_times() might). |
| |
| - ...also guest_time and cguest_time on Linux. |
| |
| - Enrich exception classes hierarchy on Python >= 3.3 / post PEP-3151 so that: |
| - NoSuchProcess inherits from ProcessLookupError |
| - AccessDenied inherits from PermissionError |
| - TimeoutExpired inherits from TimeoutError (debatable) |
| See: http://docs.python.org/3/library/exceptions.html#os-exceptions |
| |
| - Process.threads() might grow an extra "id" parameter so that it can be |
| used as such: |
| ``` |
| >>> p = psutil.Process(os.getpid()) |
| >>> p.threads(id=psutil.current_thread_id()) |
| thread(id=2539, user_time=0.03, system_time=0.02) |
| >>> |
| ``` |
| Note: this leads to questions such as "should we have a custom NoSuchThread |
| exception? Also see issue #418. |
| Note #2: this would work with os.getpid() only. |
| psutil.current_thread_id() might be desirable as per issue #418 though. |
| |
| - should psutil.TimeoutExpired exception have a 'msg' kwarg similar to |
| NoSuchProcess and AccessDenied? Not that we need it, but currently we |
| cannot raise a TimeoutExpired exception with a specific error string. |
| |
| - process_iter() might grow an "attrs" parameter similar to Process.as_dict() |
| invoke the necessary methods and include the results into a "cache" |
| attribute attached to the returned Process instances so that one can avoid |
| catching NSP and AccessDenied: |
| for p in process_iter(attrs=['cpu_percent']): |
| print(p.cache['cpu_percent']) |
| This also leads questions as whether we should introduce a sorting order. |
| |
| - round Process.memory_percent() result? |
| |
| - #550: number of threads per core. |
| |
| BUGFIXES |
| ======== |
| |
| - #600: windows / open_files(): support network file handles. |
| |
| REJECTED |
| ======== |
| |
| - #550: threads per core |
| |
| RESOURCES |
| ========= |
| |
| - sigar: https://github.com/hyperic/sigar (Java) |
| - zabbix: https://zabbix.org/wiki/Get_Zabbix |
| - libstatgrab: http://www.i-scream.org/libstatgrab/ |
| - top: http://www.unixtop.org/ |