pager_tree-integrations 1.1.6 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/pager_tree/integrations/live_call_routing/twilio/v3_controller.rb +20 -0
  3. data/app/jobs/pager_tree/integrations/live_call_routing/twilio/v3/max_wait_time_job.rb +13 -0
  4. data/app/models/pager_tree/integrations/additional_datum.rb +2 -2
  5. data/app/models/pager_tree/integrations/alert.rb +2 -2
  6. data/app/models/pager_tree/integrations/aws_cloudwatch/v3.rb +15 -5
  7. data/app/models/pager_tree/integrations/boolean_store_accessor.rb +2 -2
  8. data/app/models/pager_tree/integrations/channel/hangouts/v3.rb +23 -2
  9. data/app/models/pager_tree/integrations/channel/mattermost/v3.rb +4 -0
  10. data/app/models/pager_tree/integrations/channel/microsoft_teams/v3.rb +74 -29
  11. data/app/models/pager_tree/integrations/channel/microsoft_teams/v4.rb +261 -0
  12. data/app/models/pager_tree/integrations/channel/slack/v3.rb +30 -3
  13. data/app/models/pager_tree/integrations/cloudflare/v3.rb +75 -0
  14. data/app/models/pager_tree/integrations/custom_webhook/v3.rb +206 -0
  15. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/datadog.json +12 -0
  16. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/datadog.yaml +30 -0
  17. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/generic_rules_definition.json +9 -0
  18. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/generic_rules_example.yaml +27 -0
  19. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/grafana.json +25 -0
  20. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/grafana.yaml +33 -0
  21. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/new_relic.json +40 -0
  22. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/new_relic.yaml +32 -0
  23. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/pingdom.json +30 -0
  24. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/pingdom.yaml +23 -0
  25. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/sns_cloudwatch.json +12 -0
  26. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/sns_cloudwatch.yaml +48 -0
  27. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/sns_health_event.json +21 -0
  28. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/sns_health_event.yaml +43 -0
  29. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/sns_lambda_monitor.json +31 -0
  30. data/app/models/pager_tree/integrations/custom_webhook/v3_examples/sns_lambda_monitor.yaml +24 -0
  31. data/app/models/pager_tree/integrations/datadog/v3.rb +10 -3
  32. data/app/models/pager_tree/integrations/dynatrace/v3.rb +67 -0
  33. data/app/models/pager_tree/integrations/echoes_hq/v3.rb +138 -0
  34. data/app/models/pager_tree/integrations/elast_alert/v3.rb +24 -0
  35. data/app/models/pager_tree/integrations/email/v3.rb +272 -22
  36. data/app/models/pager_tree/integrations/email/v3_examples/example.yml +24 -0
  37. data/app/models/pager_tree/integrations/form/v3.rb +15 -3
  38. data/app/models/pager_tree/integrations/freshdesk/v3.rb +7 -5
  39. data/app/models/pager_tree/integrations/freshservice/v3.rb +7 -5
  40. data/app/models/pager_tree/integrations/grafana/v3.rb +2 -2
  41. data/app/models/pager_tree/integrations/hetrix_tools/v3.rb +160 -0
  42. data/app/models/pager_tree/integrations/honeybadger/v3.rb +1 -1
  43. data/app/models/pager_tree/integrations/hydrozen/v3.rb +6 -0
  44. data/app/models/pager_tree/integrations/integration.rb +52 -9
  45. data/app/models/pager_tree/integrations/jira_server/v3.rb +12 -2
  46. data/app/models/pager_tree/integrations/kapacitor/v3.rb +1 -1
  47. data/app/models/pager_tree/integrations/live_call_routing/twilio/v3.rb +257 -22
  48. data/app/models/pager_tree/integrations/logic_monitor/v3.rb +193 -3
  49. data/app/models/pager_tree/integrations/mattermost/outgoing_webhook/v3.rb +1 -1
  50. data/app/models/pager_tree/integrations/meta/workplace/v3.rb +230 -0
  51. data/app/models/pager_tree/integrations/new_relic/v3.rb +9 -5
  52. data/app/models/pager_tree/integrations/outgoing_event.rb +8 -0
  53. data/app/models/pager_tree/integrations/outgoing_webhook/v3.rb +108 -13
  54. data/app/models/pager_tree/integrations/outgoing_webhook_delivery/hook_relay.rb +43 -33
  55. data/app/models/pager_tree/integrations/outgoing_webhook_delivery.rb +6 -5
  56. data/app/models/pager_tree/integrations/prtg/v3.rb +2 -1
  57. data/app/models/pager_tree/integrations/pulsetic/v3.rb +70 -0
  58. data/app/models/pager_tree/integrations/scom/pagertree.ps1 +153 -0
  59. data/app/models/pager_tree/integrations/scom/v3.rb +58 -0
  60. data/app/models/pager_tree/integrations/sentry/v3.rb +477 -0
  61. data/app/models/pager_tree/integrations/server_guard24/v3.rb +1 -1
  62. data/app/models/pager_tree/integrations/sixty_six_uptime/v3.rb +118 -0
  63. data/app/models/pager_tree/integrations/slack/webhook/v3.rb +1 -1
  64. data/app/models/pager_tree/integrations/solar_winds/v3.rb +66 -2
  65. data/app/models/pager_tree/integrations/status_gator/v3.rb +69 -0
  66. data/app/models/pager_tree/integrations/uptime_kuma/v3.rb +76 -0
  67. data/app/models/pager_tree/integrations/uptime_robot/v3.rb +6 -0
  68. data/app/models/pager_tree/integrations/webhook/v3.rb +25 -7
  69. data/app/models/pager_tree/integrations/zabbix/v3.rb +95 -0
  70. data/app/models/pager_tree/integrations/zendesk/v3.rb +2 -0
  71. data/app/views/pager_tree/integrations/channel/hangouts/v3/_form_options.html.erb +7 -0
  72. data/app/views/pager_tree/integrations/channel/hangouts/v3/_show_options.html.erb +10 -0
  73. data/app/views/pager_tree/integrations/channel/microsoft_teams/v3/_form_options.html.erb +7 -0
  74. data/app/views/pager_tree/integrations/channel/microsoft_teams/v3/_show_options.html.erb +14 -0
  75. data/app/views/pager_tree/integrations/channel/microsoft_teams/v4/_form_options.html.erb +41 -0
  76. data/app/views/pager_tree/integrations/channel/microsoft_teams/v4/_show_options.html.erb +54 -0
  77. data/app/views/pager_tree/integrations/channel/slack/v3/_form_options.html.erb +6 -3
  78. data/app/views/pager_tree/integrations/channel/slack/v3/_show_options.html.erb +1 -1
  79. data/app/views/pager_tree/integrations/cloudflare/v3/_form_options.html.erb +7 -0
  80. data/app/views/pager_tree/integrations/cloudflare/v3/_show_options.html.erb +12 -0
  81. data/app/views/pager_tree/integrations/custom_webhook/v3/_form_options.html.erb +8 -0
  82. data/app/views/pager_tree/integrations/custom_webhook/v3/_show_options.html.erb +0 -0
  83. data/app/views/pager_tree/integrations/datadog/v3/_form_options.html.erb +7 -0
  84. data/app/views/pager_tree/integrations/datadog/v3/_show_options.html.erb +12 -0
  85. data/app/views/pager_tree/integrations/dynatrace/v3/_form_options.html.erb +0 -0
  86. data/app/views/pager_tree/integrations/dynatrace/v3/_show_options.html.erb +0 -0
  87. data/app/views/pager_tree/integrations/echoes_hq/v3/_form_options.html.erb +10 -0
  88. data/app/views/pager_tree/integrations/echoes_hq/v3/_show_options.html.erb +12 -0
  89. data/app/views/pager_tree/integrations/email/v3/_form_options.html.erb +41 -11
  90. data/app/views/pager_tree/integrations/email/v3/_show_options.html.erb +18 -0
  91. data/app/views/pager_tree/integrations/form/v3/_form_options.html.erb +1 -5
  92. data/app/views/pager_tree/integrations/hetrix_tools/v3/_form_options.html.erb +7 -0
  93. data/app/views/pager_tree/integrations/hetrix_tools/v3/_show_options.html.erb +12 -0
  94. data/app/views/pager_tree/integrations/hydrozen/v3/_form_options.html.erb +0 -0
  95. data/app/views/pager_tree/integrations/hydrozen/v3/_show_options.html.erb +0 -0
  96. data/app/views/pager_tree/integrations/live_call_routing/twilio/v3/_form_options.html.erb +44 -31
  97. data/app/views/pager_tree/integrations/live_call_routing/twilio/v3/_show_options.html.erb +93 -8
  98. data/app/views/pager_tree/integrations/logic_monitor/v3/_form_options.html.erb +31 -0
  99. data/app/views/pager_tree/integrations/logic_monitor/v3/_show_options.html.erb +60 -0
  100. data/app/views/pager_tree/integrations/meta/workplace/v3/_form_options.html.erb +44 -0
  101. data/app/views/pager_tree/integrations/meta/workplace/v3/_show_options.html.erb +68 -0
  102. data/app/views/pager_tree/integrations/outgoing_webhook/v3/_form_options.html.erb +17 -3
  103. data/app/views/pager_tree/integrations/outgoing_webhook/v3/_show_options.html.erb +20 -0
  104. data/app/views/pager_tree/integrations/pulsetic/v3/_form_options.html.erb +0 -0
  105. data/app/views/pager_tree/integrations/pulsetic/v3/_show_options.html.erb +0 -0
  106. data/app/views/pager_tree/integrations/scom/v3/_form_options.html.erb +0 -0
  107. data/app/views/pager_tree/integrations/scom/v3/_show_options.html.erb +0 -0
  108. data/app/views/pager_tree/integrations/sentry/v3/_form_options.html.erb +9 -0
  109. data/app/views/pager_tree/integrations/sentry/v3/_show_options.html.erb +15 -0
  110. data/app/views/pager_tree/integrations/sixty_six_uptime/v3/_form_options.html.erb +0 -0
  111. data/app/views/pager_tree/integrations/sixty_six_uptime/v3/_show_options.html.erb +0 -0
  112. data/app/views/pager_tree/integrations/solar_winds/v3/_form_options.html.erb +40 -0
  113. data/app/views/pager_tree/integrations/solar_winds/v3/_show_options.html.erb +66 -0
  114. data/app/views/pager_tree/integrations/status_gator/v3/_form_options.html.erb +13 -0
  115. data/app/views/pager_tree/integrations/status_gator/v3/_show_options.html.erb +24 -0
  116. data/app/views/pager_tree/integrations/uptime_kuma/v3/_form_options.html.erb +0 -0
  117. data/app/views/pager_tree/integrations/uptime_kuma/v3/_show_options.html.erb +0 -0
  118. data/app/views/pager_tree/integrations/webhook/v3/_form_options.html.erb +8 -0
  119. data/app/views/pager_tree/integrations/webhook/v3/_show_options.html.erb +15 -0
  120. data/app/views/pager_tree/integrations/zabbix/v3/_form_options.html.erb +7 -0
  121. data/app/views/pager_tree/integrations/zabbix/v3/_show_options.html.erb +12 -0
  122. data/config/locales/en.yml +158 -10
  123. data/config/routes.rb +1 -0
  124. data/lib/pager_tree/integrations/format_converters/yaml_json_converter.rb +67 -0
  125. data/lib/pager_tree/integrations/version.rb +1 -1
  126. data/lib/pager_tree/integrations.rb +11 -3
  127. metadata +84 -8
