class MonitorMgrTestCase(unittest.TestCase):
def setUp(self):
- config = {
- 'monitor_type': 'openstack-api',
- 'key': 'service-status'
- }
-
- self.monitor_configs = []
- self.monitor_configs.append(config)
+ self.monitor_configs = [
+ {
+ "monitor_type": "openstack-cmd",
+ "command_name": "openstack router list",
+ "monitor_time": 10,
+ "monitor_number": 3,
+ "sla": {
+ "max_outage_time": 5
+ }
+ },
+ {
+ "monitor_type": "process",
+ "process_name": "neutron-server",
+ "host": "node1",
+ "monitor_time": 20,
+ "monitor_number": 3,
+ "sla": {
+ "max_recover_time": 20
+ }
+ }
+ ]
+ self.MonitorMgr = basemonitor.MonitorMgr([])
+ self.MonitorMgr.init_monitors(self.monitor_configs, None)
+ self.monitor_list = self.MonitorMgr._monitor_list
+ for mo in self.monitor_list:
+ mo._result = {"outage_time": 10}
def test__MonitorMgr_setup_successful(self, mock_monitor):
instance = basemonitor.MonitorMgr({"nova-api": 10})
def test_MonitorMgr_getitem(self, mock_monitor):
monitorMgr = basemonitor.MonitorMgr({"nova-api": 10})
monitorMgr.init_monitors(self.monitor_configs, None)
- monitorIns = monitorMgr['service-status']
+
+ def test_store_result(self, mock_monitor):
+ expect = {'process_neutron-server_outage_time': 10,
+ 'openstack-router-list_outage_time': 10}
+ result = {}
+ self.MonitorMgr.store_result(result)
+ self.assertDictEqual(result, expect)
class BaseMonitorTestCase(unittest.TestCase):
except Exception:
pass
self.assertIsNone(cls)
+
+
+if __name__ == "__main__":
+ unittest.main()
while self.executionSteps:
singleStep = self.executionSteps.pop()
singleStep.rollback()
+
+ def store_result(self, result):
+ LOG.debug("store result ....")
+ if hasattr(self, 'monitorMgr'):
+ self.monitorMgr.store_result(result)
monitor_ins = monitor_cls(monitor_cfg, context,
self.monitor_mgr_data)
if "key" in monitor_cfg:
- monitor_ins.key = monitor_cfg["key"]
+ monitor_ins.tag = monitor_ins.key = monitor_cfg["key"]
+ elif monitor_type == "openstack-cmd":
+ monitor_ins.tag = monitor_cfg["command_name"].replace(" ", "-")
+ elif monitor_type == "process":
+ monitor_ins.tag = monitor_type + "_" + monitor_cfg["process_name"]
self._monitor_list.append(monitor_ins)
def __getitem__(self, item):
sla_pass = sla_pass & monitor.verify_SLA()
return sla_pass
+ def store_result(self, result):
+ for monitor in self._monitor_list:
+ monitor_result = monitor.get_result()
+ for k, v in monitor_result.items():
+ result[monitor.tag + "_" + k] = v
+
class BaseMonitor(multiprocessing.Process):
"""docstring for BaseMonitor"""
self._event = multiprocessing.Event()
self.monitor_data = data
self.setup_done = False
+ self.tag = ""
@staticmethod
def get_monitor_cls(monitor_type):
def verify_SLA(self):
pass
- def result(self):
+ def get_result(self):
return self._result
last_outage = 0
for monitor in self.monitors:
- monitor_result = monitor.result()
+ monitor_result = monitor.get_result()
monitor_first_outage = monitor_result.get('first_outage', 0)
monitor_last_outage = monitor_result.get('last_outage', 0)
max_outage_time = self._config["sla"]["max_recover_time"]
else:
raise RuntimeError("monitor max_outage_time config is not found")
+ self._result = {"outage_time": outage_time}
if outage_time > max_outage_time:
LOG.error("SLA failure: %f > %f", outage_time, max_outage_time)
verify_result = self.director.verify()
+ self.director.store_result(result)
+
for k, v in self.director.data.items():
if v == 0:
result['sla_pass'] = 0
LOG.info("The service process not found in the host envrioment, \
the HA test case NOT pass")
return
+ self.monitorMgr.store_result(result)
if sla_pass:
result['sla_pass'] = 1
LOG.info("The HA test case PASS the SLA")