Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-05-08 12:09:39 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-05-08 12:09:39 +0300
commit5bdbc604c8a08f827c3833e2c28ec0c299bb41fc (patch)
tree1fbf5e5dc3bff54d371baa15775371ebc8525f62 /spec/presenters
parent79ddf163588de2d9a7f1cc27262dc1a14503f619 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/presenters')
-rw-r--r--spec/presenters/projects/prometheus/alert_presenter_spec.rb142
1 files changed, 142 insertions, 0 deletions
diff --git a/spec/presenters/projects/prometheus/alert_presenter_spec.rb b/spec/presenters/projects/prometheus/alert_presenter_spec.rb
index 85c73aa3533..967a0fb2c09 100644
--- a/spec/presenters/projects/prometheus/alert_presenter_spec.rb
+++ b/spec/presenters/projects/prometheus/alert_presenter_spec.rb
@@ -152,6 +152,148 @@ describe Projects::Prometheus::AlertPresenter do
end
end
end
+
+ context 'with embedded metrics' do
+ let(:starts_at) { '2018-03-12T09:06:00Z' }
+
+ shared_examples_for 'markdown with metrics embed' do
+ let(:expected_markdown) do
+ <<~MARKDOWN.chomp
+ #### Summary
+
+ **Start time:** #{presenter.starts_at}#{markdown_line_break}
+ **full_query:** `avg(metric) > 1.0`
+
+ [](#{url})
+ MARKDOWN
+ end
+
+ context 'without a starting time available' do
+ around do |example|
+ Timecop.freeze(starts_at) { example.run }
+ end
+
+ it { is_expected.to eq(expected_markdown) }
+ end
+
+ context 'with a starting time available' do
+ before do
+ payload['startsAt'] = starts_at
+ end
+
+ it { is_expected.to eq(expected_markdown) }
+ end
+ end
+
+ context 'for gitlab-managed prometheus alerts' do
+ let(:gitlab_alert) { create(:prometheus_alert, project: project) }
+ let(:metric_id) { gitlab_alert.prometheus_metric_id }
+ let(:env_id) { gitlab_alert.environment_id }
+
+ before do
+ payload['labels'] = { 'gitlab_alert_id' => metric_id }
+ end
+
+ let(:url) { "http://localhost/#{project.full_path}/prometheus/alerts/#{metric_id}/metrics_dashboard?end=2018-03-12T09%3A36%3A00Z&environment_id=#{env_id}&start=2018-03-12T08%3A36%3A00Z" }
+
+ it_behaves_like 'markdown with metrics embed'
+ end
+
+ context 'for alerts from a self-managed prometheus' do
+ let!(:environment) { create(:environment, project: project, name: 'production') }
+ let(:url) { "http://localhost/#{project.full_path}/-/environments/#{environment.id}/metrics_dashboard?embed_json=#{CGI.escape(embed_content.to_json)}&end=2018-03-12T09%3A36%3A00Z&start=2018-03-12T08%3A36%3A00Z" }
+
+ let(:title) { 'title' }
+ let(:y_label) { 'y_label' }
+ let(:query) { 'avg(metric) > 1.0' }
+ let(:embed_content) do
+ {
+ panel_groups: [{
+ panels: [{
+ type: 'line-graph',
+ title: title,
+ y_label: y_label,
+ metrics: [{ query_range: query }]
+ }]
+ }]
+ }
+ end
+
+ before do
+ # Setup embed time range
+ payload['startsAt'] = starts_at
+
+ # Setup query
+ payload['generatorURL'] = "http://host?g0.expr=#{CGI.escape(query)}"
+
+ # Setup environment
+ payload['labels'] ||= {}
+ payload['labels']['gitlab_environment_name'] = 'production'
+
+ # Setup chart title & axis labels
+ payload['annotations'] ||= {}
+ payload['annotations']['title'] = 'title'
+ payload['annotations']['gitlab_y_label'] = 'y_label'
+ end
+
+ it_behaves_like 'markdown with metrics embed'
+
+ context 'without y_label' do
+ let(:y_label) { title }
+
+ before do
+ payload['annotations'].delete('gitlab_y_label')
+ end
+
+ it_behaves_like 'markdown with metrics embed'
+ end
+
+ context 'when not enough information is present for an embed' do
+ let(:expected_markdown) do
+ <<~MARKDOWN.chomp
+ #### Summary
+
+ **Start time:** #{presenter.starts_at}#{markdown_line_break}
+ **full_query:** `avg(metric) > 1.0`
+
+ MARKDOWN
+ end
+
+ context 'without title' do
+ before do
+ payload['annotations'].delete('title')
+ end
+
+ it { is_expected.to eq(expected_markdown) }
+ end
+
+ context 'without environment' do
+ before do
+ payload['labels'].delete('gitlab_environment_name')
+ end
+
+ it { is_expected.to eq(expected_markdown) }
+ end
+
+ context 'without full_query' do
+ let(:expected_markdown) do
+ <<~MARKDOWN.chomp
+ #### Summary
+
+ **Start time:** #{presenter.starts_at}
+
+ MARKDOWN
+ end
+
+ before do
+ payload.delete('generatorURL')
+ end
+
+ it { is_expected.to eq(expected_markdown) }
+ end
+ end
+ end
+ end
end
describe '#show_performance_dashboard_link?' do