@@ -0,0 +1,69 @@
1
+ module PagerTree::Integrations
2
+ class StatusGator::V3 < Integration
3
+ OPTIONS = [
4
+ {key: :create_on_warn, type: :boolean, default: true},
5
+ {key: :create_on_maintenance, type: :boolean, default: true}
6
+ ]
7
+ store_accessor :options, *OPTIONS.map { |x| x[:key] }.map(&:to_s), prefix: "option"
8
+
9
+ after_initialize do
10
+ end
11
+
12
+ def adapter_supports_incoming?
13
+ true
14
+ end
15
+
16
+ def adapter_supports_outgoing?
17
+ false
18
+ end
19
+
20
+ def adapter_incoming_can_defer?
21
+ true
22
+ end
23
+
24
+ def adapter_thirdparty_id
25
+ adapter_incoming_request_params.dig("monitor", "id")
26
+ end
27
+
28
+ def adapter_action
29
+ state = adapter_incoming_request_params.dig("status")
30
+ if state == "down"
31
+ :create
32
+ elsif state == "up"
33
+ :resolve
34
+ elsif state == "maintenance" && option_create_on_maintenance == true
35
+ :create
36
+ elsif state == "warn" && option_create_on_warn == true
37
+ :create
38
+ else
39
+ :other
40
+ end
41
+ end
42
+
43
+ def adapter_process_create
44
+ Alert.new(
45
+ title: _title,
46
+ description: _description,
47
+ thirdparty_id: adapter_thirdparty_id,
48
+ additional_data: _additional_datums
49
+ )
50
+ end
51
+
52
+ private
53
+
54
+ def _title
55
+ adapter_incoming_request_params.dig("message")
56
+ end
57
+
58
+ def _description
59
+ adapter_incoming_request_params.dig("details")
60
+ end
61
+
62
+ def _additional_datums
63
+ [
64
+ AdditionalDatum.new(format: "text", label: "Monitor Name", value: adapter_incoming_request_params.dig("monitor", "display_name")),
65
+ AdditionalDatum.new(format: "datetime", label: "Recorded At", value: adapter_incoming_request_params.dig("recorded_at"))
66
+ ]
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,76 @@
1
+ module PagerTree::Integrations
2
+ class UptimeKuma::V3 < Integration
3
+ OPTIONS = []
4
+ store_accessor :options, *OPTIONS.map { |x| x[:key] }.map(&:to_s), prefix: "option"
5
+
6
+ after_initialize do
7
+ end
8
+
9
+ def adapter_supports_incoming?
10
+ true
11
+ end
12
+
13
+ def adapter_supports_outgoing?
14
+ false
15
+ end
16
+
17
+ def adapter_incoming_can_defer?
18
+ true
19
+ end
20
+
21
+ def adapter_thirdparty_id
22
+ adapter_incoming_request_params.dig("id")
23
+ end
24
+
25
+ def adapter_action
26
+ case adapter_incoming_request_params.dig("event_type")
27
+ when "create"
28
+ :create
29
+ when "resolve"
30
+ :resolve
31
+ else
32
+ :other
33
+ end
34
+ end
35
+
36
+ def adapter_process_create
37
+ Alert.new(
38
+ title: _title,
39
+ description: _description,
40
+ urgency: _urgency,
41
+ thirdparty_id: adapter_thirdparty_id,
42
+ tags: _tags,
43
+ additional_data: _additional_datums
44
+ )
45
+ end
46
+
47
+ private
48
+
49
+ def _title
50
+ adapter_incoming_request_params.dig("title")
51
+ end
52
+
53
+ def _description
54
+ adapter_incoming_request_params.dig("heartbeat", "msg")
55
+ end
56
+
57
+ def _tags
58
+ tags = adapter_incoming_request_params.dig("monitor", "tags")
59
+ Array(tags).map { |x| x["name"] }.compact_blank.map(&:to_s).uniq
60
+ end
61
+
62
+ def _urgency
63
+ text = adapter_incoming_request_params.dig("urgency")
64
+ matches = /(?<urgency>silent|low|medium|high|critical)/.match(text&.to_s&.downcase&.strip)
65
+ matches ? matches[:urgency].to_s : nil
66
+ end
67
+
68
+ def _additional_datums
69
+ [
70
+ AdditionalDatum.new(format: "link", label: "URL", value: adapter_incoming_request_params.dig("monitor", "url")),
71
+ AdditionalDatum.new(format: "text", label: "Method", value: adapter_incoming_request_params.dig("monitor", "method")),
72
+ AdditionalDatum.new(format: "datetime", label: "Time", value: adapter_incoming_request_params.dig("heartbeat", "time"))
73
+ ]
74
+ end
75
+ end
76
+ end
@@ -6,6 +6,12 @@ module PagerTree::Integrations
6
6
  after_initialize do
7
7
  end
8
8
 
9
+ # SPECIAL: override integration endpoint with the get endpoint and the query string starter
10
+ # uptime robot doesn't handle this, so we have to do it ourselves
11
+ def endpoint
12
+ super + "/g?"
13
+ end
14
+
9
15
  def adapter_supports_incoming?
10
16
  true
11
17
  end
@@ -1,18 +1,22 @@
1
+ require "jmespath"
2
+
1
3
  module PagerTree::Integrations
2
4
  class Webhook::V3 < Integration
3
5
  OPTIONS = [
4
6
  {key: :token, type: :string, default: nil},
5
- {key: :capture_additional_data, type: :boolean, default: false}
7
+ {key: :capture_additional_data, type: :boolean, default: false},
8
+ {key: :wrapper_key, type: :string, default: nil}
6
9
  ]
7
10
  store_accessor :options, *OPTIONS.map { |x| x[:key] }.map(&:to_s), prefix: "option"
8
11
 
9
12
  after_initialize do
10
13
  self.option_token ||= nil
11
14
  self.option_capture_additional_data ||= false
15
+ self.option_wrapper_key ||= nil
12
16
  end
13
17
 
14
18
  def adapter_should_block_incoming?(request)
15
- self.option_token.present? && (request.headers["pagertree-token"] != self.option_token)
19
+ option_token.present? && (request.headers["pagertree-token"] != option_token)
16
20
  end
17
21
 
18
22
  def adapter_supports_incoming?
@@ -28,13 +32,15 @@ module PagerTree::Integrations
28
32
  end
29
33
 
30
34
  def adapter_thirdparty_id
31
- _adapter_incoming_request_params.dig("id")
35
+ @adapter_thirdparty_id ||= _adapter_incoming_request_params.dig("id") || SecureRandom.uuid
32
36
  end
33
37
 
34
38
  def adapter_action
35
39
  case _adapter_incoming_request_params.dig("event_type").to_s.downcase.strip
36
40
  when "create"
37
41
  :create
42
+ when "acknowledge"
43
+ :acknowledge
38
44
  when "resolve"
39
45
  :resolve
40
46
  else
@@ -74,8 +80,9 @@ module PagerTree::Integrations
74
80
  end
75
81
 
76
82
  def _urgency
77
- urgency = _adapter_incoming_request_params.dig("urgency")
78
- urgency&.to_s&.downcase&.strip
83
+ text = _adapter_incoming_request_params.dig("urgency")
84
+ matches = /(?<urgency>low|medium|high|critical)/.match(text&.to_s&.downcase&.strip)
85
+ matches ? matches[:urgency].to_s : nil
79
86
  end
80
87
 
81
88
  def _incident
@@ -96,7 +103,7 @@ module PagerTree::Integrations
96
103
  end
