提交 eb5ea5d3 编写于 作者: N nicolargo

Create a default AMP to replace the Monitoring process list

上级 b347cb9c
......@@ -255,6 +255,14 @@ queue=glances_queue
# AMPS
######
[amp_dropbox]
enable=true
regex=.*dropbox.*
refresh=3
one_line=false
command=dropbox status
countmin=1
[amp_nginx]
# Nginx status page should be enable (https://easyengine.io/tutorials/nginx/status-page/)
enable=true
......@@ -267,7 +275,7 @@ status_url=http://localhost/nginx_status
# Systemd
enable=true
regex=\/usr\/lib\/systemd\/systemd
refresh=60
refresh=30
one_line=true
systemctl_cmd=/usr/bin/systemctl --plain
......@@ -275,6 +283,6 @@ systemctl_cmd=/usr/bin/systemctl --plain
# Systemv
enable=true
regex=\/sbin\/init
refresh=10
refresh=30
one_line=true
service_cmd=/usr/bin/service --status-all
......@@ -46,12 +46,15 @@ class GlancesAmp(object):
AUTHOR = '?'
EMAIL = '?'
def __init__(self, args=None):
def __init__(self, name=None, args=None):
"""Init AMP classe."""
logger.debug("Init {0} version {1}".format(self.NAME, self.VERSION))
# AMP name (= module name without glances_)
self.amp_name = self.__class__.__module__[len('glances_'):]
if name is None:
self.amp_name = self.__class__.__module__[len('glances_'):]
else:
self.amp_name = name
# Init the args
self.args = args
......
......@@ -82,7 +82,7 @@ class Amp(GlancesAmp):
res = requests.get(self.get('status_url'))
if res.ok:
# u'Active connections: 1 \nserver accepts handled requests\n 1 1 1 \nReading: 0 Writing: 1 Waiting: 0 \n'
self.set_result(res.text)
self.set_result(res.text.rstrip())
else:
logger.debug('{0}: Can not grab status URL {1} ({2})'.format(self.NAME, self.get('status_url'), res.reason))
......
......@@ -48,39 +48,38 @@ class AmpsList(object):
self.args = args
self.config = config
# Create the AMPS list
self.load_amps()
# Load the AMP configurations / scripts
self.load_configs()
def load_amps(self):
"""Load all amps in the 'amps' folder."""
def load_configs(self):
"""Load the AMP configuration files."""
header = "glances_"
for item in os.listdir(amps_path):
if (item.startswith(header) and
item.endswith(".py") and
item != (header + "amp.py")):
# Import the amp
# For each AMP scrip, call the load_config method
for s in self.config.sections():
if s.startswith("amp_"):
# An AMP section exists in the configuration file
# If an AMP script exist in the glances/amps folder, use it
amp_conf_name = s[4:]
amp_script = os.path.join(amps_path, header + s[4:] + ".py")
if not os.path.exists(amp_script):
# If not, use the default script
amp_script = os.path.join(amps_path, "glances_default.py")
try:
amp = __import__(os.path.basename(item)[:-3])
amp = __import__(os.path.basename(amp_script)[:-3])
except ImportError as e:
logger.warning("Can not load {0}, you need to install an external Python package ({1})".format(os.path.basename(item), e))
logger.warning("Can not load {0}, you need to install an external Python package ({1})".format(os.path.basename(amp_script), e))
except Exception as e:
logger.warning("Can not load {0} ({1})".format(os.path.basename(item), e))
logger.warning("Can not load {0} ({1})".format(os.path.basename(amp_script), e))
else:
# Add the AMP to the dictionary
# The key is the AMP name
# for example, the file glances_xxx.py
# generate self._amps_list["xxx"] = ...
amp_name = os.path.basename(item)[len(header):-3].lower()
self.__amps_dict[amp_name] = amp.Amp(self.args)
self.__amps_dict[amp_conf_name] = amp.Amp(name=amp_conf_name, args=self.args)
# Load the AMP configuration
self.__amps_dict[amp_conf_name].load_config(self.config)
# Log AMPs list
logger.debug("Available AMPs list: {0}".format(self.getList()))
def load_configs(self):
"""Load the AMP configuration files."""
# For each AMPs, call the load_config method
for a in self.get():
self.get()[a].load_config(self.config)
logger.debug("AMPs' list: {0}".format(self.getList()))
def __str__(self):
return str(self.__amps_dict)
......
......@@ -23,9 +23,15 @@
import operator
import sys
import unicodedata
PY3 = sys.version_info[0] == 3
def to_ascii(s):
"""Convert the unicode 's' to a ASCII string
Usefull to remove accent (diacritics)"""
return unicodedata.normalize('NFKD', s).encode('ASCII', 'ignore')
if PY3:
import queue
from configparser import ConfigParser, NoOptionError, NoSectionError
......
......@@ -207,6 +207,10 @@ class Config(object):
"""Return the loaded configuration file."""
return self._loaded_config_file
def sections(self):
"""Return a list of all sections."""
return self.parser.sections()
def items(self, section):
"""Return the items list of a section."""
return self.parser.items(section)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册