64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
import logging
|
|
import os
|
|
import sys
|
|
from logging.handlers import SysLogHandler
|
|
|
|
from alerta.plugins import PluginBase
|
|
|
|
try:
|
|
from alerta.plugins import app # alerta >= 5.0
|
|
except ImportError:
|
|
from alerta.app import app # alerta < 5.0
|
|
|
|
LOG = logging.getLogger('alerta.plugins.logger')
|
|
|
|
DEFAULT_SYSLOG_FORMAT = '%(name)s[%(process)d]: %(levelname)s - %(message)s'
|
|
DEFAULT_SYSLOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
|
|
DEFAULT_SYSLOG_FACILITY = 'local7'
|
|
|
|
LOGGER_SYSLOG_FORMAT = os.environ.get('LOGGER_SYSLOG_FORMAT') or app.config.get(
|
|
'SYSLOG_FORMAT', DEFAULT_SYSLOG_FORMAT)
|
|
LOGGER_SYSLOG_DATE_FORMAT = os.environ.get('LOGGER_SYSLOG_DATE_FORMAT') or app.config.get(
|
|
'SYSLOG_DATE_FORMAT', DEFAULT_SYSLOG_DATE_FORMAT)
|
|
LOGGER_SYSLOG_FACILITY = os.environ.get('LOGGER_SYSLOG_FACILITY') or app.config.get(
|
|
'SYSLOG_FACILITY', DEFAULT_SYSLOG_FACILITY)
|
|
|
|
|
|
class Syslog(PluginBase):
|
|
|
|
def __init__(self, name=None):
|
|
|
|
self.logger = logging.getLogger(name)
|
|
|
|
if sys.platform == 'darwin':
|
|
socket = '/var/run/syslog'
|
|
else:
|
|
socket = '/dev/log'
|
|
facility = LOGGER_SYSLOG_FACILITY
|
|
|
|
syslog = SysLogHandler(address=socket, facility=facility)
|
|
syslog.setFormatter(logging.Formatter(
|
|
fmt=LOGGER_SYSLOG_FORMAT, datefmt=LOGGER_SYSLOG_DATE_FORMAT))
|
|
self.logger.addHandler(syslog)
|
|
|
|
super().__init__(name)
|
|
|
|
def pre_receive(self, alert):
|
|
return alert
|
|
|
|
def post_receive(self, alert):
|
|
|
|
if alert.severity == 'critical':
|
|
level = logging.CRITICAL
|
|
elif alert.severity in ['major', 'minor']:
|
|
level = logging.ERROR
|
|
elif alert.severity == 'warning':
|
|
level = logging.WARNING
|
|
else:
|
|
level = logging.INFO
|
|
|
|
self.logger.log(level=level, msg=alert)
|
|
|
|
def status_change(self, alert, status, text):
|
|
pass
|