65 lines
1.8 KiB
Ruby
65 lines
1.8 KiB
Ruby
![]() |
# 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
|