Database errors could mean database node failure. In this cases, the process
should exit so it could be automatically restarted (when handled by Docker Swarm, K8s, etc)
so it can obtain a new DB connection to an alive node.
Change-Id: I2575062d4bd23b3902b7c2ed14553d5201933002
Signed-off-by: Benjamin Diaz <bdiaz@whitestack.com>
log.info("Starting MON Collector...")
log.debug("Config: %s", vars(cfg))
collector = Collector()
log.info("Starting MON Collector...")
log.debug("Config: %s", vars(cfg))
collector = Collector()
- collector.init_backends()
collector.collect_forever()
collector.collect_forever()
import multiprocessing
import time
import multiprocessing
import time
from osm_mon.collector.backends.prometheus import PrometheusBackend
from osm_mon.collector.collectors.juju import VCACollector
from osm_mon.collector.collectors.openstack import OpenstackCollector
from osm_mon.collector.backends.prometheus import PrometheusBackend
from osm_mon.collector.collectors.juju import VCACollector
from osm_mon.collector.collectors.openstack import OpenstackCollector
self.database_manager = DatabaseManager()
self.database_manager.create_tables()
self.queue = multiprocessing.Queue()
self.database_manager = DatabaseManager()
self.database_manager.create_tables()
self.queue = multiprocessing.Queue()
-
- def init_backends(self):
- for backend in METRIC_BACKENDS:
- self.plugins.append(backend())
def collect_forever(self):
log.debug('collect_forever')
def collect_forever(self):
log.debug('collect_forever')
try:
self.collect_metrics()
time.sleep(cfg.OSMMON_COLLECTOR_INTERVAL)
try:
self.collect_metrics()
time.sleep(cfg.OSMMON_COLLECTOR_INTERVAL)
+ except peewee.PeeweeException:
+ log.exception("Database error consuming message: ")
+ raise
except Exception:
log.exception("Error collecting metrics")
except Exception:
log.exception("Error collecting metrics")
metrics.append(self.queue.get())
for plugin in self.plugins:
plugin.handle(metrics)
metrics.append(self.queue.get())
for plugin in self.plugins:
plugin.handle(metrics)
+
+ def _init_backends(self):
+ for backend in METRIC_BACKENDS:
+ self.plugins.append(backend())
import multiprocessing
import time
import multiprocessing
import time
import requests
from osm_common.dbbase import DbException
import requests
from osm_common.dbbase import DbException
try:
self.evaluate()
time.sleep(cfg.OSMMON_EVALUATOR_INTERVAL)
try:
self.evaluate()
time.sleep(cfg.OSMMON_EVALUATOR_INTERVAL)
+ except peewee.PeeweeException:
+ log.exception("Database error evaluating alarms: ")
+ raise
except Exception:
log.exception("Error evaluating alarms")
except Exception:
log.exception("Error evaluating alarms")
# For those usages not covered by the Apache License, Version 2.0 please
# contact: bdiaz@whitestack.com or glavado@whitestack.com
##
# For those usages not covered by the Apache License, Version 2.0 please
# contact: bdiaz@whitestack.com or glavado@whitestack.com
##
import unittest
from unittest import mock
import unittest
from unittest import mock
-from peewee import SqliteDatabase
-
from osm_mon.collector.collector import Collector
from osm_mon.collector.collectors.openstack import OpenstackCollector
from osm_mon.collector.collector import Collector
from osm_mon.collector.collectors.openstack import OpenstackCollector
-from osm_mon.core import database
-from osm_mon.core.database import DatabaseManager, VimCredentials, Alarm
-
-test_db = SqliteDatabase(':memory:')
-
-MODELS = [VimCredentials, Alarm]
+from osm_mon.core.database import DatabaseManager, db
class CollectorTest(unittest.TestCase):
def setUp(self):
super().setUp()
class CollectorTest(unittest.TestCase):
def setUp(self):
super().setUp()
- database.db = test_db
- test_db.bind(MODELS)
- test_db.connect()
- test_db.drop_tables(MODELS)
- test_db.create_tables(MODELS)
+ os.environ["DATABASE"] = "sqlite:///:memory:"
+ db_manager = DatabaseManager()
+ db_manager.create_tables()
def tearDown(self):
super().tearDown()
def tearDown(self):
super().tearDown()
@mock.patch("osm_mon.collector.collector.CommonDbClient", mock.Mock())
@mock.patch("osm_mon.collector.collector.CommonDbClient", mock.Mock())
+ @mock.patch.object(Collector, "_init_backends", mock.Mock())
@mock.patch.object(OpenstackCollector, "__init__", lambda *args, **kwargs: None)
@mock.patch.object(OpenstackCollector, "collect")
@mock.patch.object(DatabaseManager, "get_vim_type")
@mock.patch.object(OpenstackCollector, "__init__", lambda *args, **kwargs: None)
@mock.patch.object(OpenstackCollector, "collect")
@mock.patch.object(DatabaseManager, "get_vim_type")
collect.assert_called_once_with({})
@mock.patch("osm_mon.collector.collector.CommonDbClient", mock.Mock())
collect.assert_called_once_with({})
@mock.patch("osm_mon.collector.collector.CommonDbClient", mock.Mock())
+ @mock.patch.object(Collector, "_init_backends", mock.Mock())
@mock.patch.object(OpenstackCollector, "collect")
@mock.patch.object(DatabaseManager, "get_vim_type")
def test_init_vim_collector_and_collect_unknown(self, _get_vim_type, openstack_collect):
@mock.patch.object(OpenstackCollector, "collect")
@mock.patch.object(DatabaseManager, "get_vim_type")
def test_init_vim_collector_and_collect_unknown(self, _get_vim_type, openstack_collect):