Files
@ 195dbcc38137
Branch filter:
Location: HydroBot/hydrobot-software/alerts.py - annotation
195dbcc38137
3.3 KiB
text/x-python
Working on alerts - loading alerts from config and alert objects
c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c c0dec1e0808c 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 195dbcc38137 | import smtplib
from email.mime.text import MIMEText
import configparser
import logging
class AlertManager:
def __init__(self, config):
self.logger = logging.getLogger('hydrobot')
self.from_addr = config.get("alerts", "from_address")
self.to_addr = config.get("alerts", "to_address")
self.mail_server = config.get("alerts", "mail_server")
self.username = config.get("alerts", "username")
self.password = config.get("alerts", "password")
self.alerts = []
load_alerts(config)
def load_alerts(self, config):
for section in self.config.sections():
if "alert" in section:
type = self.config.get(section, "type")
if type == "output_feedback":
name = self.config.get(section, "name")
output_module = self.config.get(section, "output_module")
output = self.config.get(section, "output")
input_module = self.config.get(section, "input_module")
input = self.config.get(section, "input")
on_threshold = self.config.get(section, "on_threshold")
off_threshold = self.config.get(section, "off_threshold")
deadband = self.config.get(section, "deadband")
self.alerts.append(OutputFeedbackAlert(name, output_module, output, input_module, input, on_threshold, off_threshold, deadband))
elif type == "measurement":
name = self.config.get(section, "name")
input_module = self.config.get(section, "input_module")
input = self.config.get(section, "input")
high_threshold = self.config.get(section, "high_threshold")
low_threshold = self.config.get(section, "low_threshold")
deadband = self.config.get(section, "deadband")
self.alerts.append(MeasurementAlert(name, input_module, input, high_threshold, low_threshold, deadband))
def send_alert(self, message):
msg = MIMEText(message)
msg['Subject'] = "HydroBot Alert"
msg['From'] = self.from_addr
msg['To'] = self.to_addr
server = smtplib.SMTP(self.mail_server)
server.ehlo()
server.starttls()
server.login(self.username, self.password)
server.send_message(msg)
server.quit()
def evaluate_alerts(self):
for alert in self.alerts:
alert.evalutate()
class Alert(metaclass=ABCMeta):
def __init__(self, name):
self.name = name
@abstractmethod
def evalutate(self):
pass
class OutputFeedbackAlert(Alert):
def __init__(self, name, output_module, output, input_module, input, on_threshold, off_threshold, deadband):
super(Alert, self).__init__(name)
def evalutate(self):
print(self.name)
class MeasurementAlert(Alert):
def __init__(self, name, input_module, input, high_threshold, low_threshold, deadband):
super(Alert, self).__init__(name)
def evalutate(self):
print(self.name)
|