pager_tree-integrations 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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