@@ -12,6 +12,8 @@ class OutgoingWebhook::V3 < Integration
12
12
{ key : :alert_resolved , type : :boolean , default : false } ,
13
13
{ key : :alert_dropped , type : :boolean , default : false } ,
14
14
{ key : :alert_handoff , type : :boolean , default : false } ,
15
+ { key : :event_reminder_going_on_call , type : :boolean , default : false } ,
16
+ { key : :event_reminder_going_off_call , type : :boolean , default : false } ,
15
17
{ key : :template , type : :string , default : nil } ,
16
18
{ key : :send_linked , type : :boolean , default : false } ,
17
19
{ key : :outgoing_rules , type : :string , default : nil }
@@ -27,6 +29,8 @@ class OutgoingWebhook::V3 < Integration
27
29
validates :option_alert_resolved , inclusion : { in : [ true , false ] }
28
30
validates :option_alert_dropped , inclusion : { in : [ true , false ] }
29
31
validates :option_alert_handoff , inclusion : { in : [ true , false ] }
32
+ validates :option_event_reminder_going_on_call , inclusion : { in : [ true , false ] }
33
+ validates :option_event_reminder_going_off_call , inclusion : { in : [ true , false ] }
30
34
validates :option_send_linked , inclusion : { in : [ true , false ] }
31
35
32
36
after_initialize do
@@ -38,6 +42,8 @@ class OutgoingWebhook::V3 < Integration
38
42
self . option_alert_resolved ||= false
39
43
self . option_alert_dropped ||= false
40
44
self . option_alert_handoff ||= false
45
+ self . option_event_reminder_going_on_call ||= false
46
+ self . option_event_reminder_going_off_call ||= false
41
47
self . option_send_linked ||= false
42
48
self . option_template ||= ""
43
49
self . option_outgoing_rules ||= ""
@@ -73,28 +79,58 @@ def adapter_outgoing_interest?(event_name)
73
79
74
80
def adapter_process_outgoing
75
81
body = nil
76
- event_type = adapter_outgoing_event . event_name . to_s . tr ( "_" , "." )
82
+ event_type = _map_event_name ( adapter_outgoing_event . event_name )
83
+ handlebars_data = {
84
+ alert : adapter_outgoing_event . alert &.try ( :v3_format ) || adapter_outgoing_event &.alert ,
85
+ event : {
86
+ type : event_type
87
+ }
88
+ } . compact
77
89
78
90
# Do the custom templating portion for outgoing hooks
79
91
if self . option_template . present?
80
92
begin
81
- body = JSON . parse ( handlebars ( self . option_template , {
82
- alert : adapter_outgoing_event . alert . try ( :v3_format ) || adapter_outgoing_event . alert ,
83
- event : {
84
- type : event_type
85
- }
86
- } ) )
93
+ body = JSON . parse ( handlebars ( self . option_template , handlebars_data ) )
87
94
rescue JSON ::ParserError => e
88
95
logs . create ( message : "Error parsing JSON, abort custom format for option template. Error: #{ e . message } " )
89
96
rescue => e
90
97
Rails . logger . error "Error while processing option_template for #{ id } : #{ e . message } "
91
98
end
92
99
end
93
100
94
- body ||= {
95
- data : adapter_outgoing_event . alert . try ( :v3_format ) || adapter_outgoing_event . alert ,
96
- type : event_type
97
- }
101
+ if !body . present?
102
+ body = { }
103
+ body [ :type ] = event_type
104
+ body [ :data ] = case event_type
105
+ when "event_reminder.going_on_call" , "event_reminder.going_off_call"
106
+ {
107
+ id : adapter_outgoing_event . event_reminder . id ,
108
+ prefix_id : adapter_outgoing_event . event_reminder . prefix_id ,
109
+ event : {
110
+ id : adapter_outgoing_event . event_reminder . event . id ,
111
+ prefix_id : adapter_outgoing_event . event_reminder . event . prefix_id ,
112
+ start_time : adapter_outgoing_event . event_reminder . next_start . in_time_zone ( adapter_outgoing_event . event_reminder . event . time_zone ) ,
113
+ end_time : adapter_outgoing_event . event_reminder . next_end . in_time_zone ( adapter_outgoing_event . event_reminder . event . time_zone ) ,
114
+ time_zone : adapter_outgoing_event . event_reminder . event . time_zone ,
115
+ iana_time_zone : adapter_outgoing_event . event_reminder . event . iana_time_zone ,
116
+ layer : adapter_outgoing_event . event_reminder . event . layer ,
117
+ teams : adapter_outgoing_event . event_reminder . event . teams . map { |x | { id : x . id , tiny_id : x . tiny_id , prefix_id : x . prefix_id , name : x . name } } ,
118
+ account_user : {
119
+ id : adapter_outgoing_event . event_reminder . account_user . id ,
120
+ prefix_id : adapter_outgoing_event . event_reminder . account_user . prefix_id ,
121
+ user : {
122
+ id : adapter_outgoing_event . event_reminder . account_user . user . id ,
123
+ prefix_id : adapter_outgoing_event . event_reminder . account_user . user . prefix_id ,
124
+ name : adapter_outgoing_event . event_reminder . account_user . user . name ,
125
+ email : adapter_outgoing_event . event_reminder . account_user . user . email
126
+ }
127
+ }
128
+ }
129
+ }
130
+ else
131
+ adapter_outgoing_event . alert &.try ( :v3_format ) || adapter_outgoing_event &.alert
132
+ end
133
+ end
98
134
99
135
url = adapter_outgoing_event . outgoing_rules_data . dig ( "webhook_url" ) || option_webhook_url
100
136
body . merge! ( adapter_outgoing_event . outgoing_rules_data . except ( "webhook_url" ) )
@@ -110,5 +146,14 @@ def adapter_process_outgoing
110
146
111
147
outgoing_webhook_delivery
112
148
end
149
+
150
+ def _map_event_name ( event_name )
151
+ case event_name
152
+ when "event_reminder_going_on_call" then "event_reminder.going_on_call"
153
+ when "event_reminder_going_off_call" then "event_reminder.going_off_call"
154
+ else
155
+ event_name . to_s . tr ( "_" , "." )
156
+ end
157
+ end
113
158
end
114
159
end
0 commit comments