From 5c088584eccf89f389866d37a1c18400c002eaf8 Mon Sep 17 00:00:00 2001 From: Reuben Pereira Date: Wed, 29 May 2019 13:36:36 +0000 Subject: Make external_dashboard_url available to frontend - On Operations settings page - On Metrics dashboard page --- app/helpers/environments_helper.rb | 3 +- app/helpers/projects_helper.rb | 4 ++ app/models/project.rb | 1 + .../operations/_external_dashboard.html.haml | 2 +- spec/helpers/environments_helper_spec.rb | 49 ++++++++++++++++++++++ spec/helpers/projects_helper_spec.rb | 22 ++++++++++ 6 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 spec/helpers/environments_helper_spec.rb diff --git a/app/helpers/environments_helper.rb b/app/helpers/environments_helper.rb index 365b94f5a3e..8002eb08ada 100644 --- a/app/helpers/environments_helper.rb +++ b/app/helpers/environments_helper.rb @@ -30,7 +30,8 @@ module EnvironmentsHelper "environments-endpoint": project_environments_path(project, format: :json), "project-path" => project_path(project), "tags-path" => project_tags_path(project), - "has-metrics" => "#{environment.has_metrics?}" + "has-metrics" => "#{environment.has_metrics?}", + "external-dashboard-url" => project.metrics_setting_external_dashboard_url } end end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 4cf1d6e93a5..e587cf4045d 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -343,6 +343,10 @@ module ProjectsHelper description.html_safe % { project_name: project.name } end + def metrics_external_dashboard_url + @project.metrics_setting_external_dashboard_url + end + private def get_project_nav_tabs(project, current_user) diff --git a/app/models/project.rb b/app/models/project.rb index ab4da61dcf8..20895923d3b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -309,6 +309,7 @@ class Project < ApplicationRecord delegate :group_clusters_enabled?, to: :group, allow_nil: true delegate :root_ancestor, to: :namespace, allow_nil: true delegate :last_pipeline, to: :commit, allow_nil: true + delegate :external_dashboard_url, to: :metrics_setting, allow_nil: true, prefix: true # Validations validates :creator, presence: true, on: :create diff --git a/app/views/projects/settings/operations/_external_dashboard.html.haml b/app/views/projects/settings/operations/_external_dashboard.html.haml index 2fbb9195a04..f049c35b38d 100644 --- a/app/views/projects/settings/operations/_external_dashboard.html.haml +++ b/app/views/projects/settings/operations/_external_dashboard.html.haml @@ -1,2 +1,2 @@ -.js-operation-settings{ data: { external_dashboard: { path: '', +.js-operation-settings{ data: { external_dashboard: { path: metrics_external_dashboard_url, help_page_path: help_page_path('user/project/operations/link_to_external_dashboard') } } } diff --git a/spec/helpers/environments_helper_spec.rb b/spec/helpers/environments_helper_spec.rb new file mode 100644 index 00000000000..0c8a8d2f032 --- /dev/null +++ b/spec/helpers/environments_helper_spec.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe EnvironmentsHelper do + set(:environment) { create(:environment) } + set(:project) { environment.project } + set(:user) { create(:user) } + + describe '#metrics_data' do + before do + # This is so that this spec also passes in EE. + allow(helper).to receive(:current_user).and_return(user) + allow(helper).to receive(:can?).and_return(true) + end + + let(:metrics_data) { helper.metrics_data(project, environment) } + + it 'returns data' do + expect(metrics_data).to include( + 'settings-path' => edit_project_service_path(project, 'prometheus'), + 'clusters-path' => project_clusters_path(project), + 'current-environment-name': environment.name, + 'documentation-path' => help_page_path('administration/monitoring/prometheus/index.md'), + 'empty-getting-started-svg-path' => match_asset_path('/assets/illustrations/monitoring/getting_started.svg'), + 'empty-loading-svg-path' => match_asset_path('/assets/illustrations/monitoring/loading.svg'), + 'empty-no-data-svg-path' => match_asset_path('/assets/illustrations/monitoring/no_data.svg'), + 'empty-unable-to-connect-svg-path' => match_asset_path('/assets/illustrations/monitoring/unable_to_connect.svg'), + 'metrics-endpoint' => additional_metrics_project_environment_path(project, environment, format: :json), + 'deployment-endpoint' => project_environment_deployments_path(project, environment, format: :json), + 'environments-endpoint': project_environments_path(project, format: :json), + 'project-path' => project_path(project), + 'tags-path' => project_tags_path(project), + 'has-metrics' => "#{environment.has_metrics?}", + 'external-dashboard-url' => nil + ) + end + + context 'with metrics_setting' do + before do + create(:project_metrics_setting, project: project, external_dashboard_url: 'http://gitlab.com') + end + + it 'adds external_dashboard_url' do + expect(metrics_data['external-dashboard-url']).to eq('http://gitlab.com') + end + end + end +end diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 83271aa24a3..3716879c458 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -819,4 +819,26 @@ describe ProjectsHelper do expect(helper.can_import_members?).to eq true end end + + describe '#metrics_external_dashboard_url' do + let(:project) { create(:project) } + + before do + helper.instance_variable_set(:@project, project) + end + + context 'metrics_setting exists' do + it 'returns external_dashboard_url' do + metrics_setting = create(:project_metrics_setting, project: project) + + expect(helper.metrics_external_dashboard_url).to eq(metrics_setting.external_dashboard_url) + end + end + + context 'metrics_setting does not exist' do + it 'returns nil' do + expect(helper.metrics_external_dashboard_url).to eq(nil) + end + end + end end -- cgit v1.2.3