From 1dda26b85aa518792be962dde27bd5859f254f28 Mon Sep 17 00:00:00 2001 From: shobanarkst <100775265+shobanarkst@users.noreply.github.com> Date: Tue, 31 May 2022 12:21:12 +0530 Subject: [PATCH] Freshservice Test freshservice notification service --- services/Freshservice | 73 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 services/Freshservice diff --git a/services/Freshservice b/services/Freshservice new file mode 100644 index 0000000..c0255d8 --- /dev/null +++ b/services/Freshservice @@ -0,0 +1,73 @@ +module AppOptics::Services + class Service::Freshservice < AppOptics::Services::Service + def receive_validate(errors) + success = true + [:service_key, :event_type, :description].each do |k| + if settings[k].to_s.empty? + errors[k] = "Is required" + success = false + end + end + success + end + + def receive_alert_clear + receive_alert + end + + def account_email + if payload['auth'] + payload['auth']['email'] + end + end + + def receive_alert + raise_config_error unless receive_validate({}) + + fs_payload = {} + ['alert', 'trigger_time', 'conditions', 'violations'].each do |whitelisted| + fs_payload[whitelisted] = payload[whitelisted] + end + if email = account_email + fs_payload['account'] = email + end + alert_name = payload['alert']['name'] + description = alert_name.blank? ? settings[:description] : alert_name + if payload[:triggered_by_user_test] + description = "[Test] " + description + end + body = { + :service_key => settings[:service_key], + :event_type => settings[:event_type], + :description => description, + :details => fs_payload + } + + body[:event_type] = payload[:clear] ? "resolve" : "trigger" + + if payload[:triggered_by_user_test] + body[:details][:note] = test_alert_message() + end + if payload[:alert][:version] == 1 + body[:details][:metric_url] = payload_link(payload) + end + body[:details][:alert_url] = alert_link(payload) + unless payload['alert']['runbook_url'].blank? + body[:details][:runbook_url] = payload['alert']['runbook_url'] + end + + unless payload['alert']['description'].blank? + body[:details][:description] = payload['alert']['description'] + end + + keys = [settings[:incident_key], payload[:incident_key]].compact + if keys.size > 0 + body[:incident_key] = keys.join("-") + end + + url = "https://geekfactory.alerts.freshservice.com/integrations/3684/alerts?auth-key=eyJhbGciOiJIUzI1NiJ9.eyJhX2lkIjo2Nzc3LCJhcF9pZCI6NTE3OSwic19pZCI6NSwidHMiOjE2NDQyNDE1NTIuNTAwNjM0NH0.-4oCpz2DCGfxuJCV3P4Dawfadp67luO7FJ_eFMjUft4" + + http_post url, body, 'Content-Type' => 'application/json' + end + end +end