Add log level control using command line arguments
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Default ERROR -v WARNING -vv INFO -vvv DEBUG
This commit is contained in:
parent
8169b4257a
commit
05f630d08a
2
Makefile
2
Makefile
@ -12,7 +12,7 @@ env:
|
|||||||
# Runs Minitor
|
# Runs Minitor
|
||||||
.PHONY: run
|
.PHONY: run
|
||||||
run: env
|
run: env
|
||||||
./env/bin/python -m minitor.main
|
./env/bin/python -m minitor.main -vvv
|
||||||
|
|
||||||
# Runs Minitor with metrics
|
# Runs Minitor with metrics
|
||||||
.PHONY: run-metrics
|
.PHONY: run-metrics
|
||||||
|
@ -16,7 +16,7 @@ from prometheus_client import start_http_server
|
|||||||
|
|
||||||
DEFAULT_METRICS_PORT = 8080
|
DEFAULT_METRICS_PORT = 8080
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level=logging.INFO,
|
level=logging.ERROR,
|
||||||
format='%(asctime)s %(levelname)s %(name)s %(message)s'
|
format='%(asctime)s %(levelname)s %(name)s %(message)s'
|
||||||
)
|
)
|
||||||
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
||||||
@ -111,7 +111,7 @@ class MinitorAlert(Exception):
|
|||||||
class Monitor(object):
|
class Monitor(object):
|
||||||
"""Primary configuration item for Minitor"""
|
"""Primary configuration item for Minitor"""
|
||||||
|
|
||||||
def __init__(self, config, counter=None):
|
def __init__(self, config, counter=None, logger=None):
|
||||||
"""Accepts a dictionary of configuration items to override defaults"""
|
"""Accepts a dictionary of configuration items to override defaults"""
|
||||||
settings = {
|
settings = {
|
||||||
'alerts': ['log'],
|
'alerts': ['log'],
|
||||||
@ -139,9 +139,14 @@ class Monitor(object):
|
|||||||
self.total_failure_count = 0
|
self.total_failure_count = 0
|
||||||
|
|
||||||
self._counter = counter
|
self._counter = counter
|
||||||
|
if logger is None:
|
||||||
self._logger = logging.getLogger(
|
self._logger = logging.getLogger(
|
||||||
'{}({})'.format(self.__class__.__name__, self.name)
|
'{}({})'.format(self.__class__.__name__, self.name)
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
self._logger = logger.getChild(
|
||||||
|
'{}({})'.format(self.__class__.__name__, self.name)
|
||||||
|
)
|
||||||
|
|
||||||
def _count_check(self, is_success=True, is_alert=False):
|
def _count_check(self, is_success=True, is_alert=False):
|
||||||
if self._counter is not None:
|
if self._counter is not None:
|
||||||
@ -233,7 +238,7 @@ class Monitor(object):
|
|||||||
|
|
||||||
|
|
||||||
class Alert(object):
|
class Alert(object):
|
||||||
def __init__(self, name, config, counter=None):
|
def __init__(self, name, config, counter=None, logger=None):
|
||||||
"""An alert must be named and have a config dict"""
|
"""An alert must be named and have a config dict"""
|
||||||
self.name = name
|
self.name = name
|
||||||
self.command = config.get('command')
|
self.command = config.get('command')
|
||||||
@ -241,9 +246,14 @@ class Alert(object):
|
|||||||
raise InvalidAlertException('Invalid alert {}'.format(self.name))
|
raise InvalidAlertException('Invalid alert {}'.format(self.name))
|
||||||
|
|
||||||
self._counter = counter
|
self._counter = counter
|
||||||
|
if logger is None:
|
||||||
self._logger = logging.getLogger(
|
self._logger = logging.getLogger(
|
||||||
'{}({})'.format(self.__class__.__name__, self.name)
|
'{}({})'.format(self.__class__.__name__, self.name)
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
self._logger = logger.getChild(
|
||||||
|
'{}({})'.format(self.__class__.__name__, self.name)
|
||||||
|
)
|
||||||
|
|
||||||
def _count_alert(self, monitor):
|
def _count_alert(self, monitor):
|
||||||
"""Increments the alert counter"""
|
"""Increments the alert counter"""
|
||||||
@ -321,6 +331,12 @@ class Minitor(object):
|
|||||||
default=DEFAULT_METRICS_PORT,
|
default=DEFAULT_METRICS_PORT,
|
||||||
help='Port to use when serving metrics',
|
help='Port to use when serving metrics',
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--verbose', '-v',
|
||||||
|
action='count',
|
||||||
|
help=('Adjust log verbosity by increasing arg count. Default log',
|
||||||
|
'level is ERROR. Level increases with each `v`'),
|
||||||
|
)
|
||||||
return parser.parse_args(args)
|
return parser.parse_args(args)
|
||||||
|
|
||||||
def _setup(self, config_path):
|
def _setup(self, config_path):
|
||||||
@ -328,7 +344,11 @@ class Minitor(object):
|
|||||||
config = read_yaml(config_path)
|
config = read_yaml(config_path)
|
||||||
self.check_interval = config.get('check_interval', 30)
|
self.check_interval = config.get('check_interval', 30)
|
||||||
self.monitors = [
|
self.monitors = [
|
||||||
Monitor(mon, counter=self._monitor_counter)
|
Monitor(
|
||||||
|
mon,
|
||||||
|
counter=self._monitor_counter,
|
||||||
|
logger=self._logger,
|
||||||
|
)
|
||||||
for mon in config.get('monitors', [])
|
for mon in config.get('monitors', [])
|
||||||
]
|
]
|
||||||
# Add default alert for logging
|
# Add default alert for logging
|
||||||
@ -337,10 +357,16 @@ class Minitor(object):
|
|||||||
'log',
|
'log',
|
||||||
{'command': ['echo', '{alert_message}!']},
|
{'command': ['echo', '{alert_message}!']},
|
||||||
counter=self._alert_counter,
|
counter=self._alert_counter,
|
||||||
|
logger=self._logger,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
self.alerts.update({
|
self.alerts.update({
|
||||||
alert_name: Alert(alert_name, alert, counter=self._alert_counter)
|
alert_name: Alert(
|
||||||
|
alert_name,
|
||||||
|
alert,
|
||||||
|
counter=self._alert_counter,
|
||||||
|
logger=self._logger,
|
||||||
|
)
|
||||||
for alert_name, alert in config.get('alerts', {}).items()
|
for alert_name, alert in config.get('alerts', {}).items()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -413,10 +439,22 @@ class Minitor(object):
|
|||||||
for alert in alerts:
|
for alert in alerts:
|
||||||
self.alerts[alert].alert(str(minitor_alert), monitor)
|
self.alerts[alert].alert(str(minitor_alert), monitor)
|
||||||
|
|
||||||
|
def _set_log_level(self, verbose):
|
||||||
|
"""Sets the log level for the class using the provided verbose count"""
|
||||||
|
if verbose == 1:
|
||||||
|
self._logger.setLevel(logging.WARNING)
|
||||||
|
elif verbose == 2:
|
||||||
|
self._logger.setLevel(logging.INFO)
|
||||||
|
elif verbose >= 3:
|
||||||
|
self._logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
def run(self, args=None):
|
def run(self, args=None):
|
||||||
"""Runs Minitor in a loop"""
|
"""Runs Minitor in a loop"""
|
||||||
args = self._parse_args(args)
|
args = self._parse_args(args)
|
||||||
|
|
||||||
|
if args.verbose:
|
||||||
|
self._set_log_level(args.verbose)
|
||||||
|
|
||||||
if args.metrics:
|
if args.metrics:
|
||||||
self._init_metrics()
|
self._init_metrics()
|
||||||
start_http_server(args.metrics_port)
|
start_http_server(args.metrics_port)
|
||||||
|
Loading…
Reference in New Issue
Block a user