gitlab-org--gitlab-foss/app/presenters/alert_management/alert_presenter.rb

116 lines
2.5 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
module AlertManagement
class AlertPresenter < Gitlab::View::Presenter::Delegated
include Gitlab::Utils::StrongMemoize
include IncidentManagement::Settings
MARKDOWN_LINE_BREAK = " \n".freeze
def initialize(alert, _attributes = {})
super
@alert = alert
@project = alert.project
end
def issue_description
horizontal_line = "\n\n---\n\n"
[
issue_summary_markdown,
alert_markdown,
incident_management_setting.issue_template_content
].compact.join(horizontal_line)
end
def start_time
started_at&.strftime('%d %B %Y, %-l:%M%p (%Z)')
end
def issue_summary_markdown
<<~MARKDOWN.chomp
#### Summary
#{metadata_list}
#{alert_details}#{metric_embed_for_alert}
MARKDOWN
end
def runbook
strong_memoize(:runbook) do
payload&.dig('runbook')
end
end
def metrics_dashboard_url; end
private
def details_url
::Gitlab::Routing.url_helpers.details_project_alert_management_url(
project,
alert.iid
)
end
attr_reader :alert, :project
def alerting_alert
strong_memoize(:alerting_alert) do
Gitlab::Alerting::Alert.new(project: project, payload: alert.payload).present
end
end
def alert_markdown; end
def metadata_list
metadata = []
metadata << list_item('Start time', start_time)
metadata << list_item('Severity', severity)
metadata << list_item('full_query', backtick(full_query)) if full_query
metadata << list_item('Service', service) if service
metadata << list_item('Monitoring tool', monitoring_tool) if monitoring_tool
metadata << list_item('Hosts', host_links) if hosts.any?
metadata << list_item('Description', description) if description.present?
metadata << list_item('GitLab alert', details_url) if details_url.present?
metadata.join(MARKDOWN_LINE_BREAK)
end
def alert_details
if details.present?
<<~MARKDOWN.chomp
#### Alert Details
#{details_list}
MARKDOWN
end
end
def details_list
alert.details
.map { |label, value| list_item(label, value) }
.join(MARKDOWN_LINE_BREAK)
end
def metric_embed_for_alert; end
def full_query; end
def list_item(key, value)
"**#{key}:** #{value}".strip
end
def backtick(value)
"`#{value}`"
end
def host_links
hosts.join(' ')
end
end
end