Files
monasca-agent/monasca_setup/detection/plugin.py
Tim Kuhlman afb1d280e5 Added the ability to remove configuration and did various cleanup.
The ability to remove config is useful when calling monasca-setup via
Ansible.

Various refactoring for the main method to make things cleaner.

Fixed overwrite.

Change-Id: I37805e3ef68d794f7cba8fc40e7156e67118b556
2015-07-17 15:00:12 -06:00

67 lines
1.9 KiB
Python

"""Classes for detection of running resources to be monitored.
Detection classes should be platform independent
"""
import sys
import logging
log = logging.getLogger(__name__)
class Plugin(object):
"""Abstract class implemented by the monasca-agent plugin detection classes. """
def __init__(self, template_dir, overwrite=True, args=None):
self.available = False
self.template_dir = template_dir
self.dependencies = ()
self.overwrite = overwrite
self.args = None
if args is not None:
try:
# Turn 'hostname=host type=ping' to dictionary {'hostname': 'host', 'type': 'ping'}
self.args = dict([a.split('=') for a in args.split()])
except Exception:
log.exception('Error parsing detection arguments')
sys.exit(1)
self._detect()
def _detect(self):
"""Run detection, set self.available True if the service is detected.
"""
raise NotImplementedError
def build_config(self):
"""Build the config as a Plugins object and return.
"""
raise NotImplementedError
def build_config_with_name(self):
""" Builds the config and then adds a field 'built_by' to each instance in the config.
built_by is set to the plugin name
:return: An agent_config.Plugins object
"""
conf = self.build_config()
for plugin_type in conf.itervalues():
for inst in plugin_type['instances']:
inst['built_by'] = self.__class__.__name__
return conf
def dependencies_installed(self):
"""Return True if dependencies are installed.
"""
raise NotImplementedError
@property
def name(self):
"""Return _name if set otherwise the class name.
"""
if '_name' in self.__dict__:
return self._name
else:
return self.__class__.__name__