pager_tree-integrations 1.0.1 → 1.1.0

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 (132) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/pager_tree/integrations/alert.rb +3 -1
  3. data/app/models/pager_tree/integrations/app_dynamics/v3.rb +74 -0
  4. data/app/models/pager_tree/integrations/auvik/v3.rb +94 -0
  5. data/app/models/pager_tree/integrations/aws_cloudwatch/v3.rb +108 -0
  6. data/app/models/pager_tree/integrations/azure_monitor/v3.rb +79 -0
  7. data/app/models/pager_tree/integrations/boolean_store_accessor.rb +42 -0
  8. data/app/models/pager_tree/integrations/channel/hangouts/v3.rb +176 -0
  9. data/app/models/pager_tree/integrations/channel/mattermost/v3.rb +6 -0
  10. data/app/models/pager_tree/integrations/channel/microsoft_teams/v3.rb +142 -0
  11. data/app/models/pager_tree/integrations/channel/slack/v3.rb +136 -0
  12. data/app/models/pager_tree/integrations/cronitor/v3.rb +64 -0
  13. data/app/models/pager_tree/integrations/datadog/v3.rb +72 -0
  14. data/app/models/pager_tree/integrations/dead_mans_snitch/v3.rb +76 -0
  15. data/app/models/pager_tree/integrations/elast_alert/v3.rb +63 -0
  16. data/app/models/pager_tree/integrations/form/v3.rb +114 -0
  17. data/app/models/pager_tree/integrations/freshdesk/v3.rb +103 -0
  18. data/app/models/pager_tree/integrations/freshservice/v3.rb +103 -0
  19. data/app/models/pager_tree/integrations/grafana/v3.rb +67 -0
  20. data/app/models/pager_tree/integrations/healthchecks/v3.rb +68 -0
  21. data/app/models/pager_tree/integrations/honeybadger/v3.rb +76 -0
  22. data/app/models/pager_tree/integrations/hyperping/v3.rb +60 -0
  23. data/app/models/pager_tree/integrations/integration.rb +27 -5
  24. data/app/models/pager_tree/integrations/jira_server/v3.rb +61 -0
  25. data/app/models/pager_tree/integrations/jotform/v3.rb +50 -0
  26. data/app/models/pager_tree/integrations/kapacitor/v3.rb +65 -0
  27. data/app/models/pager_tree/integrations/logic_monitor/v3.rb +79 -0
  28. data/app/models/pager_tree/integrations/mattermost/outgoing_webhook/v3.rb +77 -0
  29. data/app/models/pager_tree/integrations/new_relic/v3.rb +67 -0
  30. data/app/models/pager_tree/integrations/outgoing_event.rb +2 -0
  31. data/app/models/pager_tree/integrations/outgoing_webhook/v3.rb +37 -6
  32. data/app/models/pager_tree/integrations/outgoing_webhook_delivery/hook_relay.rb +8 -6
  33. data/app/models/pager_tree/integrations/outgoing_webhook_delivery.rb +1 -1
  34. data/app/models/pager_tree/integrations/pingdom/v3.rb +71 -0
  35. data/app/models/pager_tree/integrations/prometheus/v3.rb +79 -0
  36. data/app/models/pager_tree/integrations/prtg/v3.rb +58 -0
  37. data/app/models/pager_tree/integrations/server_guard24/v3.rb +74 -0
  38. data/app/models/pager_tree/integrations/site24x7/v3.rb +68 -0
  39. data/app/models/pager_tree/integrations/solar_winds/v3.rb +77 -0
  40. data/app/models/pager_tree/integrations/stackdriver/v3.rb +60 -0
  41. data/app/models/pager_tree/integrations/status_cake/v3.rb +65 -0
  42. data/app/models/pager_tree/integrations/twilio/incoming_sms/v3.rb +78 -0
  43. data/app/models/pager_tree/integrations/typeform/v3.rb +43 -0
  44. data/app/models/pager_tree/integrations/uptime/v3.rb +68 -0
  45. data/app/models/pager_tree/integrations/uptime_robot/v3.rb +79 -0
  46. data/app/models/pager_tree/integrations/webhook/v3.rb +112 -0
  47. data/app/models/pager_tree/integrations/zendesk/v3.rb +83 -0
  48. data/app/views/pager_tree/integrations/app_dynamics/v3/_form_options.html.erb +0 -0
  49. data/app/views/pager_tree/integrations/app_dynamics/v3/_show_options.html.erb +0 -0
  50. data/app/views/pager_tree/integrations/auvik/v3/_form_options.html.erb +0 -0
  51. data/app/views/pager_tree/integrations/auvik/v3/_show_options.html.erb +0 -0
  52. data/app/views/pager_tree/integrations/aws_cloudwatch/v3/_form_options.html.erb +0 -0
  53. data/app/views/pager_tree/integrations/aws_cloudwatch/v3/_show_options.html.erb +0 -0
  54. data/app/views/pager_tree/integrations/azure_monitor/v3/_form_options.html.erb +0 -0
  55. data/app/views/pager_tree/integrations/azure_monitor/v3/_show_options.html.erb +0 -0
  56. data/app/views/pager_tree/integrations/channel/hangouts/v3/_form_options.html.erb +34 -0
  57. data/app/views/pager_tree/integrations/channel/hangouts/v3/_show_options.html.erb +40 -0
  58. data/app/views/pager_tree/integrations/channel/mattermost/v3/_form_options.html.erb +1 -0
  59. data/app/views/pager_tree/integrations/channel/mattermost/v3/_show_options.html.erb +1 -0
  60. data/app/views/pager_tree/integrations/channel/microsoft_teams/v3/_form_options.html.erb +34 -0
  61. data/app/views/pager_tree/integrations/channel/microsoft_teams/v3/_show_options.html.erb +40 -0
  62. data/app/views/pager_tree/integrations/channel/slack/v3/_form_options.html.erb +34 -0
  63. data/app/views/pager_tree/integrations/channel/slack/v3/_show_options.html.erb +40 -0
  64. data/app/views/pager_tree/integrations/cronitor/v3/_form_options.html.erb +0 -0
  65. data/app/views/pager_tree/integrations/cronitor/v3/_show_options.html.erb +0 -0
  66. data/app/views/pager_tree/integrations/datadog/v3/_form_options.html.erb +0 -0
  67. data/app/views/pager_tree/integrations/datadog/v3/_show_options.html.erb +0 -0
  68. data/app/views/pager_tree/integrations/dead_mans_snitch/v3/_form_options.html.erb +0 -0
  69. data/app/views/pager_tree/integrations/dead_mans_snitch/v3/_show_options.html.erb +0 -0
  70. data/app/views/pager_tree/integrations/elast_alert/v3/_form_options.html.erb +0 -0
  71. data/app/views/pager_tree/integrations/elast_alert/v3/_show_options.html.erb +0 -0
  72. data/app/views/pager_tree/integrations/form/v3/_form_options.html.erb +64 -0
  73. data/app/views/pager_tree/integrations/form/v3/_show_options.html.erb +122 -0
  74. data/app/views/pager_tree/integrations/freshdesk/v3/_form_options.html.erb +0 -0
  75. data/app/views/pager_tree/integrations/freshdesk/v3/_show_options.html.erb +0 -0
  76. data/app/views/pager_tree/integrations/freshservice/v3/_form_options.html.erb +0 -0
  77. data/app/views/pager_tree/integrations/freshservice/v3/_show_options.html.erb +0 -0
  78. data/app/views/pager_tree/integrations/grafana/v3/_form_options.html.erb +0 -0
  79. data/app/views/pager_tree/integrations/grafana/v3/_show_options.html.erb +0 -0
  80. data/app/views/pager_tree/integrations/healthchecks/v3/_form_options.html.erb +0 -0
  81. data/app/views/pager_tree/integrations/healthchecks/v3/_show_options.html.erb +0 -0
  82. data/app/views/pager_tree/integrations/honeybadger/v3/_form_options.html.erb +7 -0
  83. data/app/views/pager_tree/integrations/honeybadger/v3/_show_options.html.erb +12 -0
  84. data/app/views/pager_tree/integrations/hyperping/v3/_form_options.html.erb +0 -0
  85. data/app/views/pager_tree/integrations/hyperping/v3/_show_options.html.erb +0 -0
  86. data/app/views/pager_tree/integrations/jira_server/v3/_form_options.html.erb +7 -0
  87. data/app/views/pager_tree/integrations/jira_server/v3/_show_options.html.erb +12 -0
  88. data/app/views/pager_tree/integrations/jotform/v3/_form_options.html.erb +0 -0
  89. data/app/views/pager_tree/integrations/jotform/v3/_show_options.html.erb +0 -0
  90. data/app/views/pager_tree/integrations/kapacitor/v3/_form_options.html.erb +0 -0
  91. data/app/views/pager_tree/integrations/kapacitor/v3/_show_options.html.erb +0 -0
  92. data/app/views/pager_tree/integrations/logic_monitor/v3/_form_options.html.erb +0 -0
  93. data/app/views/pager_tree/integrations/logic_monitor/v3/_show_options.html.erb +0 -0
  94. data/app/views/pager_tree/integrations/mattermost/outgoing_webhook/v3/_form_options.html.erb +7 -0
  95. data/app/views/pager_tree/integrations/mattermost/outgoing_webhook/v3/_show_options.html.erb +12 -0
  96. data/app/views/pager_tree/integrations/new_relic/v3/_form_options.html.erb +0 -0
  97. data/app/views/pager_tree/integrations/new_relic/v3/_show_options.html.erb +0 -0
  98. data/app/views/pager_tree/integrations/outgoing_webhook/v3/_form_options.html.erb +12 -4
  99. data/app/views/pager_tree/integrations/outgoing_webhook/v3/_show_options.html.erb +20 -2
  100. data/app/views/pager_tree/integrations/pingdom/v3/_form_options.html.erb +0 -0
  101. data/app/views/pager_tree/integrations/pingdom/v3/_show_options.html.erb +0 -0
  102. data/app/views/pager_tree/integrations/prometheus/v3/_form_options.html.erb +0 -0
  103. data/app/views/pager_tree/integrations/prometheus/v3/_show_options.html.erb +0 -0
  104. data/app/views/pager_tree/integrations/prtg/v3/_form_options.html.erb +0 -0
  105. data/app/views/pager_tree/integrations/prtg/v3/_show_options.html.erb +0 -0
  106. data/app/views/pager_tree/integrations/server_guard24/v3/_form_options.html.erb +7 -0
  107. data/app/views/pager_tree/integrations/server_guard24/v3/_show_options.html.erb +12 -0
  108. data/app/views/pager_tree/integrations/site24x7/v3/_form_options.html.erb +0 -0
  109. data/app/views/pager_tree/integrations/site24x7/v3/_show_options.html.erb +0 -0
  110. data/app/views/pager_tree/integrations/solar_winds/v3/_form_options.html.erb +0 -0
  111. data/app/views/pager_tree/integrations/solar_winds/v3/_show_options.html.erb +0 -0
  112. data/app/views/pager_tree/integrations/stackdriver/v3/_form_options.html.erb +0 -0
  113. data/app/views/pager_tree/integrations/stackdriver/v3/_show_options.html.erb +0 -0
  114. data/app/views/pager_tree/integrations/status_cake/v3/_form_options.html.erb +0 -0
  115. data/app/views/pager_tree/integrations/status_cake/v3/_show_options.html.erb +0 -0
  116. data/app/views/pager_tree/integrations/twilio/incoming_sms/v3/_form_options.html.erb +0 -0
  117. data/app/views/pager_tree/integrations/twilio/incoming_sms/v3/_show_options.html.erb +0 -0
  118. data/app/views/pager_tree/integrations/typeform/v3/_form_options.html.erb +0 -0
  119. data/app/views/pager_tree/integrations/typeform/v3/_show_options.html.erb +0 -0
  120. data/app/views/pager_tree/integrations/uptime/v3/_form_options.html.erb +0 -0
  121. data/app/views/pager_tree/integrations/uptime/v3/_show_options.html.erb +0 -0
  122. data/app/views/pager_tree/integrations/uptime_robot/v3/_form_options.html.erb +0 -0
  123. data/app/views/pager_tree/integrations/uptime_robot/v3/_show_options.html.erb +0 -0
  124. data/app/views/pager_tree/integrations/webhook/v3/_form_options.html.erb +15 -0
  125. data/app/views/pager_tree/integrations/webhook/v3/_show_options.html.erb +26 -0
  126. data/app/views/pager_tree/integrations/zendesk/v3/_form_options.html.erb +0 -0
  127. data/app/views/pager_tree/integrations/zendesk/v3/_show_options.html.erb +0 -0
  128. data/config/locales/en.yml +83 -23
  129. data/lib/generators/integration/integration_generator.rb +2 -1
  130. data/lib/generators/integration/templates/model.rb.tt +16 -6
  131. data/lib/pager_tree/integrations/version.rb +1 -1
  132. metadata +121 -3
