Skip to content

Commit 96b0b87

Browse files
authored
feat(slack): add signal snooze channel notification for visibility (Netflix#5421)
* feat(slack): add signal snooze channel notification for visibility * feat: correctly show entity value in slack message
1 parent 583b5e3 commit 96b0b87

File tree

1 file changed

+70
-3
lines changed

1 file changed

+70
-3
lines changed

src/dispatch/plugins/dispatch_slack/case/interactive.py

+70-3
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@
102102
from dispatch.signal import service as signal_service
103103
from dispatch.signal.enums import SignalEngagementStatus
104104
from dispatch.signal.models import (
105+
Signal,
105106
SignalEngagement,
107+
SignalFilter,
106108
SignalFilterCreate,
107109
SignalInstance,
108110
)
@@ -843,14 +845,28 @@ def _create_snooze_filter(
843845

844846
signal.filters.append(new_filter)
845847
db_session.commit()
848+
return new_filter
849+
850+
channel_id = context["subject"].channel_id
851+
thread_id = context["subject"].thread_id
846852

847853
# Check if last_mfa_time was within the last hour
848854
if not mfa_enabled:
849-
_create_snooze_filter(
855+
new_filter = _create_snooze_filter(
850856
db_session=db_session,
851857
user=user,
852858
subject=context["subject"],
853859
)
860+
signal = signal_service.get(db_session=db_session, signal_id=context["subject"].id)
861+
post_snooze_message(
862+
db_session=db_session,
863+
client=client,
864+
channel=channel_id,
865+
user=user,
866+
signal=signal,
867+
new_filter=new_filter,
868+
thread_ts=thread_id,
869+
)
854870
send_success_modal(
855871
client=client,
856872
view_id=body["view"]["id"],
@@ -875,12 +891,21 @@ def _create_snooze_filter(
875891
)
876892

877893
if response == MfaChallengeStatus.APPROVED:
878-
# Get the existing filters for the signal
879-
_create_snooze_filter(
894+
new_filter = _create_snooze_filter(
880895
db_session=db_session,
881896
user=user,
882897
subject=context["subject"],
883898
)
899+
signal = signal_service.get(db_session=db_session, signal_id=context["subject"].id)
900+
post_snooze_message(
901+
db_session=db_session,
902+
client=client,
903+
channel=channel_id,
904+
user=user,
905+
signal=signal,
906+
new_filter=new_filter,
907+
thread_ts=thread_id,
908+
)
884909
send_success_modal(
885910
client=client,
886911
view_id=body["view"]["id"],
@@ -909,6 +934,48 @@ def _create_snooze_filter(
909934
)
910935

911936

937+
def post_snooze_message(
938+
client: WebClient,
939+
channel: str,
940+
user: DispatchUser,
941+
signal: Signal,
942+
db_session: Session,
943+
new_filter: SignalFilter,
944+
thread_ts: str | None = None,
945+
):
946+
def extract_entity_ids(expression: list[dict]) -> list[int]:
947+
entity_ids = []
948+
for item in expression:
949+
if isinstance(item, dict) and "or" in item:
950+
for condition in item["or"]:
951+
if condition.get("model") == "Entity" and condition.get("field") == "id":
952+
entity_ids.append(int(condition.get("value")))
953+
return entity_ids
954+
955+
entity_ids = extract_entity_ids(new_filter.expression)
956+
957+
if entity_ids:
958+
entities = []
959+
for entity_id in entity_ids:
960+
entity = entity_service.get(db_session=db_session, entity_id=entity_id)
961+
if entity:
962+
entities.append(entity)
963+
entities_text = ", ".join([f"{entity.value} ({entity.id})" for entity in entities])
964+
else:
965+
entities_text = "All"
966+
967+
message = (
968+
f":zzz: *New Signal Snooze Added*\n"
969+
f"• User: {user.email}\n"
970+
f"• Signal: {signal.name}\n"
971+
f"• Snooze Name: {new_filter.name}\n"
972+
f"• Description: {new_filter.description}\n"
973+
f"• Expiration: {new_filter.expiration}\n"
974+
f"• Entities: {entities_text}"
975+
)
976+
client.chat_postMessage(channel=channel, text=message, thread_ts=thread_ts)
977+
978+
912979
def assignee_select(
913980
placeholder: str = "Select Assignee",
914981
initial_user: str = None,

0 commit comments

Comments
 (0)