diff options
Diffstat (limited to 'glances/amps/default/__init__.py')
-rw-r--r-- | glances/amps/default/__init__.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/glances/amps/default/__init__.py b/glances/amps/default/__init__.py new file mode 100644 index 00000000..886f0c8a --- /dev/null +++ b/glances/amps/default/__init__.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com> +# +# SPDX-License-Identifier: LGPL-3.0-only +# + +r""" +Default AMP +========= + +Monitor a process by executing a command line. This is the default AMP's behavior +if no AMP script is found. + +Configuration file example +-------------------------- + +[amp_foo] +enable=true +regex=\/usr\/bin\/foo +refresh=10 +one_line=false +command=foo status +""" + +from subprocess import check_output, STDOUT, CalledProcessError + +from glances.globals import u, to_ascii +from glances.logger import logger +from glances.amps.amp import GlancesAmp + + +class Amp(GlancesAmp): + """Glances' Default AMP.""" + + NAME = '' + VERSION = '1.1' + DESCRIPTION = '' + AUTHOR = 'Nicolargo' + EMAIL = 'contact@nicolargo.com' + + def __init__(self, name=None, args=None): + """Init the AMP.""" + self.NAME = name.capitalize() + super(Amp, self).__init__(name=name, args=args) + + def update(self, process_list): + """Update the AMP""" + # Get the systemctl status + logger.debug('{}: Update AMP stats using command {}'.format(self.NAME, self.get('service_cmd'))) + # Get command to execute + try: + res = self.get('command') + except OSError as e: + logger.debug('{}: Error while executing command ({})'.format(self.NAME, e)) + return self.result() + # No command found, use default message + if res is None: + # Set the default message if command return None + # Default sum of CPU and MEM for the matching regex + self.set_result( + 'CPU: {:.1f}% | MEM: {:.1f}%'.format( + sum([p['cpu_percent'] for p in process_list]), sum([p['memory_percent'] for p in process_list]) + ) + ) + return self.result() + # Run command(s) + # Comma separated commands can be executed + try: + msg = '' + for cmd in res.split(';'): + msg += u(check_output(cmd.split(), stderr=STDOUT)) + self.set_result(to_ascii(msg.rstrip())) + except CalledProcessError as e: + self.set_result(e.output) + return self.result() |