@@ -0,0 +1,65 @@
1
+ module PagerTree::Integrations
2
+ class Kapacitor::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
+ adapter_incoming_request_params.dig("level") == "OK" ? :resolve : :create
27
+ end
28
+
29
+ def adapter_process_create
30
+ Alert.new(
31
+ title: _title,
32
+ description: _description,
33
+ urgency: _urgency,
34
+ thirdparty_id: adapter_thirdparty_id,
35
+ dedup_keys: [adapter_thirdparty_id],
36
+ additional_data: _additional_datums
37
+ )
38
+ end
39
+
40
+ private
41
+
42
+ def _title
43
+ adapter_incoming_request_params.dig("message")
44
+ end
45
+
46
+ def _description
47
+ adapter_incoming_request_params.dig("details")
48
+ end
49
+
50
+ def _urgency
51
+ case adapter_incoming_request_params.dig("level")
52
+ when "INFO"
53
+ "low"
54
+ when "WARN"
55
+ "medium"
56
+ when "CRITICAL"
57
+ "critical"
58
+ end
59
+ end
60
+
61
+ def _additional_datums
62
+ []
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,79 @@
1
+ module PagerTree::Integrations
2
+ class LogicMonitor::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("alertid")
23
+ end
24
+
25
+ def adapter_action
26
+ alert_status = adapter_incoming_request_params.dig("alertstatus")
27
+ case alert_status
28
+ when "active", "test"
29
+ :create
30
+ # when "ack"
31
+ # :acknowledge
32
+ when "clear"
33
+ :resolve
34
+ else
35
+ :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: [adapter_thirdparty_id],
46
+ additional_data: _additional_datums
47
+ )
48
+ end
49
+
50
+ private
51
+
52
+ def _title
53
+ adapter_incoming_request_params.dig("eventmsg")
54
+ end
55
+
56
+ def _description
57
+ adapter_incoming_request_params.dig("eventlogmsg")
58
+ end
59
+
60
+ def _urgency
61
+ level = adapter_incoming_request_params.dig("level").to_s.downcase
62
+ case level
63
+ when "warn", "warning"
64
+ "medium"
65
+ when "error"
66
+ "high"
67
+ when "critical"
68
+ "critical"
69
+ end
70
+ end
71
+
72
+ def _additional_datums
73
+ [
74
+ AdditionalDatum.new(format: "text", label: "Host", value: adapter_incoming_request_params.dig("host")),
75
+ AdditionalDatum.new(format: "text", label: "Service", value: adapter_incoming_request_params.dig("service"))
76
+ ]
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,77 @@
1
+ module PagerTree::Integrations
2
+ class Mattermost::OutgoingWebhook::V3 < Integration
3
+ OPTIONS = [
4
+ {key: :token, type: :string, default: nil}
5
+ ]
6
+ store_accessor :options, *OPTIONS.map { |x| x[:key] }.map(&:to_s), prefix: "option"
7
+
8
+ after_initialize do
9
+ self.option_token ||= nil
10
+ end
11
+
12
+ def adapter_should_block_incoming?(request)
13
+ self.option_token.present? && (request.params["token"] != self.option_token)
14
+ end
15
+
16
+ def adapter_supports_incoming?
17
+ true
18
+ end
19
+
20
+ def adapter_supports_outgoing?
21
+ false
22
+ end
23
+
24
+ def adapter_incoming_can_defer?
25
+ true
26
+ end
27
+
28
+ def adapter_thirdparty_id
29
+ "#{adapter_incoming_request_params.dig("channel_id")}.#{adapter_incoming_request_params.dig("timestamp")}"
30
+ end
31
+
32
+ def adapter_action
33
+ :create
34
+ end
35
+
36
+ def adapter_process_create
37
+ Alert.new(
38
+ title: _title,
39
+ urgency: _urgency,
40
+ thirdparty_id: adapter_thirdparty_id,
41
+ dedup_keys: [adapter_thirdparty_id],
42
+ additional_data: _additional_datums
43
+ )
44
+ end
45
+
46
+ private
47
+
48
+ def _title
49
+ adapter_incoming_request_params.dig("text")
50
+ end
51
+
52
+ def _urgency
53
+ text = adapter_incoming_request_params.dig("text").to_s
54
+ match = text.match(/low|medium|high|critical/i).try("[]", 0)
55
+ match&.downcase!
56
+
57
+ case match
58
+ when "low"
59
+ "low"
60
+ when "medium"
61
+ "medium"
62
+ when "high"
63
+ "high"
64
+ when "critical"
65
+ "critical"
66
+ end
67
+ end
68
+
69
+ def _additional_datums
70
+ [
71
+ AdditionalDatum.new(format: "text", label: "Trigger", value: adapter_incoming_request_params.dig("trigger_word")),
72
+ AdditionalDatum.new(format: "text", label: "Channel", value: adapter_incoming_request_params.dig("channel_name")),
73
+ AdditionalDatum.new(format: "text", label: "User", value: adapter_incoming_request_params.dig("user_name"))
74
+ ]
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,67 @@
1
+ module PagerTree::Integrations
2
+ class NewRelic::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("incident_id")
23
+ end
24
+
25
+ def adapter_action
26
+ event_type = adapter_incoming_request_params.dig("event_type")
27
+ current_state = adapter_incoming_request_params.dig("current_state")
28
+
29
+ if event_type == "INCIDENT_OPEN" || (event_type == "INCIDENT" && current_state == "open")
30
+ :create
31
+ # elsif event_type == "INCIDENT_ACKNOWLEDGED" || (event_type == "INCIDENT" && current_state == "acknowledged")
32
+ # :acknowledge
33
+ elsif event_type == "INCIDENT_RESOLVED" || (event_type == "INCIDENT" && current_state == "closed")
34
+ :resolve
35
+ else
36
+ :other
37
+ end
38
+ end
39
+
40
+ def adapter_process_create
41
+ Alert.new(
42
+ title: _title,
43
+ description: _description,
44
+ thirdparty_id: adapter_thirdparty_id,
45
+ dedup_keys: [adapter_thirdparty_id],
46
+ additional_data: _additional_datums
47
+ )
48
+ end
49
+
50
+ private
51
+
52
+ def _title
53
+ adapter_incoming_request_params.dig("condition_name")
54
+ end
55
+
56
+ def _description
57
+ adapter_incoming_request_params.dig("details")
58
+ end
59
+
60
+ def _additional_datums
61
+ [
62
+ AdditionalDatum.new(format: "text", label: "Account Name", value: adapter_incoming_request_params.dig("account_name")),
63
+ AdditionalDatum.new(format: "text", label: "Incident URL", value: adapter_incoming_request_params.dig("incident_url"))
64
+ ]
65
+ end
66
+ end
67
+ end
@@ -7,6 +7,7 @@ module PagerTree::Integrations
7
7
  attr_accessor :event_name