97
104
 
98
105
  def _additional_datums
99
- if self.option_capture_additional_data == true
106
+ if option_capture_additional_data == true
100
107
  _adapter_incoming_request_params.except(
101
108
  "id", "title", "description", "urgency", "tags", "meta", "event_type", "pagertree_integration_id", "dedup_keys"
102
109
  ).map do |key, value|
@@ -112,7 +119,18 @@ module PagerTree::Integrations
112
119
  end
113
120
 
114
121
  def _adapter_incoming_request_params
115
- adapter_incoming_request_params.transform_keys(&:downcase)
122
+ params = adapter_incoming_request_params || {}
123
+ if option_wrapper_key.present?
124
+ begin
125
+ wrapped = JMESPath.search(option_wrapper_key, params)
126
+ params = wrapped if wrapped.is_a?(Hash)
127
+ rescue JMESPath::Errors::Error
128
+ # Log the error or fall back to original params
129
+ adapter_source_log&.sublog("Invalid JMESPath expression in wrapper_key: #{option_wrapper_key}")
130
+ Rails.logger.warn("Integration #{id} Invalid JMESPath expression in wrapper_key: #{option_wrapper_key}")
131
+ end
132
+ end
133
+ params.transform_keys(&:downcase)
116
134
  end
117
135
  end
118
136
  end
@@ -0,0 +1,95 @@
1
+ module PagerTree::Integrations
2
+ class Zabbix::V3 < Integration
3
+ OPTIONS = [
4
+ {key: :map_urgency, type: :boolean, default: false}
5
+ ]
6
+ store_accessor :options, *OPTIONS.map { |x| x[:key] }.map(&:to_s), prefix: "option"
7
+
8
+ validates :option_map_urgency, inclusion: {in: [true, false]}
9
+
10
+ after_initialize do
11
+ self.option_map_urgency ||= false
12
+ end
13
+
14
+ def adapter_supports_incoming?
15
+ true
16
+ end
17
+
18
+ def adapter_supports_outgoing?
19
+ false
20
+ end
21
+
22
+ def adapter_incoming_can_defer?
23
+ true
24
+ end
25
+
26
+ def adapter_thirdparty_id
27
+ adapter_incoming_request_params.dig("trigger_id").presence || adapter_incoming_request_params.dig("event_id").presence || ULID.generate
28
+ end
29
+
30
+ def adapter_action
31
+ case adapter_incoming_request_params.dig("event_value")
32
+ when "{EVENT.VALUE}" then :create # testing scenario
33
+ when "1" then :create
34
+ when "0" then :resolve
35
+ else :other
36
+ end
37
+ end
38
+
39
+ def adapter_process_create
40
+ Alert.new(
41
+ title: _title,
42
+ description: _description,
43
+ urgency: _urgency,
44
+ thirdparty_id: adapter_thirdparty_id,
45
+ dedup_keys: [],
46
+ tags: _tags,
47
+ additional_data: _additional_datums
48
+ )
49
+ end
50
+
51
+ private
52
+
53
+ def _title
54
+ adapter_incoming_request_params.dig("title")
55
+ end
56
+
57
+ def _description
58
+ ["<pre>", adapter_incoming_request_params.dig("description"), "</pre>"].join
59
+ end
60
+
61
+ def _urgency
62
+ if option_map_urgency == true
63
+ case adapter_incoming_request_params.dig("event_nseverity")
64
+ when "0" then "silent" # Not Classified
65
+ when "1" then "low" # Information
66
+ when "2" then "medium" # Warning
67
+ when "3" then "medium" # Average
68
+ when "4" then "high" # High
69
+ when "5" then "critical" # Disaster
70
+ end
71
+ end
72
+ end
73
+
74
+ def _tags
75
+ (adapter_incoming_request_params.dig("event_tags") || "").split(",").map(&:strip).uniq.compact
76
+ end
77
+
78
+ def _additional_datums
79
+ [
80
+ AdditionalDatum.new(format: "link", label: "Zabbix URL", value: _zabbix_url)
81
+ ]
82
+ end
83
+
84
+ def _zabbix_url
85
+ event_source = adapter_incoming_request_params.dig("event_source")
86
+ url = adapter_incoming_request_params.dig("zabbix_url")
87
+
88
+ if event_source == "0"
89
+ url = "#{url}/tr_events.php?triggerid=#{adapter_incoming_request_params.dig("trigger_id")}&eventid=#{adapter_incoming_request_params.dig("event_id")}"
90
+ end
91
+
92
+ url
93
+ end
94
+ end
95
+ end
@@ -26,6 +26,8 @@ module PagerTree::Integrations
26
26
  case adapter_incoming_request_params.dig("event_type")
