summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolargo <nicolas@nicolargo.com>2014-08-06 19:30:26 +0200
committerNicolargo <nicolas@nicolargo.com>2014-08-06 19:30:26 +0200
commitecdafad8f03e73b0937438b1989f380c569bf43b (patch)
tree553823e8fccb71298ef82d676a90f7e962517a31
parenta9f4fa95e6d071f7de002033efa68ed7f152b1c6 (diff)
Add extended stats in the update finuntion of the glances_processes module
-rw-r--r--glances/core/glances_processes.py48
1 files changed, 36 insertions, 12 deletions
diff --git a/glances/core/glances_processes.py b/glances/core/glances_processes.py
index 48f214dc..af9027c2 100644
--- a/glances/core/glances_processes.py
+++ b/glances/core/glances_processes.py
@@ -84,8 +84,8 @@ class GlancesProcesses(object):
=> cpu_percent, memory_percent, io_counters, name
standard_stats: for all the displayed processes
=> username, cmdline, status, memory_info, cpu_times
- extended_stats: only for top processes (!!! to be implemented)
- => connections (UDP/TCP), memory_swap
+ extended_stats: only for top processes (see issue #403)
+ => connections (UDP/TCP), memory_swap...
"""
# Process ID (always)
@@ -155,20 +155,39 @@ class GlancesProcesses(object):
procstat['status'] = str(procstat['status'])[:1].upper()
if extended_stats:
- # Process network connections (TCP and UDP) (Experimental)
+ # CPU affinity
+ # Memory extended
+ # Number of context switch
+ # Number of file descriptors (Unix only)
+ # Threads number
+ procstat.update(proc.as_dict(attrs=['cpu_affinity',
+ 'memory_info_ex',
+ 'num_ctx_switches',
+ 'num_fds',
+ 'num_threads']))
+
+ # Number of handles (Windows only)
+ if is_windows:
+ procstat.update(proc.as_dict(attrs=['num_handles']))
+
+ # SWAP memory (Only on Linux based OS)
+ # http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/
+ if is_linux:
+ try:
+ procstat['memory_swap'] = sum([v.swap for v in proc.memory_maps()])
+ except psutil.AccessDenied:
+ procstat['memory_swap'] = None
+
+ # Process network connections (TCP and UDP)
try:
procstat['tcp'] = len(proc.connections(kind="tcp"))
procstat['udp'] = len(proc.connections(kind="udp"))
except:
- procstat['tcp'] = 0
- procstat['udp'] = 0
+ procstat['tcp'] = None
+ procstat['udp'] = None
- # SWAP memory
- # Only on Linux based OS
- # http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/
- if is_linux:
- logger.debug(proc.memory_maps())
- procstat['memory_swap'] = sum([ v.swap for v in proc.memory_maps() ])
+ # !!! Only for dev
+ logger.debug("EXTENDED STATS: %s" % procstat)
return procstat
@@ -220,17 +239,22 @@ class GlancesProcesses(object):
# Sort the internal dict and cut the top N (Return a list of tuple)
# tuple=key (proc), dict (returned by __get_process_stats)
processiter = sorted(processdict.items(), key=lambda x: x[1][self.getsortkey()], reverse=True)
+ first = True
for i in processiter[0:self.get_max_processes()]:
# Already existing mandatory stats
procstat = i[1]
# Update with standard stats
+ # and extended stats but only for TOP (first) process
procstat.update(self.__get_process_stats(i[0],
mandatory_stats=False,
- standard_stats=True))
+ standard_stats=True,
+ extended_stats=first))
# Add a specific time_since_update stats for bitrate
procstat['time_since_update'] = time_since_update
# Update process list
self.processlist.append(procstat)
+ # Next...
+ first = False
else:
# Get all the processes
for i in processdict.items():