-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add SlackTarget class for sending notifications to Slack channels
- Loading branch information
Showing
6 changed files
with
45 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
class SlackSender: | ||
def send(self, channel: str): | ||
""" | ||
Sends a message to a Slack channel. | ||
Args: | ||
channel (str): The channel to send the message to. | ||
message (str): The message to send. | ||
Returns: | ||
None | ||
""" | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
class MockSlackSender: | ||
def __init__(self): | ||
self.sent_slack = [] | ||
|
||
def send(self, channel: str): | ||
self.sent_slack.append(channel) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,17 @@ | ||
import pytest | ||
from pager.domain.models.escalation_policy import EscalationPolicy, EscalationLevel | ||
from pager.domain.models.notification_target import EmailTarget, SmsTarget | ||
from pager.domain.models.notification_target import EmailTarget, SmsTarget, SlackTarget | ||
|
||
def test_escalation_policy_creation(): | ||
""" | ||
Test case for creating an escalation policy with email and SMS targets. | ||
""" | ||
email_target = EmailTarget(email='[email protected]') | ||
sms_target = SmsTarget(phone_number='1234567890') | ||
slack_target = SlackTarget(channel='test') | ||
level1 = EscalationLevel(level_number=0, targets=[email_target]) | ||
level2 = EscalationLevel(level_number=1, targets=[sms_target]) | ||
level3 = EscalationLevel(level_number=2, targets=[slack_target]) | ||
policy = EscalationPolicy(monitored_service_id='service1', levels=[level1, level2]) | ||
|
||
assert policy.monitored_service_id == 'service1' | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,27 +2,31 @@ | |
from pager.domain.models.escalation_policy import EscalationPolicy, EscalationLevel | ||
from pager.domain.models.monitored_service import MonitoredService | ||
from pager.domain.events import Alert, Acknowledgement, HealthyEvent | ||
from pager.domain.models.notification_target import EmailTarget, SmsTarget | ||
from pager.domain.models.notification_target import EmailTarget, SlackTarget, SmsTarget | ||
from pager.domain.services.pager_service import PagerService | ||
from tests.mocks.mock_email_sender import MockEmailSender | ||
from tests.mocks.mock_slack_sender import MockSlackSender | ||
from tests.mocks.mock_sms_sender import MockSmsSender | ||
from tests.mocks.mock_escalation_policy_repository import MockEscalationPolicyRepository | ||
|
||
@pytest.fixture | ||
def setup_pager_service(): | ||
email_sender = MockEmailSender() | ||
sms_sender = MockSmsSender() | ||
slack_sender = MockSlackSender() | ||
policy_repo = MockEscalationPolicyRepository({ | ||
'service1': EscalationPolicy( | ||
monitored_service_id='service1', | ||
levels=[ | ||
EscalationLevel(level_number=0, targets=[EmailTarget(email='[email protected]')]), | ||
EscalationLevel(level_number=1, targets=[SmsTarget(phone_number='1234567890')]) | ||
EscalationLevel(level_number=1, targets=[SmsTarget(phone_number='1234567890')]), | ||
EscalationLevel(level_number=2, targets=[SlackTarget(channel='test')]) | ||
] | ||
) | ||
}) | ||
pager_service = PagerService(policy_repo, email_sender, sms_sender) | ||
return pager_service, email_sender, sms_sender | ||
pager_service = PagerService(policy_repo, email_sender, sms_sender, slack_sender) | ||
return pager_service, email_sender, sms_sender, slack_sender | ||
|
||
|
||
# def test_handle_alert(setup_pager_service): | ||
# pager_service, email_sender, sms_sender = setup_pager_service | ||
|
@@ -34,7 +38,7 @@ def setup_pager_service(): | |
# assert email_sender.sent_emails[0] == '[email protected]' | ||
|
||
def test_handle_acknowledgement(setup_pager_service): | ||
pager_service, email_sender, sms_sender = setup_pager_service | ||
pager_service, email_sender, sms_sender, slack_sender = setup_pager_service | ||
alert = Alert(service_id='service1', message='Test Alert') | ||
pager_service.handle_alert(alert) | ||
|
||
|
@@ -45,7 +49,7 @@ def test_handle_acknowledgement(setup_pager_service): | |
assert service.acknowledged | ||
|
||
def test_handle_healthy_event(setup_pager_service): | ||
pager_service, email_sender, sms_sender = setup_pager_service | ||
pager_service, email_sender, sms_sender, slack_sender = setup_pager_service | ||
alert = Alert(service_id='service1', message='Test Alert') | ||
pager_service.handle_alert(alert) | ||
|
||
|