From 2a09d3cdf05b189c08b7de3607f1be1f5d97f96a Mon Sep 17 00:00:00 2001 From: nicolargo Date: Wed, 27 Apr 2016 21:37:15 +0200 Subject: [PATCH] Add SystemV AMP, no more log message --- glances/amps/glances_systemv.py | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 glances/amps/glances_systemv.py diff --git a/glances/amps/glances_systemv.py b/glances/amps/glances_systemv.py new file mode 100644 index 00000000..7ef2256f --- /dev/null +++ b/glances/amps/glances_systemv.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2016 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +""" +SystemV AMP +=========== + +Monitor the state of the Syste 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.compat import iteritems +from glances.amps.glances_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): + """Update the AMP""" + + if self.should_update(): + # Get the systemctl status + logger.debug('{0}: Update stats using service {1}'.format(self.NAME, self.get('service_cmd'))) + try: + res = check_output(self.get('service_cmd').split(), stderr=STDOUT) + except OSError as e: + logger.debug('{0}: Error while executing service ({1})'.format(self.NAME, e)) + else: + status = {'running': 0, 'stopped': 0, 'upstart': 0} + # For each line + for r in res.split('\n'): + # Split per space .* + l = r.split() + if len(l) < 4: + continue + if l[1] == '+': + status['running'] += 1 + elif l[1] == '-': + status['stopped'] += 1 + elif l[1] == '?': + status['upstart'] += 1 + # Build the output (string) message + output = 'Services\n' + for k, v in iteritems(status): + output += '{0}: {1}\n'.format(k, v) + self.set_result(output, separator=' ') + + return self.result()