changeset 14:8262efacf3fb

Initial implementation of sending e-mail in fatal error cases.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 04 Jul 2016 12:59:30 +0300
parents dd240a7ad913
children 86dd9280dcff
files multimerge.py
diffstat 1 files changed, 34 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/multimerge.py	Mon Jul 04 12:58:51 2016 +0300
+++ b/multimerge.py	Mon Jul 04 12:59:30 2016 +0300
@@ -13,6 +13,10 @@
 import re
 import time
 import datetime
+
+import smtplib
+from email.mime.text import MIMEText
+
 import httplib2
 import ConfigParser
 import oauth2client
@@ -40,6 +44,19 @@
 ## Fatal errors
 def gcm_fatal(smsg):
     gcm_print(u"ERROR: "+ smsg)
+    if cfg.email_ok and cfg.email:
+        ## If e-mail is set, send e-mail
+        msg = MIMEText(("\n".join(gcm_msgbuf)).encode("UTF-8"), "plain")
+        msg.set_charset("UTF-8")
+        msg["Subject"] = cfg.email_subject
+        msg["From"] = cfg.email_sender
+        msg["To"] = ",".join(cfg.email_to)
+        try:
+            smtpH = smtplib.SMTP('localhost')
+            smtpH.sendmail(cfg.email_sender, cfg.email_to, msg.as_string())
+            smtpH.quit()
+        except:
+            gcm_print("FATAL: Oh crap, e-mail sending failed.")
     sys.exit(1)
 
 
@@ -221,6 +238,12 @@
 
 cfg.mdef("debug", True, gcm_is_bool, gcm_trans_bool, False)
 
+cfg.mdef("email_ok", False, None, None, False)
+cfg.mdef("email", True, gcm_is_bool, gcm_trans_bool, False)
+cfg.mdef("email_to", True, gcm_is_email_list, gcm_trans_email_list, None)
+cfg.mdef("email_sender", True, gcm_is_email, None, None)
+cfg.mdef("email_subject", True, gcm_is_string, None, "Google Calendar MultiMerge status")
+
 cfg.mdef("source_regex", True, gcm_is_string, None, "^R:\s*(.*?)\s*\(\s*(.+?)\s*\)\s*$")
 cfg.mdef("source_regmap", False, gcm_is_list, gcm_trans_list, [1, 2])
 cfg.mdef("source_regmap_len", False, None, None, len(cfg.source_regmap))
@@ -265,6 +288,17 @@
 
 
 ## Validate settings
+if cfg.email:
+    if cfg.email_subject == None or len(cfg.email_subject) == 0:
+        gcm_fatal("E-mail enabled but email_subject not set.")
+    elif cfg.email_sender == None:
+        gcm_fatal("E-mail enabled but email_sender not set.")
+    elif cfg.email_to == None:
+        gcm_fatal("E-mail enabled but email_to not set.")
+    else:
+        cfg.mset("email_ok", True)
+
+
 if len(cfg.source_regmap) != cfg.source_regmap_len:
     gcm_fatal("Setting source_regmap list must be {0} items.".format(cfg.source_regmap_len))
 else: