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

all_monitor_core_features_spec.rb « 8_monitor « browser_ui « features « specs « qa « qa - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 54c7b75d1d141e8f8cf5ffa9867adde8125e7cd9 (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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# frozen_string_literal: true

module QA
  RSpec.describe 'Monitor' do
    describe 'with Prometheus in a Gitlab-managed cluster', :orchestrated, :kubernetes, :requires_admin do
      before :all do
        @cluster = Service::KubernetesCluster.new(provider_class: Service::ClusterProvider::K3s).create!
        @project = Resource::Project.fabricate_via_api! do |project|
          project.name = 'monitoring-project'
          project.auto_devops_enabled = true
          project.template_name = 'express'
        end

        deploy_project_with_prometheus
      end

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

      after :all do
        @cluster.remove!
      end

      it 'configures custom metrics' do
        verify_add_custom_metric
        verify_edit_custom_metric
        verify_delete_custom_metric
      end

      it 'duplicates to create dashboard to custom' do
        Page::Project::Menu.perform(&:go_to_operations_metrics)

        Page::Project::Operations::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' do
        Page::Project::Menu.perform(&:go_to_operations_metrics)

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

          expect(on_dashboard).to have_metrics
        end
      end

      it 'filters using the quick range' do
        Page::Project::Menu.perform(&:go_to_operations_metrics)

        Page::Project::Operations::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' do
        Page::Project::Menu.perform(&:go_to_operations_kubernetes)

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

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

      private

      def deploy_project_with_prometheus
        %w[
          CODE_QUALITY_DISABLED TEST_DISABLED LICENSE_MANAGEMENT_DISABLED
          SAST_DISABLED DAST_DISABLED DEPENDENCY_SCANNING_DISABLED
          CONTAINER_SCANNING_DISABLED PERFORMANCE_DISABLED SECRET_DETECTION_DISABLED
        ].each do |key|
          Resource::CiVariable.fabricate_via_api! do |resource|
            resource.project = @project
            resource.key = key
            resource.value = '1'
            resource.masked = false
          end
        end

        Flow::Login.sign_in

        Resource::KubernetesCluster::ProjectCluster.fabricate! do |cluster_settings|
          cluster_settings.project = @project
          cluster_settings.cluster = @cluster
          cluster_settings.install_runner = true
          cluster_settings.install_ingress = true
          cluster_settings.install_prometheus = true
        end

        Resource::Pipeline.fabricate_via_api! do |pipeline|
          pipeline.project = @project
        end.visit!

        Page::Project::Pipeline::Show.perform do |pipeline|
          pipeline.click_job('build')
        end
        Page::Project::Job::Show.perform do |job|
          expect(job).to be_successful(timeout: 600)

          job.click_element(:pipeline_path)
        end

        Page::Project::Pipeline::Show.perform do |pipeline|
          pipeline.click_job('production')
        end
        Page::Project::Job::Show.perform do |job|
          expect(job).to be_successful(timeout: 1200)

          job.click_element(:pipeline_path)
        end
      end

      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_operations_metrics)

        Page::Project::Operations::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_operations_metrics)

        Page::Project::Operations::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_operations_metrics)

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