74
74
case_type_select ,
75
75
description_input ,
76
76
entity_select ,
77
+ extension_request_checkbox ,
77
78
incident_priority_select ,
78
79
incident_type_select ,
79
80
project_select ,
106
107
from dispatch .project import service as project_service
107
108
from dispatch .search .utils import create_filter_expression
108
109
from dispatch .service import flows as service_flows
110
+ from dispatch .service .models import Service
109
111
from dispatch .signal import service as signal_service
110
112
from dispatch .signal .enums import SignalEngagementStatus
111
113
from dispatch .signal .models import (
@@ -733,6 +735,7 @@ def snooze_button_click(
733
735
title_input (placeholder = "A name for your snooze filter." ),
734
736
description_input (placeholder = "Provide a description for your snooze filter." ),
735
737
relative_date_picker_input (label = "Expiration" ),
738
+ extension_request_checkbox (),
736
739
]
737
740
738
741
# not all signals will have entities and slack doesn't like empty selects
@@ -903,11 +906,16 @@ def handle_snooze_submission_event(
903
906
)
904
907
mfa_enabled = True if mfa_plugin else False
905
908
909
+ form_data : FormData = context ["subject" ].form_data
910
+ extension_request_data = form_data .get (DefaultBlockIds .extension_request_checkbox )
911
+ extension_request_value = extension_request_data [0 ].value if extension_request_data else None
912
+ extension_requested = True if extension_request_value == "Yes" else False
913
+
906
914
def _create_snooze_filter (
907
915
db_session : Session ,
908
916
subject : SubjectMetadata ,
909
917
user : DispatchUser ,
910
- ) -> None :
918
+ ) -> SignalFilter :
911
919
form_data : FormData = subject .form_data
912
920
# Get the existing filters for the signal
913
921
signal = signal_service .get (db_session = db_session , signal_id = subject .id )
@@ -1005,6 +1013,8 @@ def _create_snooze_filter(
1005
1013
signal = signal ,
1006
1014
new_filter = new_filter ,
1007
1015
thread_ts = thread_id ,
1016
+ extension_requested = extension_requested ,
1017
+ oncall_service = new_filter .project .snooze_extension_oncall_service ,
1008
1018
)
1009
1019
send_success_modal (
1010
1020
client = client ,
@@ -1044,6 +1054,8 @@ def _create_snooze_filter(
1044
1054
signal = signal ,
1045
1055
new_filter = new_filter ,
1046
1056
thread_ts = thread_id ,
1057
+ extension_requested = extension_requested ,
1058
+ oncall_service = new_filter .project .snooze_extension_oncall_service ,
1047
1059
)
1048
1060
send_success_modal (
1049
1061
client = client ,
@@ -1073,6 +1085,24 @@ def _create_snooze_filter(
1073
1085
)
1074
1086
1075
1087
1088
+ def get_user_id_from_oncall_service (
1089
+ client : WebClient ,
1090
+ db_session : Session ,
1091
+ oncall_service : Service | None ,
1092
+ ) -> str | None :
1093
+ if not oncall_service :
1094
+ return None
1095
+
1096
+ oncall_email = service_flows .resolve_oncall (service = oncall_service , db_session = db_session )
1097
+ if oncall_email :
1098
+ # Get the Slack user ID for the current oncall
1099
+ try :
1100
+ return client .users_lookupByEmail (email = oncall_email )["user" ]["id" ]
1101
+ except SlackApiError :
1102
+ log .error (f"Failed to find Slack user for email: { oncall_email } " )
1103
+ return None
1104
+
1105
+
1076
1106
def post_snooze_message (
1077
1107
client : WebClient ,
1078
1108
channel : str ,
@@ -1081,6 +1111,8 @@ def post_snooze_message(
1081
1111
db_session : Session ,
1082
1112
new_filter : SignalFilter ,
1083
1113
thread_ts : str | None = None ,
1114
+ extension_requested : bool = False ,
1115
+ oncall_service : Service | None = None ,
1084
1116
):
1085
1117
def extract_entity_ids (expression : list [dict ]) -> list [int ]:
1086
1118
entity_ids = []
@@ -1105,13 +1137,20 @@ def extract_entity_ids(expression: list[dict]) -> list[int]:
1105
1137
1106
1138
message = (
1107
1139
f":zzz: *New Signal Snooze Added*\n "
1108
- f"• User : { user .email } \n "
1140
+ f"• Created by : { user .email } \n "
1109
1141
f"• Signal: { signal .name } \n "
1110
1142
f"• Snooze Name: { new_filter .name } \n "
1111
1143
f"• Description: { new_filter .description } \n "
1112
1144
f"• Expiration: { new_filter .expiration } \n "
1113
1145
f"• Entities: { entities_text } "
1114
1146
)
1147
+ if extension_requested :
1148
+ message += "\n • *Extension Requested*"
1149
+ if user_id := get_user_id_from_oncall_service (
1150
+ client = client , db_session = db_session , oncall_service = oncall_service
1151
+ ):
1152
+ message += f" - notifying oncall: <@{ user_id } >"
1153
+
1115
1154
client .chat_postMessage (channel = channel , text = message , thread_ts = thread_ts )
1116
1155
1117
1156
0 commit comments