summaryrefslogtreecommitdiffstats
path: root/glances/amps/systemv/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'glances/amps/systemv/__init__.py')
-rw-r--r--glances/amps/systemv/__init__.py85
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()