oncall-engine/engine/apps/slack/representatives/user_representative.py

48 lines
1.9 KiB
Python
Raw Permalink Normal View History

from apps.slack.scenarios.scenario_step import ScenarioStep
from apps.user_management.user_representative import UserAbstractRepresentative
class UserSlackRepresentative(UserAbstractRepresentative):
def __init__(self, log_record):
self.log_record = log_record
def is_applicable(self):
return (
self.log_record.alert_group.slack_message is not None
and self.log_record.alert_group.channel.organization.slack_team_identity is not None
)
@classmethod
def on_user_action_triggered(cls, **kwargs):
log_record = kwargs["log_record"]
instance = cls(log_record)
if instance.is_applicable():
handler_name = instance.get_handler_name()
if hasattr(instance, handler_name):
handler = getattr(instance, handler_name)
handler()
else:
cls.on_handler_not_found()
def on_triggered(self):
NotificationDeliveryStep = ScenarioStep.get_step("notification_delivery", "NotificationDeliveryStep")
step = NotificationDeliveryStep(self.log_record.alert_group.channel.organization.slack_team_identity)
step.process_signal(self.log_record)
def on_failed(self):
NotificationDeliveryStep = ScenarioStep.get_step("notification_delivery", "NotificationDeliveryStep")
step = NotificationDeliveryStep(self.log_record.alert_group.channel.organization.slack_team_identity)
step.process_signal(self.log_record)
def on_success(self):
NotificationDeliveryStep = ScenarioStep.get_step("notification_delivery", "NotificationDeliveryStep")
step = NotificationDeliveryStep(self.log_record.alert_group.channel.organization.slack_team_identity)
step.process_signal(self.log_record)
def get_handler_name(self):
return self.HANDLER_PREFIX + self.get_handlers_map()[self.log_record.type]
@classmethod
def on_handler_not_found(cls):
pass