From 51585a32d0f9eeff943cb698e0bdd53209c14aff Mon Sep 17 00:00:00 2001 From: Rudy Crespo <rcrespo@gitlab.com> Date: Thu, 9 Mar 2023 15:29:33 +0000 Subject: [PATCH] Provide legacy page data if feature flag disabled As part of the conversion to GraphQL, legacy page data will only be passed down to app if the contribution-analytics-graphql feature flag is disabled. EE: true --- .../analytics/contribution_analytics/index.js | 13 ++++++- .../contribution_analytics/show.html.haml | 11 +----- .../contribution_analytics/data_collector.rb | 17 +++++++++ .../data_collector_spec.rb | 35 ++++++++++++++++++- 4 files changed, 64 insertions(+), 12 deletions(-) diff --git a/ee/app/assets/javascripts/analytics/contribution_analytics/index.js b/ee/app/assets/javascripts/analytics/contribution_analytics/index.js index 71f2a32e2e36b..1681c16f51c29 100644 --- a/ee/app/assets/javascripts/analytics/contribution_analytics/index.js +++ b/ee/app/assets/javascripts/analytics/contribution_analytics/index.js @@ -1,5 +1,6 @@ import Vue from 'vue'; import VueApollo from 'vue-apollo'; +import * as Sentry from '@sentry/browser'; import createDefaultClient from '~/lib/graphql'; import LegacyApp from './legacy_components/app.vue'; import App from './components/app.vue'; @@ -27,12 +28,22 @@ export default (el) => { memberContributionsPath, } = el.dataset; + let analyticsDataParsed = {}; + + if (!gon.features?.contributionAnalyticsGraphql) { + try { + analyticsDataParsed = JSON.parse(analyticsData); + } catch (e) { + Sentry.captureException(e); + } + } + const { labels, push, merge_requests_created: mergeRequestsCreated, issues_closed: issuesClosed, - } = JSON.parse(analyticsData); + } = analyticsDataParsed; return new Vue({ el, diff --git a/ee/app/views/groups/contribution_analytics/show.html.haml b/ee/app/views/groups/contribution_analytics/show.html.haml index 6fcae73653376..97433f2f960ca 100644 --- a/ee/app/views/groups/contribution_analytics/show.html.haml +++ b/ee/app/views/groups/contribution_analytics/show.html.haml @@ -14,15 +14,6 @@ start_date: @start_date.to_date.iso8601, end_date: Date.today.iso8601, - analytics_data: @data_collector.group_member_contributions_table_data.to_json.html_safe, - total_push_count: @data_collector.total_push_count, - total_commit_count: @data_collector.total_commit_count, - total_push_author_count: @data_collector.total_push_author_count, - total_merge_requests_closed_count: @data_collector.total_merge_requests_closed_count, - total_merge_requests_created_count: @data_collector.total_merge_requests_created_count, - total_merge_requests_merged_count: @data_collector.total_merge_requests_merged_count, - total_issues_created_count: @data_collector.total_issues_created_count, - total_issues_closed_count: @data_collector.total_issues_closed_count, - member_contributions_path: group_contribution_analytics_path(@group, { start_date: @start_date, format: :json }) + **@data_collector.legacy_page_data } } diff --git a/ee/lib/gitlab/contribution_analytics/data_collector.rb b/ee/lib/gitlab/contribution_analytics/data_collector.rb index 63e73d039e6c5..0946555bd4ddb 100644 --- a/ee/lib/gitlab/contribution_analytics/data_collector.rb +++ b/ee/lib/gitlab/contribution_analytics/data_collector.rb @@ -130,6 +130,23 @@ def totals } end + def legacy_page_data + return {} if Feature.enabled?(:contribution_analytics_graphql, group) + + { + analytics_data: group_member_contributions_table_data.to_json.html_safe, + total_push_count: total_push_count, + total_commit_count: total_commit_count, + total_push_author_count: total_push_author_count, + total_merge_requests_closed_count: total_merge_requests_closed_count, + total_merge_requests_created_count: total_merge_requests_created_count, + total_merge_requests_merged_count: total_merge_requests_merged_count, + total_issues_created_count: total_issues_created_count, + total_issues_closed_count: total_issues_closed_count, + member_contributions_path: ::Gitlab::Routing.url_helpers.group_contribution_analytics_path(group, { start_date: from, format: :json }) + } + end + # rubocop: disable CodeReuse/ActiveRecord def base_query cte = Gitlab::SQL::CTE.new(:project_ids, diff --git a/ee/spec/lib/gitlab/contribution_analytics/data_collector_spec.rb b/ee/spec/lib/gitlab/contribution_analytics/data_collector_spec.rb index 9ef6f4c5a980b..c63e321a075ea 100644 --- a/ee/spec/lib/gitlab/contribution_analytics/data_collector_spec.rb +++ b/ee/spec/lib/gitlab/contribution_analytics/data_collector_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Gitlab::ContributionAnalytics::DataCollector do +RSpec.describe Gitlab::ContributionAnalytics::DataCollector, feature_category: :value_stream_management do let_it_be(:group) { create(:group) } let_it_be(:project1) { create(:project, group: group) } let_it_be(:project2) { create(:project, group: group) } @@ -136,4 +136,37 @@ end end end + + describe '#legacy_page_data' do + subject { described_class.new(group: group).legacy_page_data } + + context 'when contribution_analytics_graphql feature flag is enabled' do + before do + stub_feature_flags(contribution_analytics_graphql: true) + end + + it { is_expected.to eq({}) } + end + + context 'when contribution_analytics_graphql feature flag is not enabled' do + before do + stub_feature_flags(contribution_analytics_graphql: false) + end + + it { + is_expected.to include( + :analytics_data, + :total_push_count, + :total_commit_count, + :total_push_author_count, + :total_merge_requests_closed_count, + :total_merge_requests_created_count, + :total_merge_requests_merged_count, + :total_issues_created_count, + :total_issues_closed_count, + :member_contributions_path + ) + } + end + end end -- GitLab