summaryrefslogtreecommitdiff
path: root/lib/error_tracking/sentry_client/issue_link.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/error_tracking/sentry_client/issue_link.rb')
-rw-r--r--lib/error_tracking/sentry_client/issue_link.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/error_tracking/sentry_client/issue_link.rb b/lib/error_tracking/sentry_client/issue_link.rb
new file mode 100644
index 00000000000..1c2e8c4147a
--- /dev/null
+++ b/lib/error_tracking/sentry_client/issue_link.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+module ErrorTracking
+ class SentryClient
+ module IssueLink
+ # Creates a link in Sentry corresponding to the provided
+ # Sentry issue and GitLab issue
+ # @param integration_id [Integer, nil] Representing a global
+ # GitLab integration in Sentry. Nil for plugins.
+ # @param sentry_issue_id [Integer] Id for an issue from Sentry
+ # @param issue [Issue] Issue for which the link should be created
+ def create_issue_link(integration_id, sentry_issue_id, issue)
+ return create_plugin_link(sentry_issue_id, issue) unless integration_id
+
+ create_global_integration_link(integration_id, sentry_issue_id, issue)
+ end
+
+ private
+
+ def create_global_integration_link(integration_id, sentry_issue_id, issue)
+ issue_link_url = global_integration_link_api_url(integration_id, sentry_issue_id)
+
+ params = {
+ project: issue.project.id,
+ externalIssue: "#{issue.project.id}##{issue.iid}"
+ }
+
+ http_put(issue_link_url, params)
+ end
+
+ def global_integration_link_api_url(integration_id, sentry_issue_id)
+ issue_link_url = URI(url)
+ issue_link_url.path = "/api/0/groups/#{sentry_issue_id}/integrations/#{integration_id}/"
+
+ issue_link_url
+ end
+
+ def create_plugin_link(sentry_issue_id, issue)
+ issue_link_url = plugin_link_api_url(sentry_issue_id)
+
+ http_post(issue_link_url, issue_id: issue.iid)
+ end
+
+ def plugin_link_api_url(sentry_issue_id)
+ issue_link_url = URI(url)
+ issue_link_url.path = "/api/0/issues/#{sentry_issue_id}/plugins/gitlab/link/"
+
+ issue_link_url
+ end
+ end
+ end
+end