Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/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()