Skip to content
Snippets Groups Projects
Verified Commit 84b242b9 authored by Sarah Yasonik's avatar Sarah Yasonik :two: Committed by GitLab
Browse files

Allow environment alerts to display alerts from any source

Alerts for an environment associated with a prometheus alert would
previously be displayed from /path/to/project/-/environments.
PrometheusAlert records specifically are no longer available, but
alerts from prometheus can still be displayed.

With this change, any alert from 'Monitor > Alerts' that is
associated with the environment will be displayed from the list.

Context:
The Metrics Dashboard (used for monitoring apps deploying using gitlab)
was deprecated in 14.7 and removed from the product in 16.0.
This commit cleans up a portion of the dead code.

&10107

Changelog: changed
parent 4d6a517c
No related branches found
No related tags found
1 merge request!160511Allow environment alerts to display alerts from any source
Showing
with 16 additions and 64 deletions
......@@ -92,7 +92,7 @@ class Alert < ApplicationRecord
# Descending sort order sorts severity from more critical to less critical.
# https://gitlab.com/gitlab-org/gitlab/-/issues/221242#what-is-the-expected-correct-behavior
scope :order_severity, ->(sort_order) { order(severity: sort_order == :asc ? :desc : :asc) }
scope :order_severity_with_open_prometheus_alert, -> { open.with_prometheus_alert.order(severity: :asc, started_at: :desc) }
scope :open_order_by_severity, -> { open.order(severity: :asc, started_at: :desc) }
scope :counts_by_project_id, -> { group(:project_id).count }
......@@ -123,11 +123,6 @@ def self.find_unresolved_alert(project, fingerprint)
for_fingerprint(project, fingerprint).not_resolved.take
end
def self.last_prometheus_alert_by_project_id
ids = select(arel_table[:id].maximum).group(:project_id)
with_prometheus_alert.where(id: ids)
end
def self.reference_prefix
'^alert#'
end
......
......@@ -45,7 +45,7 @@ class Environment < ApplicationRecord
class_name: 'Deployment', inverse_of: :environment
end
has_one :latest_opened_most_severe_alert, -> { order_severity_with_open_prometheus_alert }, class_name: 'AlertManagement::Alert', inverse_of: :environment
has_one :latest_opened_most_severe_alert, -> { open_order_by_severity }, class_name: 'AlertManagement::Alert', inverse_of: :environment
before_validation :generate_slug, if: ->(env) { env.slug.blank? }
before_validation :ensure_environment_tier
......
......@@ -762,7 +762,7 @@ DETAILS:
**Tier:** Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
If you [set up alerts for Prometheus metrics](../../operations/incident_management/integrations.md#configuration),
If you [set up an alert integration](../../operations/incident_management/integrations.md#configuration),
alerts for environments are shown on the environments page. The alert with the highest
severity is shown, so you can identify which environments need immediate attention.
......
......@@ -45,13 +45,10 @@ export default {
},
translations: {
alertText: s__(
'EnvironmentsAlert|%{severity} • %{title} %{text}. %{linkStart}View Details%{linkEnd} · %{startedAt} ',
'EnvironmentsAlert|%{severity} • %{title}. %{linkStart}View Details%{linkEnd} · %{startedAt} ',
),
},
computed: {
humanizedText() {
return this.alert?.prometheusAlert?.humanizedText;
},
severity() {
return this.alert?.severity;
},
......@@ -81,9 +78,6 @@ export default {
<template #title>
<span>{{ alert.title }}</span>
</template>
<template #text>
<span>{{ humanizedText }}</span>
</template>
<template #link="{ content }">
<gl-link :href="alert.detailsUrl" data-testid="alert-link">{{ content }}</gl-link>
</template>
......
......@@ -9,10 +9,6 @@ query environment($fullPath: ID!, $environmentName: String) {
severity
detailsUrl
startedAt
prometheusAlert {
id
humanizedText
}
}
}
}
......
......@@ -222,20 +222,7 @@ def actions_button_selector
let!(:alert) do
create(:alert_management_alert, :triggered, :prometheus,
title: 'HTTP Error Rate', project: project,
environment: environment, prometheus_alert: prometheus_alert)
end
let!(:prometheus_alert) do
create(
:prometheus_alert,
project: project,
environment: environment,
prometheus_metric: prometheus_metric
)
end
let!(:prometheus_metric) do
create(:prometheus_metric, project: project, unit: '%')
environment: environment)
end
before do
......@@ -249,7 +236,7 @@ def actions_button_selector
within(find('div[data-testid="alert"]')) do
expect(page).to have_content('Critical')
expect(page).to have_content("#{alert.title} .")
expect(page).to have_content(alert.title)
expect(page).to have_link('View Details', href: alert.present.details_url)
end
......
......@@ -50,7 +50,6 @@ describe('Environment Alert', () => {
id: '4',
severity: 'CRITICAL',
title: 'alert title',
prometheusAlert: { id: '3', humanizedText: '>0.1% jest' },
detailsUrl: '/alert/details',
startedAt: new Date(),
},
......@@ -65,7 +64,7 @@ describe('Environment Alert', () => {
it('displays the alert details', () => {
const text = wrapper.text();
expect(text).toContain('Critical');
expect(text).toContain('alert title >0.1% jest.');
expect(text).toContain('alert title.');
expect(text).toContain('View Details');
expect(text).toContain('just now');
});
......
......@@ -30,7 +30,6 @@ describe('~/environments/components/new_environment_item.vue', () => {
id: '4',
severity: 'CRITICAL',
title: 'alert title',
prometheusAlert: { id: '3', humanizedText: '>0.1% jest' },
detailsUrl: '/alert/details',
startedAt: new Date(),
},
......
......@@ -19,8 +19,7 @@ def create_environment_with_associations(project)
create(:deployment_approval, deployment: deployment)
end
create(:protected_environment, :maintainers_can_deploy, name: environment.name, project: project, required_approval_count: 2)
prometheus_alert = create(:prometheus_alert, project: project, environment: environment)
create(:alert_management_alert, :triggered, :prometheus, project: project, environment: environment, prometheus_alert: prometheus_alert)
create(:alert_management_alert, :triggered, :prometheus, project: project, environment: environment)
end
end
end
......@@ -3,9 +3,9 @@
require 'spec_helper'
RSpec.describe EnvironmentEntity, feature_category: :environment_management do
let(:user) { create(:user) }
let(:environment) { create(:environment, project: project) }
let(:project) { create(:project) }
let_it_be_with_reload(:user) { create(:user) }
let_it_be(:project) { create(:project) }
let_it_be(:environment) { create(:environment, project: project) }
let(:entity) do
described_class.new(environment, request: double(current_user: user, project: project))
......@@ -15,9 +15,7 @@
subject { entity.as_json }
context 'with alert' do
let!(:environment) { create(:environment, project: project) }
let!(:prometheus_alert) { create(:prometheus_alert, project: project, environment: environment) }
let!(:alert) { create(:alert_management_alert, :triggered, :prometheus, project: project, environment: environment, prometheus_alert: prometheus_alert) }
let_it_be(:alert) { create(:alert_management_alert, :triggered, :prometheus, project: project, environment: environment) }
before do
stub_licensed_features(environment_alerts: true)
......
......@@ -20681,7 +20681,7 @@ msgstr ""
msgid "Environments in %{name}"
msgstr ""
 
msgid "EnvironmentsAlert|%{severity} • %{title} %{text}. %{linkStart}View Details%{linkEnd} · %{startedAt} "
msgid "EnvironmentsAlert|%{severity} • %{title}. %{linkStart}View Details%{linkEnd} · %{startedAt} "
msgstr ""
 
msgid "EnvironmentsDashboard|Add a project to the dashboard"
......@@ -85,8 +85,7 @@
end
context 'when alert is raised on the environment' do
let!(:prometheus_alert) { create(:prometheus_alert, project: project, environment: environment) }
let!(:alert) { create(:alert_management_alert, :triggered, :prometheus, project: project, environment: environment, prometheus_alert: prometheus_alert) }
let_it_be(:alert) { create(:alert_management_alert, :triggered, :prometheus, project: project, environment: environment) }
it 'returns alert information' do
expect(subject['data']['project']['environment']['latestOpenedMostSevereAlert']['severity']).to eq(alert.severity.upcase)
......
......@@ -193,8 +193,8 @@
end
end
describe '.order_severity_with_open_prometheus_alert' do
subject { described_class.where(project: alert_project).order_severity_with_open_prometheus_alert }
describe '.open_order_by_severity' do
subject { described_class.where(project: alert_project).open_order_by_severity }
let_it_be(:alert_project) { create(:project) }
let_it_be(:resolved_critical_alert) { create(:alert_management_alert, :resolved, :critical, project: alert_project) }
......@@ -248,20 +248,6 @@
it { is_expected.to eq(alert_with_fingerprint) }
end
describe '.last_prometheus_alert_by_project_id' do
subject { described_class.last_prometheus_alert_by_project_id }
let!(:p1_alert_1) { triggered_alert }
let!(:p1_alert_2) { acknowledged_alert }
let!(:p2_alert_1) { resolved_alert }
let!(:p2_alert_2) { ignored_alert }
it 'returns the latest alert for each project' do
expect(subject).to contain_exactly(p1_alert_2, p2_alert_2)
end
end
describe '.search' do
let(:alert) { triggered_alert }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment