Skip to content

Commit

Permalink
Gracefully disable Merlin support if MySQLdb isn't availabe
Browse files Browse the repository at this point in the history
  • Loading branch information
marineam committed Sep 27, 2011
1 parent 4a8cb6d commit ae8c12c
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 14 deletions.
3 changes: 3 additions & 0 deletions python/nagcat/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ def parse_options():
# Flag to use merlin or not
options.merlin = any_merlin_settings and all_merlin_settings

if options.merlin and not merlin.available():
err.append("Merlin support is not available. Missing MySQLdb?")

if any_merlin_settings and not all_merlin_settings:
err.append("All merlin database settings must be included")

Expand Down
12 changes: 11 additions & 1 deletion python/nagcat/merlin.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,27 @@

import os
import errno
import MySQLdb
import time

try:
import MySQLdb
except ImportError:
MySQLdb = None

from coil.errors import CoilError
from nagcat import errors, log, nagios_api
from nagcat import nagios_objects, scheduler, merlintest, nagios, simple


def available():
"""Returns False if merlin support is disabled"""
return MySQLdb is not None

class NagcatMerlin(nagios.NagcatNagios):
"""NagcatNagios scheduler that load balances using merlin."""

def __init__(self, config, nagios_cfg, merlin_db_info={}, **kwargs):
assert available()
nagios.NagcatNagios.__init__(self, config, nagios_cfg, **kwargs)
self._test_index = 0
self._merlin_db_info = merlin_db_info
Expand Down
31 changes: 18 additions & 13 deletions python/nagcat/unittests/test_merlin.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,28 @@
from coil.struct import Struct
import os
import warnings
import MySQLdb

try:
import MySQLdb
except ImportError:
skip = "MySQLdb is not available"

class TestNagcatMerlinCase(unittest.TestCase):

_merlin_db_info = {
'merlin_db_user': os.environ.get('MYSQL_USER', None),
'merlin_db_host': os.environ.get('MYSQL_HOST', None),
'merlin_db_pass': os.environ.get('MYSQL_PASS', None),
'merlin_db_name': os.environ.get('MYSQL_NAME', None),
'merlin_db_port': os.environ.get('MYSQL_PORT', 3306),
}

if not all((_merlin_db_info['merlin_db_user'],
_merlin_db_info['merlin_db_host'],
_merlin_db_info['merlin_db_name'])):
skip = "Missing MySQL credentials"

def setUp(self):
self._merlin_db_info = {
"merlin_db_user": os.environ.get('MYSQL_USER', None),
"merlin_db_host": os.environ.get('MYSQL_HOST', None),
"merlin_db_pass": os.environ.get('MYSQL_PASS', None),
"merlin_db_name": os.environ.get('MYSQL_NAME', None),
"merlin_db_port": os.environ.get('MYSQL_PORT', 3306),
}
self._should_skip = not all([self._merlin_db_info['merlin_db_user'],
self._merlin_db_info['merlin_db_host'],
self._merlin_db_info['merlin_db_name']])
if self._should_skip:
raise unittest.SkipTest("Not enough database information")
db = MySQLdb.connect(
user=self._merlin_db_info['merlin_db_user'],
host=self._merlin_db_info['merlin_db_host'],
Expand Down

0 comments on commit ae8c12c

Please sign in to comment.