Something went wrong on our end
-
Nicolas KAROLAK authoredNicolas KAROLAK authored
repmgr-event.py 2.09 KiB
#!/usr/bin/env python3
"""
event_notification_command='/usr/local/bin/repmgr_event.py %n %e %s "%t" "%d"'
"""
import argparse
import json
import logging
import logging.handlers
import sys
PARSER = argparse.ArgumentParser()
PARSER.add_argument("node_id")
PARSER.add_argument("event_type")
PARSER.add_argument("success")
PARSER.add_argument("timestamp")
PARSER.add_argument("details")
ARGS = PARSER.parse_args()
MONIT_EVENTS = (
"standby_promote",
"repmgrd_failover_promote",
"repmgrd_failover_follow",
)
LOG_DATA = (ARGS.timestamp, ARGS.node_id, ARGS.event_type, ARGS.success, ARGS.details)
def main():
"""Log repmgrd events."""
# do not process unwanted events
if ARGS.event_type not in MONIT_EVENTS:
sys.exit(0)
# load config if exists
try:
with open("/etc/postgresql/11/main/repmgr-event.json") as data_file:
data = json.load(data_file)
except EnvironmentError:
data = {}
# get config, fallback on defaults
log_file = data.get("log", "/var/log/repmgr-event.log")
mail = data.get("mail", None)
if mail:
host = mail.get("host", "localhost")
sender = mail.get("sender", "root@localhost")
recipients = mail.get("recipients", ["root@localhost"])
credentials = mail.get("credentials", None)
secure = mail.get("secure", None)
# from args
subject = "repmgr event: {}".format(ARGS.event_type)
# logging conf
logger = logging.getLogger("repmgr_event")
logger.setLevel(logging.INFO)
# log to stream
stream_handler = logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)
# log to file
file_handler = logging.handlers.RotatingFileHandler(
log_file, maxBytes=102400, backupCount=7
)
logger.addHandler(file_handler)
# log to mail
if mail:
mail_handler = logging.handlers.SMTPHandler(
host, sender, recipients, subject, credentials, secure
)
logger.addHandler(mail_handler)
# write log
logger.info("%s - %s:%s:%s - %s", *LOG_DATA)
sys.exit(0)
if __name__ == "__main__":
main()