Allow overriding values using args in ServicePlugin
Some of the subclasses of ServicePlugin allow overriding the service_api_url using args. This could be useful for all plugins so move that code into ServicePlugin. Also allow overriding of process_names, search_pattern, overwrite and template_dir. Remove the code in the ironic and trove plugins that duplicated this code. Added a unit test for this code. Change-Id: Ibd97effa6d5bff0cf621e4bdcbe6f5b781d195f4
This commit is contained in:
@@ -9,18 +9,6 @@ class Ironic(monasca_setup.detection.ServicePlugin):
|
|||||||
"""Detect Ironic daemons and setup configuration to monitor them."""
|
"""Detect Ironic daemons and setup configuration to monitor them."""
|
||||||
|
|
||||||
def __init__(self, template_dir, overwrite=True, args=None):
|
def __init__(self, template_dir, overwrite=True, args=None):
|
||||||
service_api_url = "http://localhost:6385"
|
|
||||||
if isinstance(args, str):
|
|
||||||
try:
|
|
||||||
# Turn 'service_api_url=url' into
|
|
||||||
# dict {'service_api_url':'url'}
|
|
||||||
args_dict = dict([item.split('=') for item
|
|
||||||
in args.split()])
|
|
||||||
|
|
||||||
if "service_api_url" in args_dict:
|
|
||||||
service_api_url = args_dict['service_api_url']
|
|
||||||
except Exception:
|
|
||||||
log.exception('Error parsing detection arguments')
|
|
||||||
|
|
||||||
service_params = {
|
service_params = {
|
||||||
'args': args,
|
'args': args,
|
||||||
@@ -28,7 +16,7 @@ class Ironic(monasca_setup.detection.ServicePlugin):
|
|||||||
'overwrite': overwrite,
|
'overwrite': overwrite,
|
||||||
'service_name': 'Baremetal',
|
'service_name': 'Baremetal',
|
||||||
'process_names': ['ironic-api', 'ironic-conductor'],
|
'process_names': ['ironic-api', 'ironic-conductor'],
|
||||||
'service_api_url': service_api_url,
|
'service_api_url': "http://localhost:6385",
|
||||||
'search_pattern': '.*200 OK.*',
|
'search_pattern': '.*200 OK.*',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,26 +10,13 @@ class Trove(monasca_setup.detection.ServicePlugin):
|
|||||||
|
|
||||||
def __init__(self, template_dir, overwrite=True, args=None):
|
def __init__(self, template_dir, overwrite=True, args=None):
|
||||||
|
|
||||||
service_api_url = "http://localhost:8779"
|
|
||||||
if isinstance(args, str):
|
|
||||||
try:
|
|
||||||
# Turn 'service_api_url=url' into
|
|
||||||
# dict {'service_api_url':'url'}
|
|
||||||
args_dict = dict([item.split('=') for item
|
|
||||||
in args.split()])
|
|
||||||
|
|
||||||
if "service_api_url" in args_dict:
|
|
||||||
service_api_url = args_dict['service_api_url']
|
|
||||||
except Exception:
|
|
||||||
log.exception('Error parsing detection arguments')
|
|
||||||
|
|
||||||
service_params = {
|
service_params = {
|
||||||
'args': args,
|
'args': args,
|
||||||
'template_dir': template_dir,
|
'template_dir': template_dir,
|
||||||
'overwrite': overwrite,
|
'overwrite': overwrite,
|
||||||
'service_name': 'database',
|
'service_name': 'database',
|
||||||
'process_names': ['trove-api', 'trove-taskmanager', 'trove-conductor'],
|
'process_names': ['trove-api', 'trove-taskmanager', 'trove-conductor'],
|
||||||
'service_api_url': service_api_url,
|
'service_api_url': "http://localhost:8779",
|
||||||
'search_pattern': '.*v1.*'
|
'search_pattern': '.*v1.*'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,32 @@ class ServicePlugin(Plugin):
|
|||||||
self.process_names = kwargs['process_names']
|
self.process_names = kwargs['process_names']
|
||||||
self.service_api_url = kwargs.get('service_api_url')
|
self.service_api_url = kwargs.get('service_api_url')
|
||||||
self.search_pattern = kwargs['search_pattern']
|
self.search_pattern = kwargs['search_pattern']
|
||||||
|
overwrite = kwargs['overwrite']
|
||||||
|
template_dir = kwargs['template_dir'],
|
||||||
|
if 'args' in kwargs:
|
||||||
|
args = kwargs['args']
|
||||||
|
if isinstance(args, str):
|
||||||
|
try:
|
||||||
|
# Turn 'service_api_url=url' into
|
||||||
|
# dict {'service_api_url':'url'}
|
||||||
|
args_dict = dict([item.split('=') for item
|
||||||
|
in args.split()])
|
||||||
|
|
||||||
super(ServicePlugin, self).__init__(kwargs['template_dir'], kwargs['overwrite'], kwargs.get('args'))
|
# Allow args to override all of these parameters
|
||||||
|
if 'process_names' in args_dict:
|
||||||
|
self.process_names = args_dict['process_names'].split(',')
|
||||||
|
if 'service_api_url' in args_dict:
|
||||||
|
self.service_api_url = args_dict['service_api_url']
|
||||||
|
if 'search_pattern' in args_dict:
|
||||||
|
self.search_pattern = args_dict['search_pattern']
|
||||||
|
if 'overwrite' in args_dict:
|
||||||
|
overwrite = args_dict['overwrite']
|
||||||
|
if 'template_dir' in args_dict:
|
||||||
|
template_dir = args_dict['template_dir']
|
||||||
|
except Exception:
|
||||||
|
log.exception('Error parsing detection arguments')
|
||||||
|
|
||||||
|
super(ServicePlugin, self).__init__(template_dir, overwrite, kwargs.get('args'))
|
||||||
|
|
||||||
def _detect(self):
|
def _detect(self):
|
||||||
"""Run detection.
|
"""Run detection.
|
||||||
|
|||||||
77
tests/test_service_plugin.py
Normal file
77
tests/test_service_plugin.py
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
import monasca_setup.detection
|
||||||
|
import socket
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
|
||||||
|
from monasca_agent.common.keystone import Keystone
|
||||||
|
|
||||||
|
port_used = 0
|
||||||
|
class TestKeystone(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
global port_used
|
||||||
|
# Create a server socket so the htto check config gets created
|
||||||
|
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
try:
|
||||||
|
self.s.bind(('', 0))
|
||||||
|
self.s.listen(1)
|
||||||
|
except socket.error as msg:
|
||||||
|
raise Exception('Bind failed. Message ' + msg[1])
|
||||||
|
(host, port_used) = self.s.getsockname()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.s.close()
|
||||||
|
|
||||||
|
def test_no_override_(self):
|
||||||
|
""" Test setting values with no overrides works as expected
|
||||||
|
"""
|
||||||
|
args = None
|
||||||
|
test_plugin = TestPlugin('.', args=args)
|
||||||
|
test_plugin._detect()
|
||||||
|
config = test_plugin.build_config()
|
||||||
|
http_instance = config['http_check']['instances'][0]
|
||||||
|
url = 'http://localhost:{0}/healthcheck'.format(port_used)
|
||||||
|
self.assertEquals(http_instance['url'], url)
|
||||||
|
self.assertEquals(http_instance['match_pattern'], '.*OK.*')
|
||||||
|
|
||||||
|
processes = config['process']['instances']
|
||||||
|
self.assertEquals(processes[0]['search_string'], ['nose'])
|
||||||
|
|
||||||
|
def test_override_values(self):
|
||||||
|
""" Test overriding values using args works
|
||||||
|
"""
|
||||||
|
url = 'http://localhost:{0}/othercheck'.format(port_used)
|
||||||
|
pattern = 'CHECK.*'
|
||||||
|
args = 'process_names=tox,nose service_api_url='
|
||||||
|
args += ' service_api_url=' + url
|
||||||
|
args += ' search_pattern=' + pattern
|
||||||
|
test_plugin = TestPlugin('.', args=args)
|
||||||
|
test_plugin._detect()
|
||||||
|
config = test_plugin.build_config()
|
||||||
|
|
||||||
|
http_instance = config['http_check']['instances'][0]
|
||||||
|
self.assertEquals(http_instance['url'], url)
|
||||||
|
self.assertEquals(http_instance['match_pattern'], pattern)
|
||||||
|
|
||||||
|
processes = config['process']['instances']
|
||||||
|
self.assertEquals(processes[0]['search_string'], ['tox'])
|
||||||
|
self.assertEquals(processes[1]['search_string'], ['nose'])
|
||||||
|
|
||||||
|
class TestPlugin(monasca_setup.detection.ServicePlugin):
|
||||||
|
|
||||||
|
"""Test Plugin
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, template_dir, overwrite=True, args=None):
|
||||||
|
url = 'http://localhost:{0}/healthcheck'.format(port_used)
|
||||||
|
service_params = {
|
||||||
|
'args': args,
|
||||||
|
'template_dir': template_dir,
|
||||||
|
'overwrite': overwrite,
|
||||||
|
'service_name': 'object-storage',
|
||||||
|
'process_names': ['nose'],
|
||||||
|
'service_api_url': url,
|
||||||
|
'search_pattern': '.*OK.*'
|
||||||
|
}
|
||||||
|
|
||||||
|
super(TestPlugin, self).__init__(service_params)
|
||||||
Reference in New Issue
Block a user