27
27
  when "create"
28
28
  :create
29
+ when "acknowledge"
30
+ :acknowledge
29
31
  when "resolve"
30
32
  :resolve
31
33
  else
@@ -5,9 +5,16 @@
5
5
  <p class="form-hint"><%== t("pager_tree.integrations.common.option_incoming_webhook_url_hint_html") %></p>
6
6
  </div>
7
7
 
8
+ <div class="form-group group">
9
+ <%= form.check_box :option_thread_same_alert, class: "form-checkbox mr-1" %>
10
+ <%= form.label :option_thread_same_alert, class: "inline-block" %>
11
+ <p class="form-hint inline-block"><%== t(".option_thread_same_alert_hint_html") %></p>
12
+ </div>
13
+
8
14
  <%
9
15
  opts = [
10
16
  :alert_open,
17
+ :alert_assigned,
11
18
  :alert_acknowledged,
12
19
  :alert_resolved,
13
20
  :alert_dropped,
@@ -11,9 +11,19 @@
11
11
  </dd>
12
12
  </div>
13
13
 
14
+ <div class="sm:col-span-1">
15
+ <dt class="text-sm font-medium text-gray-500">
16
+ <%= t("activerecord.attributes.pager_tree/integrations/channel/hangouts/v3.option_thread_same_alert") %>
17
+ </dt>
18
+ <dd class="mt-1 text-sm text-gray-900">
19
+ <%= render partial: "shared/components/badge_enabled", locals: { enabled: integration.option_thread_same_alert } %>
20
+ </dd>
21
+ </div>
22
+
14
23
  <%
15
24
  opts = [
16
25
  :alert_open,
26
+ :alert_assigned,
17
27
  :alert_acknowledged,
18
28
  :alert_resolved,
19
29
  :alert_dropped,
@@ -5,12 +5,19 @@
5
5
  <p class="form-hint"><%== t("pager_tree.integrations.common.option_incoming_webhook_url_hint_html") %></p>
6
6
  </div>
7
7
 
8
+ <div class="form-group group md:col-span-3" data-controller="select">
9
+ <%= form.label :option_time_zone %>
10
+ <%= form.time_zone_select :option_time_zone, nil, {default: "UTC"}, { class: "form-control", data: { select_target: "select" }} %>
11
+ <p class="form-hint"><%== t(".option_time_zone_hint_html") %></p>
12
+ </div>
13
+
8
14
  <%
9
15
  opts = [
10
16
  :alert_open,
11
17
  :alert_acknowledged,
12
18
  :alert_resolved,
13
19
  :alert_dropped,
20
+ :compact_message,
14
21
  ]
15
22
  %>
16
23
  <% opts.each do |opt| %>
@@ -11,12 +11,26 @@
11
11
  </dd>
12
12
  </div>
13
13
 
14
+ <div class="sm:col-span-2">
15
+ <dt class="text-sm font-medium text-gray-500">
16
+ <%= t("activerecord.attributes.pager_tree/integrations/channel/microsoft_teams/v3.option_time_zone") %>
17
+ </dt>
18
+ <dd class="mt-1 text-sm text-gray-900">
19
+ <div class="flex items-center gap-2">
20
+ <p class="text-sm truncate">
21
+ <%= integration.option_time_zone %>
22
+ </p>
23
+ </div>
24
+ </dd>
25
+ </div>
26
+
14
27
  <%
15
28
  opts = [
16
29
  :alert_open,
17
30
  :alert_acknowledged,
18
31
  :alert_resolved,
19
32
  :alert_dropped,
33
+ :compact_message,
20
34
  ]
21
35
  %>
22
36
  <% opts.each do |opt| %>
@@ -0,0 +1,41 @@
1
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
2
+ <div class="form-group group md:col-span-3">
3
+ <%= form.label :option_incoming_webhook_url %>
4
+ <%= form.text_field :option_incoming_webhook_url, class: "form-control" %>
5
+ <p class="form-hint"><%== t("pager_tree.integrations.common.option_incoming_webhook_url_hint_html") %></p>
6
+ </div>
7
+
8
+ <div class="form-group group md:col-span-3" data-controller="select">
9
+ <%= form.label :option_time_zone %>
10
+ <%= form.time_zone_select :option_time_zone, nil, {default: "UTC"}, { class: "form-control", data: { select_target: "select" }} %>
11
+ <p class="form-hint"><%== t(".option_time_zone_hint_html") %></p>
12
+ </div>
13
+
14
+ <%
15
+ opts = [
16
+ :alert_open,
17
+ :alert_acknowledged,
18
+ :alert_resolved,
19
+ :alert_dropped,
20
+ :compact_message,
21
+ ]
22
+ %>
23
+ <% opts.each do |opt| %>
24
+ <div class="form-group group">
25
+ <%= form.check_box "option_#{opt.to_s}".to_sym, class: "form-checkbox" %>
26
+ <%= form.label "option_#{opt.to_s}".to_sym, class: "inline-block" %>
27
+ <p class="form-hint md:inline-block"><%== t("pager_tree.integrations.common.option_#{opt.to_s}_hint_html") %></p>
28
+ </div>
29
+ <% end %>
30
+
31
+ </div>
32
+
33
+
34
+ <div class="grid grid-cols-1 gap-4">
35
+ <%= tag.div class: "form-group group", data: {controller: "code-editor", code_editor_language_value: "yaml", code_editor_read_only_value: false } do %>
36
+ <%= form.label :option_outgoing_rules, t("pager_tree.integrations.common.option_outgoing_rules") %>
37
+ <%= form.hidden_field :option_outgoing_rules, class: "form-control", data: {code_editor_target: "form"} %>
38
+ <%= tag.div class: "h-96", data: {code_editor_target: "editor"} do %><%= form.object.option_outgoing_rules %><% end %>
39
+ <p class="form-hint"><%== t("pager_tree.integrations.common.option_outgoing_rules_hint_html") %></p>
40
+ <% end %>
41
+ </div>
@@ -0,0 +1,54 @@
1
+ <div class="sm:col-span-2">
2
+ <dt class="text-sm font-medium text-gray-500">
3
+ <%= t("activerecord.attributes.pager_tree/integrations/integration.option_incoming_webhook_url") %>
4
+ </dt>
5
+ <dd class="mt-1 text-sm text-gray-900">
6
+ <div class="flex items-center gap-2">
7
+ <p class="text-sm truncate">
8
+ <%= integration.option_incoming_webhook_url %>
9
+ </p>
10
+ </div>
11
+ </dd>
12
+ </div>
13
+
14
+ <div class="sm:col-span-2">
15
+ <dt class="text-sm font-medium text-gray-500">
16
+ <%= t("activerecord.attributes.pager_tree/integrations/channel/microsoft_teams/v3.option_time_zone") %>
17
+ </dt>
18
+ <dd class="mt-1 text-sm text-gray-900">
19
+ <div class="flex items-center gap-2">
20
+ <p class="text-sm truncate">
21
+ <%= integration.option_time_zone %>
22
+ </p>
23
+ </div>
24
+ </dd>
25
+ </div>
26
+
27
+ <%
28
+ opts = [
29
+ :alert_open,
30
+ :alert_acknowledged,
31
+ :alert_resolved,
32
+ :alert_dropped,
33
+ :compact_message,
34
+ ]
35
+ %>
36
+ <% opts.each do |opt| %>
37
+ <div class="sm:col-span-1">
38
+ <dt class="text-sm font-medium text-gray-500">
39
+ <%= t("activerecord.attributes.pager_tree/integrations/integration.option_#{opt.to_s}") %>
40
+ </dt>
41
+ <dd class="mt-1 text-sm text-gray-900">
42
+ <%= render partial: "shared/components/badge_enabled", locals: { enabled: integration.send("option_#{opt.to_s}") } %>
43
+ </dd>
44
+ </div>
45
+ <% end %>
46
+
47
+ <div class="sm:col-span-1">
48
+ <dt class="text-sm font-medium text-gray-500">
49
+ <%= t("pager_tree.integrations.common.option_outgoing_rules") %>
50
+ </dt>
51
+ <dd class="mt-1 text-sm text-gray-900">
52
+ <%= render partial: "shared/components/badge_enabled", locals: { enabled: integration.option_outgoing_rules.present? } %>
53
+ </dd>
54
+ </div>
@@ -1,8 +1,11 @@
1
1
  <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
2
- <div class="form-group group md:col-span-3">
2
+ <div class="form-group group md:col-span-3" data-controller="password-visibility">
3
3
  <%= form.label :option_incoming_webhook_url %>
4
- <%= form.text_field :option_incoming_webhook_url, class: "form-control" %>
5
- <p class="form-hint"><%== t("pager_tree.integrations.common.option_incoming_webhook_url_hint_html") %></p>
4
+ <%= form.password_field :option_incoming_webhook_url, value: form.object.option_incoming_webhook_url, class: "form-control", data: { password_visibility_target: "input"} %>
5
+ <div class="flex justify-between">
6
+ <p class="form-hint"><%== t("pager_tree.integrations.common.option_incoming_webhook_url_hint_html") %></p>
7
+ <%= render partial: "shared/password_visibility_button" %>
8
+ </div>
6
9
  </div>
7
10
 
8
11
  <%
@@ -5,7 +5,7 @@
5
5
  <dd class="mt-1 text-sm text-gray-900">
6
6
  <div class="flex items-center gap-2">
7
7
  <p class="text-sm truncate">
8
- <%= integration.option_incoming_webhook_url %>
8
+ <%= mask integration.option_incoming_webhook_url %>
9
9
  </p>
10
10
  </div>
11
11
  </dd>
@@ -0,0 +1,7 @@
1
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
2
+ <div class="form-group">
3
+ <%= form.label :option_webhook_secret %>
4
+ <%= form.text_field :option_webhook_secret, class: "form-control" %>
5
+ <p class="form-hint"><%== t(".option_webhook_secret_hint_html") %></p>
6
+ </div>
7
+ </div>
@@ -0,0 +1,12 @@
1
+ <div class="sm:col-span-2">
2
+ <dt class="text-sm font-medium text-gray-500">
3
+ <%= t("activerecord.attributes.pager_tree/integrations/cloudflare/v3.option_webhook_secret") %>
4
+ </dt>
5
+ <dd class="mt-1 text-sm text-gray-900">
6
+ <div class="flex items-center gap-2">
7
+ <p class="text-sm truncate">
8
+ <%= mask integration.option_webhook_secret %>
9
+ </p>
10
+ </div>
11
+ </dd>
12
+ </div>
@@ -0,0 +1,8 @@
1
+ <div class="grid grid-cols-1 gap-4">
2
+ <%= tag.div class: "form-group group", data: {controller: "code-editor", code_editor_language_value: "yaml", code_editor_read_only_value: false } do %>
3
+ <%= form.label :option_custom_definition %>
4
+ <%= form.hidden_field :option_custom_definition, class: "form-control", data: {code_editor_target: "form"} %>
5
+ <%= tag.div class: "h-96", data: {code_editor_target: "editor"} do %><%= form.object.option_custom_definition %><% end %>
6
+ <p class="form-hint"><%== t(".option_custom_definition_hint_html") %></p>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="grid grid-cols-1 gap-4">
2
+ <div class="form-group group">
3
+ <%= form.check_box :option_support_retriggered_event, class: "form-checkbox" %>
4
+ <%= form.label :option_support_retriggered_event, class: "inline-block" %>
5
+ <p class="form-hint md:inline-block"><%== t(".option_support_retriggered_event_hint_html") %></p>
6
+ </div>
7
+ </div>
@@ -0,0 +1,12 @@
1
+ <div class="sm:col-span-1">
2
+ <dt class="text-sm font-medium text-gray-500">
3
+ <%= t("activerecord.attributes.pager_tree/integrations/datadog/v3.option_support_retriggered_event") %>
4
+ </dt>
5
+ <dd class="mt-1 text-sm text-gray-900">
6
+ <div class="flex items-center gap-2">
7
+ <p class="text-sm truncate">
8
+ <%= render partial: "shared/components/badge_enabled", locals: { enabled: integration.option_support_retriggered_event } %>
9
+ </p>
10
+ </div>
11
+ </dd>
12
+ </div>
@@ -0,0 +1,10 @@
1
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
2
+ <div class="form-group group" data-controller="password-visibility">
3
+ <%= form.label :option_api_key %>
4
+ <%= form.password_field :option_api_key, value: form.object.option_api_key, class: "form-control", data: { password_visibility_target: "input"} %>
5
+ <div class="flex justify-between">
6
+ <p class="form-hint"><%== t(".option_api_key_hint_html") %></p>
7
+ <%= render partial: "shared/password_visibility_button" %>
8
+ </div>
9
+ </div>
10
+ </div>
@@ -0,0 +1,12 @@
1
+ <div class="sm:col-span-2">
2
+ <dt class="text-sm font-medium text-gray-500">
3
+ <%= t("activerecord.attributes.pager_tree/integrations/echoes_hq/v3.option_api_key") %>
4
+ </dt>
5
+ <dd class="mt-1 text-sm text-gray-900">
6
+ <div class="flex items-center gap-2">
7
+ <p class="text-sm truncate">
8
+ <%= mask integration.option_api_key %>
9
+ </p>
10
+ </div>
11
+ </dd>
12
+ </div>