import logging from restic_compose_backup.alerts.smtp import SMTPAlert from restic_compose_backup.alerts.discord import DiscordWebhookAlert from restic_compose_backup.config import Config logger = logging.getLogger(__name__) ALERT_INFO = 'INFO', ALERT_ERROR = 'ERROR' ALERT_TYPES = [ALERT_INFO, ALERT_ERROR] BACKENDS = [SMTPAlert, DiscordWebhookAlert] def send(subject: str = None, body: str = None, alert_type: str = 'INFO'): """Send alert to all configured backends""" alert_classes = configured_alert_types() for instance in alert_classes: logger.info('Configured: %s', instance.name) try: instance.send( subject=f'[{alert_type}] {subject}', body=body, ) except Exception as ex: logger.error("Exception raised when sending alert [%s]: %s", instance.name, ex) if len(alert_classes) == 0: logger.info("No alerts configured") def configured_alert_types(): """Returns a list of configured alert class instances""" logger.debug('Getting alert backends') entires = [] for cls in BACKENDS: instance = cls.create_from_env() logger.debug("Alert backend '%s' configured: %s", cls.name, instance != None) if instance: entires.append(instance) return entires