#!/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()