diff options
Diffstat (limited to 'glances/processes.py')
-rw-r--r-- | glances/processes.py | 53 |
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.""" |