From 934f605c79d4eb0331f75a59d79889d92d634393 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 5 May 2024 18:45:56 +0200 Subject: Refactor MMM function in Processlist and change Python Header to go in 2024 --- glances/amps/amp.py | 2 +- glances/exports/glances_mongodb/__init__.py | 2 +- glances/folder_list.py | 2 +- glances/globals.py | 2 +- glances/main.py | 2 +- glances/outputs/glances_curses.py | 2 +- glances/outputs/glances_stdout_apidoc.py | 2 +- glances/outputs/glances_stdout_issue.py | 2 +- glances/password.py | 2 +- glances/plugins/alert/__init__.py | 2 +- glances/plugins/amps/__init__.py | 2 +- glances/plugins/connections/__init__.py | 2 +- glances/plugins/containers/engines/docker.py | 2 +- glances/plugins/diskio/__init__.py | 2 +- glances/plugins/fs/__init__.py | 2 +- glances/plugins/processlist/__init__.py | 2 +- glances/plugins/version/__init__.py | 2 +- glances/plugins/wifi/__init__.py | 2 +- glances/processes.py | 64 +++++++++++++++------------- glances/programs.py | 2 +- glances/webserver.py | 2 +- 21 files changed, 54 insertions(+), 50 deletions(-) diff --git a/glances/amps/amp.py b/glances/amps/amp.py index 41881ea8..373d75a4 100644 --- a/glances/amps/amp.py +++ b/glances/amps/amp.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/exports/glances_mongodb/__init__.py b/glances/exports/glances_mongodb/__init__.py index 427a4c97..85a486ea 100644 --- a/glances/exports/glances_mongodb/__init__.py +++ b/glances/exports/glances_mongodb/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/folder_list.py b/glances/folder_list.py index 595c536f..4f98d547 100644 --- a/glances/folder_list.py +++ b/glances/folder_list.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/globals.py b/glances/globals.py index f2ea518e..6039f868 100644 --- a/glances/globals.py +++ b/glances/globals.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/main.py b/glances/main.py index 767a3b79..470f2f6a 100644 --- a/glances/main.py +++ b/glances/main.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index c9ff56d8..330f85d6 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/outputs/glances_stdout_apidoc.py b/glances/outputs/glances_stdout_apidoc.py index e26d79e1..e50a8d18 100644 --- a/glances/outputs/glances_stdout_apidoc.py +++ b/glances/outputs/glances_stdout_apidoc.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/outputs/glances_stdout_issue.py b/glances/outputs/glances_stdout_issue.py index 9baa5dd3..3c3a3233 100644 --- a/glances/outputs/glances_stdout_issue.py +++ b/glances/outputs/glances_stdout_issue.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/password.py b/glances/password.py index 6e1d6ad8..7d5c15c7 100644 --- a/glances/password.py +++ b/glances/password.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/alert/__init__.py b/glances/plugins/alert/__init__.py index 5f8f626b..67088a4a 100644 --- a/glances/plugins/alert/__init__.py +++ b/glances/plugins/alert/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/amps/__init__.py b/glances/plugins/amps/__init__.py index 6b5bab67..4f5756da 100644 --- a/glances/plugins/amps/__init__.py +++ b/glances/plugins/amps/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/connections/__init__.py b/glances/plugins/connections/__init__.py index f87abd37..05eae9f4 100644 --- a/glances/plugins/connections/__init__.py +++ b/glances/plugins/connections/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/containers/engines/docker.py b/glances/plugins/containers/engines/docker.py index 37267830..1656f994 100644 --- a/glances/plugins/containers/engines/docker.py +++ b/glances/plugins/containers/engines/docker.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/diskio/__init__.py b/glances/plugins/diskio/__init__.py index 9e9bcc7c..d500bf17 100644 --- a/glances/plugins/diskio/__init__.py +++ b/glances/plugins/diskio/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/fs/__init__.py b/glances/plugins/fs/__init__.py index df494c88..c34a4cfb 100644 --- a/glances/plugins/fs/__init__.py +++ b/glances/plugins/fs/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/processlist/__init__.py b/glances/plugins/processlist/__init__.py index e29d2225..14b94206 100644 --- a/glances/plugins/processlist/__init__.py +++ b/glances/plugins/processlist/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/version/__init__.py b/glances/plugins/version/__init__.py index 7e7fe717..2ed77383 100644 --- a/glances/plugins/version/__init__.py +++ b/glances/plugins/version/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/plugins/wifi/__init__.py b/glances/plugins/wifi/__init__.py index 9db552e6..f642ccf3 100644 --- a/glances/plugins/wifi/__init__.py +++ b/glances/plugins/wifi/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/processes.py b/glances/processes.py index 16e21547..4d446743 100644 --- a/glances/processes.py +++ b/glances/processes.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # @@ -296,6 +296,8 @@ class GlancesProcesses(object): ret = {} try: + logger.debug('Grab extended stats for process {}'.format(proc['pid'])) + # Get PID of the selected process selected_process = psutil.Process(proc['pid']) @@ -312,39 +314,40 @@ class GlancesProcesses(object): self.extended_process = None ret['extended_stats'] = False else: - logger.debug('Grab extended stats for process {}'.format(proc['pid'])) - # Compute CPU and MEM min/max/mean - for stat_prefix in ['cpu', 'memory']: - if stat_prefix + '_min' not in self.extended_process: - ret[stat_prefix + '_min'] = proc[stat_prefix + '_percent'] - else: - ret[stat_prefix + '_min'] = ( - proc[stat_prefix + '_percent'] - if proc[stat_prefix + '_min'] > proc[stat_prefix + '_percent'] - else proc[stat_prefix + '_min'] - ) - if stat_prefix + '_max' not in self.extended_process: - ret[stat_prefix + '_max'] = proc[stat_prefix + '_percent'] - else: - ret[stat_prefix + '_max'] = ( - proc[stat_prefix + '_percent'] - if proc[stat_prefix + '_max'] < proc[stat_prefix + '_percent'] - else proc[stat_prefix + '_max'] - ) - if stat_prefix + '_mean_sum' not in self.extended_process: - ret[stat_prefix + '_mean_sum'] = proc[stat_prefix + '_percent'] - else: - ret[stat_prefix + '_mean_sum'] = proc[stat_prefix + '_mean_sum'] + proc[stat_prefix + '_percent'] - if stat_prefix + '_mean_counter' not in self.extended_process: - ret[stat_prefix + '_mean_counter'] = 1 - else: - ret[stat_prefix + '_mean_counter'] = proc[stat_prefix + '_mean_counter'] + 1 - ret[stat_prefix + '_mean'] = ret[stat_prefix + '_mean_sum'] / ret[stat_prefix + '_mean_counter'] - + # Merge the returned dict with the current on + ret.update(self.__get_min_max_mean(proc)) + self.extended_process = ret ret['extended_stats'] = True return namedtuple_to_dict(ret) + def __get_min_max_mean(self, proc, prefix=['cpu', 'memory']): + """Return the min/max/mean for the given process""" + ret = {} + for stat_prefix in prefix: + min_key = stat_prefix + '_min' + max_key = stat_prefix + '_max' + mean_sum_key = stat_prefix + '_mean_sum' + mean_counter_key = stat_prefix + '_mean_counter' + if min_key not in self.extended_process: + ret[min_key] = proc[stat_prefix + '_percent'] + else: + ret[min_key] = min(proc[stat_prefix + '_percent'], self.extended_process[min_key]) + if max_key not in self.extended_process: + ret[max_key] = proc[stat_prefix + '_percent'] + else: + ret[max_key] = max(proc[stat_prefix + '_percent'], self.extended_process[max_key]) + if mean_sum_key not in self.extended_process: + ret[mean_sum_key] = proc[stat_prefix + '_percent'] + else: + ret[mean_sum_key] = self.extended_process[mean_sum_key] + proc[stat_prefix + '_percent'] + if mean_counter_key not in self.extended_process: + ret[mean_counter_key] = 1 + else: + ret[mean_counter_key] = self.extended_process[mean_counter_key] + 1 + ret[stat_prefix + '_mean'] = ret[mean_sum_key] / ret[mean_counter_key] + return ret + def __get_extended_memory_swap(self, process): """Return the memory swap for the given process""" if not LINUX: @@ -659,6 +662,7 @@ def _sort_lambda(sorted_by='cpu_percent', sorted_by_secondary='memory_percent'): def sort_stats(stats, sorted_by='cpu_percent', sorted_by_secondary='memory_percent', reverse=True): """Return the stats (dict) sorted by (sorted_by). + A secondary sort key should be specified. Reverse the sort if reverse is True. """ diff --git a/glances/programs.py b/glances/programs.py index d504f386..f3fcefcc 100644 --- a/glances/programs.py +++ b/glances/programs.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # diff --git a/glances/webserver.py b/glances/webserver.py index e61ca32b..c9ab6862 100644 --- a/glances/webserver.py +++ b/glances/webserver.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# SPDX-FileCopyrightText: 2023 Nicolas Hennion +# SPDX-FileCopyrightText: 2024 Nicolas Hennion # # SPDX-License-Identifier: LGPL-3.0-only # -- cgit v1.2.3