summaryrefslogtreecommitdiff
path: root/qa/qa/specs/features/browser_ui/8_monitor/all_monitor_core_features_spec.rb
blob: 14bd6af815e7849771608d425e36b75f3655bc71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# frozen_string_literal: true
require_relative 'cluster_with_prometheus'

module QA
  RSpec.describe 'Monitor', :orchestrated, :kubernetes, :requires_admin, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/241448', type: :investigating } do
    include_context "cluster with Prometheus installed"

    before do
      Flow::Login.sign_in_unless_signed_in
      @project.visit!
    end

    it 'configures custom metrics', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1334' do
      verify_add_custom_metric
      verify_edit_custom_metric
      verify_delete_custom_metric
    end

    it 'duplicates to create dashboard to custom', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1335' do
      Page::Project::Menu.perform(&:go_to_monitor_metrics)

      Page::Project::Monitor::Metrics::Show.perform do |on_dashboard|
        on_dashboard.duplicate_dashboard

        expect(on_dashboard).to have_metrics
        expect(on_dashboard).to have_edit_dashboard_enabled
      end
    end

    it 'verifies data on filtered deployed environment', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1332' do
      Page::Project::Menu.perform(&:go_to_monitor_metrics)

      Page::Project::Monitor::Metrics::Show.perform do |on_dashboard|
        on_dashboard.filter_environment

        expect(on_dashboard).to have_metrics
      end
    end

    it 'filters using the quick range', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1333' do
      Page::Project::Menu.perform(&:go_to_monitor_metrics)

      Page::Project::Monitor::Metrics::Show.perform do |on_dashboard|
        on_dashboard.show_last('30 minutes')
        expect(on_dashboard).to have_metrics

        on_dashboard.show_last('3 hours')
        expect(on_dashboard).to have_metrics

        on_dashboard.show_last('1 day')
        expect(on_dashboard).to have_metrics
      end
    end

    it 'observes cluster health graph', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1311' do
      Page::Project::Menu.perform(&:go_to_infrastructure_kubernetes)

      Page::Project::Infrastructure::Kubernetes::Index.perform do |cluster_list|
        cluster_list.click_on_cluster(@cluster)
      end

      Page::Project::Infrastructure::Kubernetes::Show.perform do |cluster_panel|
        cluster_panel.open_health
        cluster_panel.wait_for_cluster_health
      end
    end

    it 'uses templating variables for metrics dashboards', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1926' do
      templating_dashboard_yml = Pathname
                                     .new(__dir__)
                                     .join('../../../../fixtures/metrics_dashboards/templating.yml')

      Resource::Repository::ProjectPush.fabricate! do |push|
        push.project = @project
        push.file_name = '.gitlab/dashboards/templating.yml'
        push.file_content = File.read(templating_dashboard_yml)
        push.commit_message = 'Add templating in dashboard file'
        push.new_branch = false
      end

      Page::Project::Menu.perform(&:go_to_monitor_metrics)

      Page::Project::Monitor::Metrics::Show.perform do |dashboard|
        dashboard.select_dashboard('templating.yml')

        expect(dashboard).to have_template_metric('CPU usage GitLab Runner')
        expect(dashboard).to have_template_metric('Memory usage Postgresql')
        expect(dashboard).to have_templating_variable('GitLab Runner')
        expect(dashboard).to have_templating_variable('Postgresql')
      end
    end

    private

    def verify_add_custom_metric
      Page::Project::Menu.perform(&:go_to_integrations_settings)
      Page::Project::Settings::Integrations.perform(&:click_on_prometheus_integration)

      Page::Project::Settings::Services::Prometheus.perform do |metrics_panel|
        metrics_panel.click_on_new_metric
        metrics_panel.add_custom_metric
      end

      Page::Project::Menu.perform(&:go_to_monitor_metrics)

      Page::Project::Monitor::Metrics::Show.perform do |on_dashboard|
        expect(on_dashboard).to have_custom_metric('HTTP Requests Total')
      end
    end

    def verify_edit_custom_metric
      Page::Project::Menu.perform(&:go_to_integrations_settings)
      Page::Project::Settings::Integrations.perform(&:click_on_prometheus_integration)
      Page::Project::Settings::Services::Prometheus.perform do |metrics_panel|
        metrics_panel.click_on_custom_metric('Business / HTTP Requests Total (req/sec)')
        metrics_panel.edit_custom_metric
      end

      Page::Project::Menu.perform(&:go_to_monitor_metrics)

      Page::Project::Monitor::Metrics::Show.perform do |on_dashboard|
        expect(on_dashboard).to have_custom_metric('Throughput')
      end
    end

    def verify_delete_custom_metric
      Page::Project::Menu.perform(&:go_to_integrations_settings)
      Page::Project::Settings::Integrations.perform(&:click_on_prometheus_integration)

      Page::Project::Settings::Services::Prometheus.perform do |metrics_panel|
        metrics_panel.click_on_custom_metric('Business / Throughput (req/sec)')
        metrics_panel.delete_custom_metric
      end

      Page::Project::Menu.perform(&:go_to_monitor_metrics)

      Page::Project::Monitor::Metrics::Show.perform do |on_dashboard|
        expect(on_dashboard).not_to have_custom_metric('Throughput')
      end
    end
  end
end