Commit 584f531d authored by Mike Jang's avatar Mike Jang

Merge branch '235797-fix-issues-analytics-feature-name' into 'master'

Make Issue Analytics singular

Closes #235797

See merge request gitlab-org/gitlab!39506
parents a85234a2 509a93d0
...@@ -871,7 +871,7 @@ $popover-max-width: 384px; ...@@ -871,7 +871,7 @@ $popover-max-width: 384px;
$popover-box-shadow: 0 2px 3px 1px $gray-100; $popover-box-shadow: 0 2px 3px 1px $gray-100;
/* /*
Issues Analytics Issue Analytics
*/ */
$issues-analytics-popover-boarder-color: rgba(0, 0, 0, 0.15); $issues-analytics-popover-boarder-color: rgba(0, 0, 0, 0.15);
......
...@@ -156,7 +156,7 @@ The following documentation relates to the DevOps **Create** stage: ...@@ -156,7 +156,7 @@ The following documentation relates to the DevOps **Create** stage:
| [File locking](user/project/file_lock.md) **(PREMIUM)** | Lock files to avoid merge conflicts. | | [File locking](user/project/file_lock.md) **(PREMIUM)** | Lock files to avoid merge conflicts. |
| [GitLab Pages](user/project/pages/index.md) | Build, test, and deploy your static website with GitLab Pages. | | [GitLab Pages](user/project/pages/index.md) | Build, test, and deploy your static website with GitLab Pages. |
| [Groups](user/group/index.md) and [Subgroups](user/group/subgroups/index.md) | Organize your projects in groups. | | [Groups](user/group/index.md) and [Subgroups](user/group/subgroups/index.md) | Organize your projects in groups. |
| [Issues Analytics](user/group/issues_analytics/index.md) **(PREMIUM)** | Check how many issues were created per month. | | [Issue Analytics](user/group/issues_analytics/index.md) **(PREMIUM)** | Check how many issues were created per month. |
| [Merge Request Analytics](user/analytics/merge_request_analytics.md) **(PREMIUM)** | Check your throughput productivity - how many merge requests were merged per month. | | [Merge Request Analytics](user/analytics/merge_request_analytics.md) **(PREMIUM)** | Check your throughput productivity - how many merge requests were merged per month. |
| [Projects](user/project/index.md), including [project access](public_access/public_access.md)<br/>and [settings](user/project/settings/index.md) | Host source code, and control your project's visibility and set configuration. | | [Projects](user/project/index.md), including [project access](public_access/public_access.md)<br/>and [settings](user/project/settings/index.md) | Host source code, and control your project's visibility and set configuration. |
| [Search through GitLab](user/search/index.md) | Search for issues, merge requests, projects, groups, and todos. | | [Search through GitLab](user/search/index.md) | Search for issues, merge requests, projects, groups, and todos. |
......
...@@ -24,7 +24,7 @@ The following analytics features are available at the group level: ...@@ -24,7 +24,7 @@ The following analytics features are available at the group level:
- [Contribution](../group/contribution_analytics/index.md). **(STARTER)** - [Contribution](../group/contribution_analytics/index.md). **(STARTER)**
- [Insights](../group/insights/index.md). **(ULTIMATE)** - [Insights](../group/insights/index.md). **(ULTIMATE)**
- [Issues](../group/issues_analytics/index.md). **(PREMIUM)** - [Issue](../group/issues_analytics/index.md). **(PREMIUM)**
- [Productivity](productivity_analytics.md), enabled with the `productivity_analytics` - [Productivity](productivity_analytics.md), enabled with the `productivity_analytics`
[feature flag](../../development/feature_flags/development.md#enabling-a-feature-flag-locally-in-development). **(PREMIUM)** [feature flag](../../development/feature_flags/development.md#enabling-a-feature-flag-locally-in-development). **(PREMIUM)**
- [Value Stream](value_stream_analytics.md), enabled with the `cycle_analytics` - [Value Stream](value_stream_analytics.md), enabled with the `cycle_analytics`
...@@ -37,7 +37,7 @@ The following analytics features are available at the project level: ...@@ -37,7 +37,7 @@ The following analytics features are available at the project level:
- [CI/CD](../../ci/pipelines/index.md#pipeline-success-and-duration-charts). **(STARTER)** - [CI/CD](../../ci/pipelines/index.md#pipeline-success-and-duration-charts). **(STARTER)**
- [Code Review](code_review_analytics.md). **(STARTER)** - [Code Review](code_review_analytics.md). **(STARTER)**
- [Insights](../group/insights/index.md). **(ULTIMATE)** - [Insights](../group/insights/index.md). **(ULTIMATE)**
- [Issues](../group/issues_analytics/index.md). **(PREMIUM)** - [Issue](../group/issues_analytics/index.md). **(PREMIUM)**
- [Merge Request](merge_request_analytics.md). **(STARTER)** - [Merge Request](merge_request_analytics.md). **(STARTER)**
- [Repository](repository_analytics.md). - [Repository](repository_analytics.md).
- [Value Stream](value_stream_analytics.md), enabled with the `cycle_analytics` - [Value Stream](value_stream_analytics.md), enabled with the `cycle_analytics`
......
...@@ -743,9 +743,9 @@ With [GitLab Contribution Analytics](contribution_analytics/index.md), ...@@ -743,9 +743,9 @@ With [GitLab Contribution Analytics](contribution_analytics/index.md),
you have an overview of the contributions (pushes, merge requests, you have an overview of the contributions (pushes, merge requests,
and issues) performed by your group members. and issues) performed by your group members.
## Issues analytics **(PREMIUM)** ## Issue analytics **(PREMIUM)**
With [GitLab Issues Analytics](issues_analytics/index.md), you can see a bar chart of the number of issues created each month in your groups. With [GitLab Issue Analytics](issues_analytics/index.md), you can see a bar chart of the number of issues created each month in your groups.
## Dependency Proxy **(PREMIUM)** ## Dependency Proxy **(PREMIUM)**
......
...@@ -5,16 +5,16 @@ group: Analytics ...@@ -5,16 +5,16 @@ group: Analytics
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
--- ---
# Issues Analytics **(PREMIUM)** # Issue Analytics **(PREMIUM)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7478) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.5. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7478) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.5.
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/196561) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.9 at the project level. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/196561) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.9 at the project level.
Issues Analytics is a bar graph which illustrates the number of issues created each month. Issue Analytics is a bar graph which illustrates the number of issues created each month.
The default timespan is 13 months, which includes the current month, and the 12 months The default timespan is 13 months, which includes the current month, and the 12 months
prior. prior.
To access the chart, navigate to your group or project sidebar and select **{chart}** **Analytics > Issues Analytics**. To access the chart, navigate to your group or project sidebar and select **{chart}** **Analytics > Issue Analytics**.
Hover over each bar to see the total number of issues. Hover over each bar to see the total number of issues.
......
...@@ -167,7 +167,7 @@ The following table depicts the various user permission levels in a project. ...@@ -167,7 +167,7 @@ The following table depicts the various user permission levels in a project.
| View CI\CD analytics | | ✓ | ✓ | ✓ | ✓ | | View CI\CD analytics | | ✓ | ✓ | ✓ | ✓ |
| View Code Review analytics **(STARTER)** | | ✓ | ✓ | ✓ | ✓ | | View Code Review analytics **(STARTER)** | | ✓ | ✓ | ✓ | ✓ |
| View Insights **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ | | View Insights **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
| View Issues analytics **(PREMIUM)** | ✓ | ✓ | ✓ | ✓ | ✓ | | View Issue analytics **(PREMIUM)** | ✓ | ✓ | ✓ | ✓ | ✓ |
| View Merge Request analytics **(STARTER)** | ✓ | ✓ | ✓ | ✓ | ✓ | | View Merge Request analytics **(STARTER)** | ✓ | ✓ | ✓ | ✓ | ✓ |
| View Repository analytics | | ✓ | ✓ | ✓ | ✓ | | View Repository analytics | | ✓ | ✓ | ✓ | ✓ |
| View Value Stream analytics | ✓ | ✓ | ✓ | ✓ | ✓ | | View Value Stream analytics | ✓ | ✓ | ✓ | ✓ | ✓ |
...@@ -272,7 +272,7 @@ group. ...@@ -272,7 +272,7 @@ group.
| Disable notification emails | | | | | ✓ | | Disable notification emails | | | | | ✓ |
| View Contribution analytics | ✓ | ✓ | ✓ | ✓ | ✓ | | View Contribution analytics | ✓ | ✓ | ✓ | ✓ | ✓ |
| View Insights **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ | | View Insights **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
| View Issues analytics **(PREMIUM)** | ✓ | ✓ | ✓ | ✓ | ✓ | | View Issue analytics **(PREMIUM)** | ✓ | ✓ | ✓ | ✓ | ✓ |
| View Productivity analytics **(PREMIUM)** | | ✓ | ✓ | ✓ | ✓ | | View Productivity analytics **(PREMIUM)** | | ✓ | ✓ | ✓ | ✓ |
| View Value Stream analytics | ✓ | ✓ | ✓ | ✓ | ✓ | | View Value Stream analytics | ✓ | ✓ | ✓ | ✓ | ✓ |
| View Billing **(FREE ONLY)** | | | | | ✓ (4) | | View Billing **(FREE ONLY)** | | | | | ✓ (4) |
......
...@@ -29,7 +29,7 @@ export default class FilteredSearchIssueAnalytics extends FilteredSearchManager ...@@ -29,7 +29,7 @@ export default class FilteredSearchIssueAnalytics extends FilteredSearchManager
} }
/** /**
* Updates issues analytics store and window history * Updates issue analytics store and window history
* with filter path * with filter path
*/ */
updateObject = path => { updateObject = path => {
......
/** /**
* This util method takes the global page filters and transforms parameters which * This util method takes the global page filters and transforms parameters which
* are not standardized between the internal issues analytics api and the public * are not standardized between the internal issue analytics api and the public
* issues api. * issues api.
* *
* @param {Object} filters the global filters used to fetch issues data * @param {Object} filters the global filters used to fetch issues data
......
...@@ -34,7 +34,7 @@ module EE ...@@ -34,7 +34,7 @@ module EE
return unless project_nav_tab?(:issues_analytics) return unless project_nav_tab?(:issues_analytics)
navbar_sub_item( navbar_sub_item(
title: _('Issues'), title: _('Issue'),
path: 'issues_analytics#show', path: 'issues_analytics#show',
link: project_analytics_issues_analytics_path(project) link: project_analytics_issues_analytics_path(project)
) )
...@@ -108,7 +108,7 @@ module EE ...@@ -108,7 +108,7 @@ module EE
return unless group_sidebar_link?(:analytics) return unless group_sidebar_link?(:analytics)
navbar_sub_item( navbar_sub_item(
title: _('Issues'), title: _('Issue'),
path: 'issues_analytics#show', path: 'issues_analytics#show',
link: group_issues_analytics_path(group) link: group_issues_analytics_path(group)
) )
......
- page_title _('Issues Analytics') - page_title _('Issue Analytics')
.mb-3 .mb-3
%h3 %h3
= _('Issues Analytics') = _('Issue Analytics')
= render 'shared/issuable/search_bar', type: :issues_analytics, show_sorting_dropdown: false, placeholder: _('Filter results...') = render 'shared/issuable/search_bar', type: :issues_analytics, show_sorting_dropdown: false, placeholder: _('Filter results...')
#js-issues-analytics{ data: { endpoint: group_issues_analytics_path(@group), no_data_empty_state_svg_path: image_path('illustrations/monitoring/getting_started.svg'), filters_empty_state_svg_path: image_path('illustrations/issues.svg'), issues_api_endpoint: expose_url(api_v4_groups_issues_path(id: @group.id)), issues_page_endpoint: issues_group_path(@group) } } #js-issues-analytics{ data: { endpoint: group_issues_analytics_path(@group), no_data_empty_state_svg_path: image_path('illustrations/monitoring/getting_started.svg'), filters_empty_state_svg_path: image_path('illustrations/issues.svg'), issues_api_endpoint: expose_url(api_v4_groups_issues_path(id: @group.id)), issues_page_endpoint: issues_group_path(@group) } }
- page_title _('Issues Analytics') - page_title _('Issue Analytics')
.mb-3 .mb-3
%h3 %h3
= _('Issues Analytics') = _('Issue Analytics')
= render 'shared/issuable/search_bar', type: :issues_analytics, show_sorting_dropdown: false, placeholder: _('Filter results...') = render 'shared/issuable/search_bar', type: :issues_analytics, show_sorting_dropdown: false, placeholder: _('Filter results...')
#js-issues-analytics{ data: { endpoint: project_analytics_issues_analytics_path(@project), no_data_empty_state_svg_path: image_path('illustrations/monitoring/getting_started.svg'), filters_empty_state_svg_path: image_path('illustrations/issues.svg'), issues_api_endpoint: expose_url(api_v4_projects_issues_path(id: @project.id)), issues_page_endpoint: project_issues_path(@project) } } #js-issues-analytics{ data: { endpoint: project_analytics_issues_analytics_path(@project), no_data_empty_state_svg_path: image_path('illustrations/monitoring/getting_started.svg'), filters_empty_state_svg_path: image_path('illustrations/issues.svg'), issues_api_endpoint: expose_url(api_v4_projects_issues_path(id: @project.id)), issues_page_endpoint: project_issues_path(@project) } }
---
title: Re-name Issues Analytics (plural) as Issue Analytics (singular)
merge_request: 39506
author:
type: changed
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Groups::IssuesAnalyticsController do RSpec.describe Groups::IssuesAnalyticsController do
it_behaves_like 'issues analytics controller' do it_behaves_like 'issue analytics controller' do
let_it_be(:user) { create(:user) } let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group) } let_it_be(:group) { create(:group) }
let_it_be(:project1) { create(:project, :empty_repo, namespace: group) } let_it_be(:project1) { create(:project, :empty_repo, namespace: group) }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Projects::Analytics::IssuesAnalyticsController do RSpec.describe Projects::Analytics::IssuesAnalyticsController do
it_behaves_like 'issues analytics controller' do it_behaves_like 'issue analytics controller' do
let_it_be(:user) { create(:user) } let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group) } let_it_be(:group) { create(:group) }
let_it_be(:project1) { create(:project, :empty_repo, namespace: group) } let_it_be(:project1) { create(:project, :empty_repo, namespace: group) }
......
...@@ -36,7 +36,7 @@ RSpec.describe 'Group active tab' do ...@@ -36,7 +36,7 @@ RSpec.describe 'Group active tab' do
end end
it_behaves_like 'page has active tab', _('Analytics') it_behaves_like 'page has active tab', _('Analytics')
it_behaves_like 'page has active sub tab', _('Issues') it_behaves_like 'page has active sub tab', _('Issue')
end end
context 'on group Contribution Analytics' do context 'on group Contribution Analytics' do
......
...@@ -19,14 +19,14 @@ RSpec.describe 'Project navbar' do ...@@ -19,14 +19,14 @@ RSpec.describe 'Project navbar' do
sign_in(user) sign_in(user)
end end
context 'when issues analytics is available' do context 'when issue analytics is available' do
before do before do
stub_licensed_features(issues_analytics: true) stub_licensed_features(issues_analytics: true)
insert_after_sub_nav_item( insert_after_sub_nav_item(
_('Code Review'), _('Code Review'),
within: _('Analytics'), within: _('Analytics'),
new_sub_nav_item_name: _('Issues') new_sub_nav_item_name: _('Issue')
) )
visit project_path(project) visit project_path(project)
......
...@@ -18,7 +18,7 @@ jest.mock('ee/issues_analytics/filtered_search_issues_analytics', () => ...@@ -18,7 +18,7 @@ jest.mock('ee/issues_analytics/filtered_search_issues_analytics', () =>
const localVue = createLocalVue(); const localVue = createLocalVue();
localVue.use(Vuex); localVue.use(Vuex);
describe('Issues Analytics component', () => { describe('Issue Analytics component', () => {
let wrapper; let wrapper;
let store; let store;
let mountComponent; let mountComponent;
......
...@@ -2,7 +2,7 @@ import createState from 'ee/issues_analytics/stores/modules/issue_analytics/stat ...@@ -2,7 +2,7 @@ import createState from 'ee/issues_analytics/stores/modules/issue_analytics/stat
import mutations from 'ee/issues_analytics/stores/modules/issue_analytics/mutations'; import mutations from 'ee/issues_analytics/stores/modules/issue_analytics/mutations';
import * as types from 'ee/issues_analytics/stores/modules/issue_analytics/mutation_types'; import * as types from 'ee/issues_analytics/stores/modules/issue_analytics/mutation_types';
describe('Issues Analytics mutations', () => { describe('Issue Analytics mutations', () => {
let state; let state;
beforeEach(() => { beforeEach(() => {
......
...@@ -7,7 +7,7 @@ const originalFilters = { ...@@ -7,7 +7,7 @@ const originalFilters = {
}; };
const tranformedFilters = { labels: ['one', 'two'], milestone: 'title', author_username: 'root' }; const tranformedFilters = { labels: ['one', 'two'], milestone: 'title', author_username: 'root' };
describe('issues analytics utils', () => { describe('issue analytics utils', () => {
describe('transformFilters', () => { describe('transformFilters', () => {
it('transforms the object keys as expected', () => { it('transforms the object keys as expected', () => {
const filters = transformFilters(originalFilters); const filters = transformFilters(originalFilters);
......
# frozen_string_literal: true # frozen_string_literal: true
RSpec.shared_examples 'issues analytics controller' do RSpec.shared_examples 'issue analytics controller' do
describe 'GET #show' do describe 'GET #show' do
subject { get :show, params: params } subject { get :show, params: params }
context 'when issues analytics is not available for license' do context 'when issue analytics is not available for license' do
it 'renders 404' do it 'renders 404' do
subject subject
...@@ -26,7 +26,7 @@ RSpec.shared_examples 'issues analytics controller' do ...@@ -26,7 +26,7 @@ RSpec.shared_examples 'issues analytics controller' do
end end
end end
context 'when issues analytics is available for license' do context 'when issue analytics is available for license' do
before do before do
stub_licensed_features(issues_analytics: true) stub_licensed_features(issues_analytics: true)
end end
......
...@@ -13381,6 +13381,9 @@ msgstr "" ...@@ -13381,6 +13381,9 @@ msgstr ""
msgid "Issue %{issue_reference} has already been added to epic %{epic_reference}." msgid "Issue %{issue_reference} has already been added to epic %{epic_reference}."
msgstr "" msgstr ""
msgid "Issue Analytics"
msgstr ""
msgid "Issue Boards" msgid "Issue Boards"
msgstr "" msgstr ""
...@@ -13480,9 +13483,6 @@ msgstr "" ...@@ -13480,9 +13483,6 @@ msgstr ""
msgid "Issues" msgid "Issues"
msgstr "" msgstr ""
msgid "Issues Analytics"
msgstr ""
msgid "Issues Rate Limits" msgid "Issues Rate Limits"
msgstr "" msgstr ""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment