48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
|
|
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
|