From cc8680564d259313042b211c0d40fa818b32059a Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Fri, 22 Sep 2023 12:20:33 +0300 Subject: Add email alerts --- app/EmailAlerter.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 app/EmailAlerter.py (limited to 'app/EmailAlerter.py') diff --git a/app/EmailAlerter.py b/app/EmailAlerter.py new file mode 100644 index 0000000..823cbf1 --- /dev/null +++ b/app/EmailAlerter.py @@ -0,0 +1,47 @@ +import requests +import traceback +from datetime import datetime +from app.AggroConfig import AggroConfigEmailAlerter +from dataclasses import asdict + + +class EmailAlerter: + @staticmethod + def from_config(config: AggroConfigEmailAlerter) -> "EmailAlerter": + return EmailAlerter(**asdict(config)) + + def __init__( + self, api_url: str, api_auth: str, email_from: str, email_to: list[str] + ): + self.api_url = api_url + self.email_from = email_from + self.email_to = email_to + api_auth_parts = api_auth.split(":") + if len(api_auth_parts) != 2: + raise Exception( + "[EmailAlerter] supplied api_auth is not of form :" + ) + self.api_auth = (api_auth_parts[0], api_auth_parts[1]) + + def send_alert(self, text: str): + try: + now = datetime.now() + now_text = now.strftime("%a, %d %b %Y %H:%M:%S +0000") + data = { + "from": self.email_from, + "to": self.email_to, + "subject": f"Aggro alert on {now_text}", + "text": text, + } + r = requests.post( + self.api_url, + auth=self.api_auth, + data=data, + ) + if r.status_code >= 400: + raise Exception( + f"[EmailAlerter] sending alert email via HTTP returned code {r.status_code} and body:\n{r.text}" + ) + + except: + traceback.print_exc() -- cgit v1.3