diff options
Diffstat (limited to 'lib/gitlab/incident_management')
-rw-r--r-- | lib/gitlab/incident_management/pager_duty/incident_issue_description.rb | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/gitlab/incident_management/pager_duty/incident_issue_description.rb b/lib/gitlab/incident_management/pager_duty/incident_issue_description.rb new file mode 100644 index 00000000000..cd947b15154 --- /dev/null +++ b/lib/gitlab/incident_management/pager_duty/incident_issue_description.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +module Gitlab + module IncidentManagement + module PagerDuty + class IncidentIssueDescription + def initialize(incident_payload) + @incident_payload = incident_payload + end + + def to_s + markdown_line_break = " \n" + + [ + "**Incident:** #{markdown_incident}", + "**Incident number:** #{incident_payload['incident_number']}", + "**Urgency:** #{incident_payload['urgency']}", + "**Status:** #{incident_payload['status']}", + "**Incident key:** #{incident_payload['incident_key']}", + "**Created at:** #{markdown_incident_created_at}", + "**Assignees:** #{markdown_assignees.join(', ')}", + "**Impacted services:** #{markdown_impacted_services.join(', ')}" + ].join(markdown_line_break) + end + + private + + attr_reader :incident_payload + + def markdown_incident + markdown_link(incident_payload['title'], incident_payload['url']) + end + + def incident_created_at + Time.parse(incident_payload['created_at']) + rescue + Time.current.utc # PagerDuty provides time in UTC + end + + def markdown_incident_created_at + incident_created_at.strftime('%d %B %Y, %-l:%M%p (%Z)') + end + + def markdown_assignees + Array(incident_payload['assignees']).map do |assignee| + markdown_link(assignee['summary'], assignee['url']) + end + end + + def markdown_impacted_services + Array(incident_payload['impacted_services']).map do |is| + markdown_link(is['summary'], is['url']) + end + end + + def markdown_link(label, url) + return label if url.blank? + + "[#{label}](#{url})" + end + end + end + end +end |