76 lines
1.9 KiB
Ruby
76 lines
1.9 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# Responsible for returning an embed containing the specified
|
||
|
# metrics chart for an alert. Creates panels based on the
|
||
|
# matching metric stored in the database.
|
||
|
#
|
||
|
# Use Gitlab::Metrics::Dashboard::Finder to retrieve dashboards.
|
||
|
module Metrics
|
||
|
module Dashboard
|
||
|
class GitlabAlertEmbedService < ::Metrics::Dashboard::BaseEmbedService
|
||
|
include Gitlab::Utils::StrongMemoize
|
||
|
|
||
|
SEQUENCE = [
|
||
|
STAGES::EndpointInserter,
|
||
|
STAGES::PanelIdsInserter
|
||
|
].freeze
|
||
|
|
||
|
class << self
|
||
|
# Determines whether the provided params are sufficient
|
||
|
# to uniquely identify a panel composed of user-defined
|
||
|
# custom metrics from the DB.
|
||
|
def valid_params?(params)
|
||
|
[
|
||
|
embedded?(params[:embedded]),
|
||
|
params[:prometheus_alert_id].is_a?(Integer)
|
||
|
].all?
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def raw_dashboard
|
||
|
panels_not_found!(alert_id: alert_id) unless alert && prometheus_metric
|
||
|
|
||
|
{ 'panel_groups' => [{ 'panels' => [panel] }] }
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def allowed?
|
||
|
Ability.allowed?(current_user, :read_prometheus_alerts, project)
|
||
|
end
|
||
|
|
||
|
def alert_id
|
||
|
params[:prometheus_alert_id]
|
||
|
end
|
||
|
|
||
|
def alert
|
||
|
strong_memoize(:alert) do
|
||
|
Projects::Prometheus::AlertsFinder.new(id: alert_id).execute.first
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def process_params
|
||
|
params.merge(environment: alert.environment)
|
||
|
end
|
||
|
|
||
|
def prometheus_metric
|
||
|
strong_memoize(:prometheus_metric) do
|
||
|
PrometheusMetricsFinder.new(id: alert.prometheus_metric_id).execute.first
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def panel
|
||
|
{
|
||
|
title: prometheus_metric.title,
|
||
|
y_label: prometheus_metric.y_label,
|
||
|
metrics: [prometheus_metric.to_metric_hash]
|
||
|
}
|
||
|
end
|
||
|
|
||
|
def sequence
|
||
|
SEQUENCE
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|