102
102
from dispatch .signal import service as signal_service
103
103
from dispatch .signal .enums import SignalEngagementStatus
104
104
from dispatch .signal .models import (
105
+ Signal ,
105
106
SignalEngagement ,
107
+ SignalFilter ,
106
108
SignalFilterCreate ,
107
109
SignalInstance ,
108
110
)
@@ -843,14 +845,28 @@ def _create_snooze_filter(
843
845
844
846
signal .filters .append (new_filter )
845
847
db_session .commit ()
848
+ return new_filter
849
+
850
+ channel_id = context ["subject" ].channel_id
851
+ thread_id = context ["subject" ].thread_id
846
852
847
853
# Check if last_mfa_time was within the last hour
848
854
if not mfa_enabled :
849
- _create_snooze_filter (
855
+ new_filter = _create_snooze_filter (
850
856
db_session = db_session ,
851
857
user = user ,
852
858
subject = context ["subject" ],
853
859
)
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
+ )
854
870
send_success_modal (
855
871
client = client ,
856
872
view_id = body ["view" ]["id" ],
@@ -875,12 +891,21 @@ def _create_snooze_filter(
875
891
)
876
892
877
893
if response == MfaChallengeStatus .APPROVED :
878
- # Get the existing filters for the signal
879
- _create_snooze_filter (
894
+ new_filter = _create_snooze_filter (
880
895
db_session = db_session ,
881
896
user = user ,
882
897
subject = context ["subject" ],
883
898
)
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
+ )
884
909
send_success_modal (
885
910
client = client ,
886
911
view_id = body ["view" ]["id" ],
@@ -909,6 +934,48 @@ def _create_snooze_filter(
909
934
)
910
935
911
936
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
+
912
979
def assignee_select (
913
980
placeholder : str = "Select Assignee" ,
914
981
initial_user : str = None ,
0 commit comments