summaryrefslogtreecommitdiffstats
path: root/glances/processes.py
diff options
context:
space:
mode:
Diffstat (limited to 'glances/processes.py')
-rw-r--r--glances/processes.py53
1 files changed, 47 insertions, 6 deletions
diff --git a/glances/processes.py b/glances/processes.py
index ec8962af..7ba12eb7 100644
--- a/glances/processes.py
+++ b/glances/processes.py
@@ -12,7 +12,7 @@ import os
from glances.globals import BSD, LINUX, MACOS, WINDOWS, iterkeys
from glances.globals import namedtuple_to_dict, list_of_namedtuple_to_list_of_dict
from glances.timer import Timer, getTimeSinceLastUpdate
-from glances.filter import GlancesFilter
+from glances.filter import GlancesFilterList, GlancesFilter
from glances.programs import processes_to_programs
from glances.logger import logger
@@ -69,6 +69,11 @@ class GlancesProcesses(object):
# Cache is a dict with key=pid and value = dict of cached value
self.processlist_cache = {}
+ # List of processes stats to export
+ # Only process matching one of the filter will be exported
+ self._filter_export = GlancesFilterList()
+ self.processlist_export = []
+
# Tag to enable/disable the processes stats (to reduce the Glances CPU consumption)
# Default is to enable the processes stats
self.disable_tag = False
@@ -102,7 +107,7 @@ class GlancesProcesses(object):
# Maximum number of processes showed in the UI (None if no limit)
self._max_processes = None
- # Process filter is a regular expression
+ # Process filter
self._filter = GlancesFilter()
# Whether or not to hide kernel threads
@@ -202,6 +207,8 @@ class GlancesProcesses(object):
"""Set the maximum number of processes showed in the UI."""
self._max_processes = value
+ # Process filter
+
@property
def process_filter_input(self):
"""Get the process filter (given by the user)."""
@@ -227,6 +234,20 @@ class GlancesProcesses(object):
"""Get the process regular expression compiled."""
return self._filter.filter_re
+ # Export filter
+
+ @property
+ def export_process_filter(self):
+ """Get the export process filter (current export process filter list)."""
+ return self._filter_export.filter
+
+ @export_process_filter.setter
+ def export_process_filter(self, value):
+ """Set the export process filter list."""
+ self._filter_export.filter = value
+
+ # Kernel threads
+
def disable_kernel_threads(self):
"""Ignore kernel threads in process list."""
self.no_kernel_threads = True
@@ -482,11 +503,11 @@ class GlancesProcesses(object):
except KeyError:
pass
- # Apply user filter
- processlist = list(filter(lambda p: not self._filter.is_filtered(p), processlist))
+ # Filter and transform process export list
+ self.processlist_export = self.update_export_list(processlist)
- # Save the new processlist and transform all namedtuples to dict
- processlist = list_of_namedtuple_to_list_of_dict(processlist)
+ # Filter and transform process list
+ processlist = self.update_list(processlist)
# Compute the maximum value for keys in self._max_values_list: CPU, MEM
# Useful to highlight the processes with maximum values
@@ -500,6 +521,22 @@ class GlancesProcesses(object):
return self.processlist
+ def update_list(self, processlist):
+ """Return the process list after filtering and transformation (namedtuple to dict)."""
+ if self._filter.filter is None:
+ return list_of_namedtuple_to_list_of_dict(processlist)
+ ret = list(filter(lambda p: self._filter.is_filtered(p),
+ processlist))
+ return list_of_namedtuple_to_list_of_dict(ret)
+
+ def update_export_list(self, processlist):
+ """Return the process export list after filtering and transformation (namedtuple to dict)."""
+ if self._filter_export.filter == []:
+ return []
+ ret = list(filter(lambda p: self._filter_export.is_filtered(p),
+ processlist))
+ return list_of_namedtuple_to_list_of_dict(ret)
+
def get_count(self):
"""Get the number of processes."""
return self.processcount
@@ -513,6 +550,10 @@ class GlancesProcesses(object):
else:
return self.processlist
+ def get_export(self):
+ """Return the processlist for export."""
+ return self.processlist_export
+
@property
def sort_key(self):
"""Get the current sort key."""