bf918b68f6
https://gitlab.com/gitlab-org/gitlab-ce/issues/62971 Adds support to EnvironmentsController#metrics_dashboard for the following params: group, title, y_label These params are used to uniquely identify a panel on the metrics dashboard. Metrics are stored in several places, so this adds utilities to find a specific panel from the database or filesystem depending on the metric specified. Also moves some shared utilities into separate classes, notably default values and errors.
69 lines
2.3 KiB
Ruby
69 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module MetricsDashboardHelpers
|
|
def project_with_dashboard(dashboard_path, dashboard_yml = nil)
|
|
dashboard_yml ||= fixture_file('lib/gitlab/metrics/dashboard/sample_dashboard.yml')
|
|
|
|
create(:project, :custom_repo, files: { dashboard_path => dashboard_yml })
|
|
end
|
|
|
|
def delete_project_dashboard(project, user, dashboard_path)
|
|
project.repository.delete_file(
|
|
user,
|
|
dashboard_path,
|
|
branch_name: 'master',
|
|
message: 'Delete dashboard'
|
|
)
|
|
|
|
project.repository.refresh_method_caches([:metrics_dashboard])
|
|
end
|
|
|
|
def system_dashboard_path
|
|
Metrics::Dashboard::SystemDashboardService::SYSTEM_DASHBOARD_PATH
|
|
end
|
|
|
|
def business_metric_title
|
|
PrometheusMetricEnums.group_details[:business][:group_title]
|
|
end
|
|
|
|
shared_examples_for 'misconfigured dashboard service response' do |status_code|
|
|
it 'returns an appropriate message and status code' do
|
|
result = service_call
|
|
|
|
expect(result.keys).to contain_exactly(:message, :http_status, :status)
|
|
expect(result[:status]).to eq(:error)
|
|
expect(result[:http_status]).to eq(status_code)
|
|
end
|
|
end
|
|
|
|
shared_examples_for 'valid dashboard service response for schema' do
|
|
it 'returns a json representation of the dashboard' do
|
|
result = service_call
|
|
|
|
expect(result.keys).to contain_exactly(:dashboard, :status)
|
|
expect(result[:status]).to eq(:success)
|
|
|
|
expect(JSON::Validator.fully_validate(dashboard_schema, result[:dashboard])).to be_empty
|
|
end
|
|
end
|
|
|
|
shared_examples_for 'valid dashboard service response' do
|
|
let(:dashboard_schema) { JSON.parse(fixture_file('lib/gitlab/metrics/dashboard/schemas/dashboard.json')) }
|
|
|
|
it_behaves_like 'valid dashboard service response for schema'
|
|
end
|
|
|
|
shared_examples_for 'valid embedded dashboard service response' do
|
|
let(:dashboard_schema) { JSON.parse(fixture_file('lib/gitlab/metrics/dashboard/schemas/embedded_dashboard.json')) }
|
|
|
|
it_behaves_like 'valid dashboard service response for schema'
|
|
end
|
|
|
|
shared_examples_for 'raises error for users with insufficient permissions' do
|
|
context 'when the user does not have sufficient access' do
|
|
let(:user) { build(:user) }
|
|
|
|
it_behaves_like 'misconfigured dashboard service response', :unauthorized
|
|
end
|
|
end
|
|
end
|