8
8
  attr_accessor :item
9
9
  attr_accessor :changes
10
+ attr_accessor :outgoing_rules_data
10
11
 
11
12
  define_model_callbacks :initialize
12
13
 
@@ -20,6 +21,7 @@ module PagerTree::Integrations
20
21
  self.event_name ||= nil
21
22
  self.item ||= nil
22
23
  self.changes ||= nil
24
+ self.outgoing_rules_data ||= {}
23
25
  end
24
26
  end
25
27
  end
@@ -13,7 +13,8 @@ module PagerTree::Integrations
13
13
  {key: :alert_dropped, type: :boolean, default: false},
14
14
  {key: :alert_handoff, type: :boolean, default: false},
15
15
  {key: :template, type: :string, default: nil},
16
- {key: :send_linked, type: :boolean, default: false}
16
+ {key: :send_linked, type: :boolean, default: false},
17
+ {key: :outgoing_rules, type: :string, default: nil}
17
18
  ]
18
19
  store_accessor :options, *OPTIONS.map { |x| x[:key] }.map(&:to_s), prefix: "option"
19
20
 
@@ -39,6 +40,7 @@ module PagerTree::Integrations
39
40
  self.option_alert_handoff ||= false
40
41
  self.option_send_linked ||= false
41
42
  self.option_template ||= ""
