diff options
Diffstat (limited to 'glances/amps/systemv/__init__.py')
-rw-r--r-- | glances/amps/systemv/__init__.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/glances/amps/systemv/__init__.py b/glances/amps/systemv/__init__.py new file mode 100644 index 00000000..78df6795 --- /dev/null +++ b/glances/amps/systemv/__init__.py @@ -0,0 +1,85 @@ +# -*- 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""" +SystemV AMP +=========== + +Monitor the state of the System V init system and service. + +How to read the stats +--------------------- + +Running: Number of running services. +Stopped: Number of stopped services. +Upstart: Number of service managed by Upstart. + +Source reference: http://askubuntu.com/questions/407075/how-to-read-service-status-all-results + +Configuration file example +-------------------------- + +[amp_systemv] +# Systemv +enable=true +regex=\/sbin\/init +refresh=60 +one_line=true +service_cmd=/usr/bin/service --status-all +""" + +from subprocess import check_output, STDOUT + +from glances.logger import logger +from glances.globals import iteritems +from glances.amps.amp import GlancesAmp + + +class Amp(GlancesAmp): + """Glances' Systemd AMP.""" + + NAME = 'SystemV' + VERSION = '1.0' + DESCRIPTION = 'Get services list from service (initd)' + AUTHOR = 'Nicolargo' + EMAIL = 'contact@nicolargo.com' + + # def __init__(self, args=None): + # """Init the AMP.""" + # super(Amp, self).__init__(args=args) + + def update(self, process_list): + """Update the AMP""" + # Get the systemctl status + logger.debug('{}: Update stats using service {}'.format(self.NAME, self.get('service_cmd'))) + try: + res = check_output(self.get('service_cmd').split(), stderr=STDOUT).decode('utf-8') + except OSError as e: + logger.debug('{}: Error while executing service ({})'.format(self.NAME, e)) + else: + status = {'running': 0, 'stopped': 0, 'upstart': 0} + # For each line + for r in res.split('\n'): + # Split per space .* + line = r.split() + if len(line) < 4: + continue + if line[1] == '+': + status['running'] += 1 + elif line[1] == '-': + status['stopped'] += 1 + elif line[1] == '?': + status['upstart'] += 1 + # Build the output (string) message + output = 'Services\n' + for k, v in iteritems(status): + output += '{}: {}\n'.format(k, v) + self.set_result(output, separator=' ') + + return self.result() |