Skip to content

Adds UptimeObserver integration #134

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions app/models/pager_tree/integrations/uptime_observer/v3.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
module PagerTree::Integrations
class UptimeObserver::V3 < Integration
OPTIONS = []
store_accessor :options, *OPTIONS.map { |x| x[:key] }.map(&:to_s), prefix: "option"

after_initialize do
end

def adapter_supports_incoming?
true
end

def adapter_supports_outgoing?
false
end

def adapter_incoming_can_defer?
true
end

def adapter_thirdparty_id
adapter_incoming_request_params.dig("incident_id")
end

def adapter_action
case adapter_incoming_request_params.dig("incident_status")
when "Active"
:create
when "Resolved"
:resolve
else
:other
end
end

def adapter_process_create
Alert.new(
title: _title,
description: _description,
thirdparty_id: adapter_thirdparty_id,
dedup_keys: [adapter_thirdparty_id],
additional_data: _additional_datums
)
end

private

def _title
adapter_incoming_request_params.dig("title")
end

def _description
adapter_incoming_request_params.dig("description")
end

def _additional_datums
[
AdditionalDatum.new(format: "link", label: "Incident URL", value: adapter_incoming_request_params.dig("incident_url")),
AdditionalDatum.new(format: "link", label: "Monitor URL", value: adapter_incoming_request_params.dig("monitor_url"))
]
end
end
end
4 changes: 4 additions & 0 deletions test/fixtures/pager_tree/integrations/integrations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,10 @@ uptime_kuma_v3:
type: "PagerTree::Integrations::UptimeKuma::V3"
# options: no_options

uptime_observer_v3:
type: "PagerTree::Integrations::UptimeObserver::V3"
# options: no_options

uptime_robot_v3:
type: "PagerTree::Integrations::UptimeRobot::V3"
# options: no_options
Expand Down
71 changes: 71 additions & 0 deletions test/models/pager_tree/integrations/uptime_observer/v3_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
require "test_helper"

module PagerTree::Integrations
class UptimeObserver::V3Test < ActiveSupport::TestCase
include Integrateable

setup do
@integration = pager_tree_integrations_integrations(:uptime_observer_v3)

@create_request = {
incident_url: "https://app.uptimeobserver.com/monitoring/incidents/123456",
incident_id: 123456,
title: "Incident Title",
description: "Monitor 1 failed. Reason Socket Timeout",
incident_status: "Active",
monitor_id: 54321,
monitor_name: "Monitor 1",
monitor_url: "https://app.uptimeobserver.com/monitoring/monitor/123456"
}.with_indifferent_access

@resolve_request = @create_request.deep_dup
@resolve_request[:incident_status] = "Resolved"

@other_request = @create_request.deep_dup
@other_request[:incident_status] = "unknown"
end

test "sanity" do
assert @integration.adapter_supports_incoming?
assert @integration.adapter_incoming_can_defer?
assert_not @integration.adapter_supports_outgoing?
assert @integration.adapter_show_alerts?
assert @integration.adapter_show_logs?
assert_not @integration.adapter_show_outgoing_webhook_delivery?
end

test "adapter_actions" do
@integration.adapter_incoming_request_params = @create_request
assert_equal :create, @integration.adapter_action

@integration.adapter_incoming_request_params = @resolve_request
assert_equal :resolve, @integration.adapter_action

@integration.adapter_incoming_request_params = @other_request
assert_equal :other, @integration.adapter_action
end

test "adapter_thirdparty_id" do
@integration.adapter_incoming_request_params = @create_request
assert_equal @create_request.dig(:incident_id), @integration.adapter_thirdparty_id
end

test "adapter_process_create" do
@integration.adapter_incoming_request_params = @create_request

true_alert = Alert.new(
title: @create_request.dig(:title),
description: @create_request.dig(:description),
urgency: nil,
thirdparty_id: @create_request.dig(:incident_id),
dedup_keys: [@create_request.dig(:incident_id)],
additional_data: [
AdditionalDatum.new(format: "link", label: "Incident URL", value: @create_request.dig(:incident_url)),
AdditionalDatum.new(format: "link", label: "Monitor URL", value: @create_request.dig(:monitor_url))
]
)

assert_equal true_alert.to_json, @integration.adapter_process_create.to_json
end
end
end