43
+ self.option_outgoing_rules ||= ""
42
44
  end
43
45
 
44
46
  def adapter_supports_outgoing?
@@ -49,20 +51,49 @@ module PagerTree::Integrations
49
51
  true
50
52
  end
51
53
 
54
+ def adapter_supports_title_template?
55
+ false
56
+ end
57
+
58
+ def adapter_supports_description_template?
59
+ false
60
+ end
61
+
52
62
  def adapter_outgoing_interest?(event_name)
53
63
  try("option_#{event_name}") || false
54
64
  end
55
65
 
56
66
  def adapter_process_outgoing
57
- body = {
58
- data: adapter_outgoing_event.item,
59
- type: adapter_outgoing_event.event_name
67
+ body = nil
68
+ event_type = adapter_outgoing_event.event_name.to_s.tr("_", ".")
69
+
70
+ # Do the custom templating portion for outgoing hooks
71
+ if self.option_template.present?
72
+ begin
73
+ body = JSON.parse(handlebars(self.option_template, {
74
+ alert: adapter_outgoing_event.item.try(:v3_format) || adapter_outgoing_event.item,
75
+ event: {
76
+ type: event_type
77
+ }
78
+ }))
79
+ rescue JSON::ParserError => e
80
+ logs.create(message: "Error parsing JSON, abort custom format for option template. Error: #{e.message}")
81
+ rescue => e
82
+ Rails.logger.error "Error while processing option_template for #{id}: #{e.message}"
83
+ end
84
+ end
85
+
86
+ body ||= {
87
+ data: adapter_outgoing_event.item.try(:v3_format) || adapter_outgoing_event.item,
88
+ type: event_type
60
89
  }
61
90
 
62
- # create the delivery, save it, and send it later
91
+ url = adapter_outgoing_event.outgoing_rules_data.dig("webhook_url") || option_webhook_url
92
+ body.merge!(adapter_outgoing_event.outgoing_rules_data.except("webhook_url"))
93
+
63
94
  outgoing_webhook_delivery = OutgoingWebhookDelivery.factory(
64
95
  resource: self,
65
- url: option_webhook_url,
96
+ url: url,
66
97
  auth: {username: option_username, password: option_password},
67
98
  body: body
68
99
  )
@@ -40,8 +40,8 @@ module PagerTree::Integrations
40
40
  pagertree_options = {
41
41
  headers: {
42
42
  Accept: "*/*",
43
- 'User-Agent': "pagertree outgoing webhook service; ref: #{resource&.id}; report: support@pagertree.com",
44
- 'Content-Type': "application/json"
43
+ "User-Agent": "pagertree outgoing webhook service; ref: #{resource&.id}; report: support@pagertree.com",
44
+ "Content-Type": "application/json"
45
45
  }
46
46
  }
47
47
 
@@ -77,18 +77,20 @@ module PagerTree::Integrations
77
77
 
78
78
  options = {
79
79
  headers: {
80
- 'Content-Type': "application/json",
80
+ "Content-Type": "application/json",
81
81
  Authorization: "Bearer #{OutgoingWebhookDelivery::HookRelay.hook_relay_api_key}"
82
82
  },
83
83
  timeout: 15
84
84
  }
85
85
 
86
- @delivery = ::HTTParty.get(hook_relay_delivery_url, **options)
87
- @delivery
86
+ response = ::HTTParty.get(hook_relay_delivery_url, **options)
87
+ @delivery = response.parsed_response if response.success?
88
+
89
+ @delivery || {}
88
90
  end
89
91
 
90
92
  def request
91
- delivery&.dig("request")
93
+ delivery&.dig("request") || {}
92
94
  end
93
95
 
94
96
  def responses
@@ -8,7 +8,7 @@ module PagerTree::Integrations
8
8
  store_accessor :data, *[:url, :body, :auth].map(&:to_s)
9
9
 
10
10
  HTTP_OPTIONS = {
11
- headers: {'Content-Type': "application/json"},
11
+ headers: {"Content-Type": "application/json"},
12
12
  timeout: 15
13
13
  }
14
14
 
@@ -0,0 +1,71 @@
1
+ module PagerTree::Integrations
2
+ class Pingdom::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("check_id")
23
+ end
24
+
25
+ def adapter_action
26
+ previous_state = adapter_incoming_request_params.dig("previous_state")
27
+ current_state = adapter_incoming_request_params.dig("current_state")
28
+
29
+ if (previous_state == "UP" && current_state == "DOWN") || (previous_state == "SUCCESS" && current_state == "FAILING")
30
+ :create
31
+ elsif (previous_state == "DOWN" && current_state == "UP") || (previous_state == "FAILING" && current_state == "SUCCESS")
32
+ :resolve
33
+ else
34
+ :other
35
+ end
36
+ end
37
+
38
+ def adapter_process_create
39
+ Alert.new(
40
+ title: _title,
41
+ description: _description,
42
+ thirdparty_id: adapter_thirdparty_id,
43
+ dedup_keys: [adapter_thirdparty_id],
44
+ additional_data: _additional_datums,
45
+ tags: _tags
46
+ )
47
+ end
48
+
49
+ private
50
+
51
+ def _title
52
+ [adapter_incoming_request_params.dig("check_name"), adapter_incoming_request_params.dig("current_state")].join(" ")
53
+ end
54
+
55
+ def _description
56
+ adapter_incoming_request_params.dig("description")
57
+ end
58
+
59
+ def _tags
60
+ adapter_incoming_request_params.dig("tags") || []
61
+ end
62
+
63
+ def _additional_datums
64
+ [
65
+ AdditionalDatum.new(format: "link", label: "Full URL", value: adapter_incoming_request_params.dig("check_params", "full_url")),
66
+ AdditionalDatum.new(format: "text", label: "Importance Level", value: adapter_incoming_request_params.dig("importance_level")),
67
+ AdditionalDatum.new(format: "text", label: "Custom Message", value: adapter_incoming_request_params.dig("custom_message"))
68
+ ]
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,79 @@
1
+ module PagerTree::Integrations
2
+ class Prometheus::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("groupKey")
23
+ end
24
+
25
+ def adapter_action
26
+ case adapter_incoming_request_params.dig("status")
27
+ when "firing"
28
+ :create
29
+ when "resolved"
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
+ dedup_keys: [adapter_thirdparty_id],
43
+ additional_data: _additional_datums
44
+ )
45
+ end
46
+
47
+ private
48
+
49
+ def _title
50
+ adapter_incoming_request_params.dig("commonLabels", "alertname") || ["Prometheus", adapter_incoming_request_params.dig("receiver"), "firing"].compact_blank.join(" ")
51
+ end
52
+
53
+ def _description
54
+ adapter_incoming_request_params.dig("commonAnnotations", "summary")
55
+ end
56
+
57
+ def _urgency
58
+ case adapter_incoming_request_params.dig("commonLabels", "severity")
59
+ when "low"
60
+ "low"
61
+ when "medium"
62
+ "medium"
63
+ when "high"
64
+ "high"
65
+ when "critical"
66
+ "critical"
67
+ end
68
+ end
69
+
70
+ def _additional_datums
71
+ [
72
+ AdditionalDatum.new(format: "link", label: "Alert Manager URL", value: adapter_incoming_request_params.dig("externalURL")),
73
+ AdditionalDatum.new(format: "text", label: "Receiver", value: adapter_incoming_request_params.dig("receiver"))
74
+ ] + adapter_incoming_request_params.dig("commonLabels").map do |key, value|
75
+ AdditionalDatum.new(format: "text", label: key, value: value.to_s)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,58 @@
1
+ module PagerTree::Integrations
2
+ class Prtg::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("sensorid")
23
+ end
24
+
25
+ def adapter_action
26
+ status = adapter_incoming_request_params.dig("status").to_s.downcase
27
+
28
+ if status == "down"
29
+ :create
30
+ elsif status.include?("now: up")
31
+ :resolve
32
+ else
33
+ :other
34
+ end
35
+ end
36
+
37
+ def adapter_process_create
38
+ Alert.new(
39
+ title: _title,
40
+ thirdparty_id: adapter_thirdparty_id,
41
+ dedup_keys: [adapter_thirdparty_id],
42
+ additional_data: _additional_datums
43
+ )
44
+ end
45
+
46
+ private
47
+
48
+ def _title
49
+ "Sensor #{adapter_incoming_request_params.dig("sensorid")} #{adapter_incoming_request_params.dig("sensor")} is DOWN"
50
+ end
51
+
52
+ def _additional_datums
53
+ adapter_incoming_request_params.map do |key, value|
54
+ AdditionalDatum.new(format: "text", label: key, value: value.to_s)
55
+ end
56
+ end
57
+ end
58
+ end