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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/admin/users/components/actions/ban.vue7
-rw-r--r--app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue2
-rw-r--r--app/assets/javascripts/environments/components/environments_app.vue36
-rw-r--r--app/assets/javascripts/environments/constants.js2
-rw-r--r--app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue2
-rw-r--r--app/assets/javascripts/terraform/components/states_table_actions.vue2
-rw-r--r--app/finders/issues_finder.rb13
-rw-r--r--app/finders/issues_finder/params.rb8
-rw-r--r--app/graphql/resolvers/issues_resolver.rb3
-rw-r--r--app/graphql/types/packages/nuget/dependency_link_metadatum_type.rb2
-rw-r--r--app/helpers/issues_helper.rb4
-rw-r--r--app/models/issue.rb17
-rw-r--r--app/policies/issue_policy.rb7
-rw-r--r--app/services/service_ping/permit_data_categories_service.rb8
-rw-r--r--app/views/admin/application_settings/appearances/_form.html.haml2
-rw-r--r--app/views/projects/issues/_issue.html.haml3
-rw-r--r--config/metrics/counts_28d/20210216181508_i_quickactions_approve_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181512_i_quickactions_assign_single_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181519_i_quickactions_assign_self_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181523_i_quickactions_assign_reviewer_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181527_i_quickactions_award_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181530_i_quickactions_board_move_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181541_i_quickactions_clone_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181545_i_quickactions_close_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181549_i_quickactions_confidential_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181553_i_quickactions_copy_metadata_merge_request_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181556_i_quickactions_copy_metadata_issue_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181600_i_quickactions_create_merge_request_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181604_i_quickactions_done_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181607_i_quickactions_draft_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181611_i_quickactions_due_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181615_i_quickactions_duplicate_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181622_i_quickactions_estimate_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181629_i_quickactions_label_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181633_i_quickactions_lock_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181637_i_quickactions_merge_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181641_i_quickactions_milestone_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181644_i_quickactions_move_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181659_i_quickactions_reassign_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181703_i_quickactions_reassign_reviewer_monthly.yml6
-rw-r--r--config/metrics/counts_28d/20210216181707_i_quickactions_rebase_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181710_i_quickactions_relabel_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181714_i_quickactions_relate_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181721_i_quickactions_remove_due_date_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181729_i_quickactions_remove_estimate_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181736_i_quickactions_remove_milestone_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181744_i_quickactions_remove_time_spent_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181747_i_quickactions_remove_zoom_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181751_i_quickactions_reopen_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181755_i_quickactions_shrug_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181758_i_quickactions_spend_subtract_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181802_i_quickactions_spend_add_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181806_i_quickactions_submit_review_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181809_i_quickactions_subscribe_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181813_i_quickactions_tableflip_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181817_i_quickactions_tag_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181821_i_quickactions_target_branch_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181824_i_quickactions_title_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181828_i_quickactions_todo_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181832_i_quickactions_unassign_specific_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181835_i_quickactions_unassign_all_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181839_i_quickactions_unassign_reviewer_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181843_i_quickactions_unlabel_specific_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181846_i_quickactions_unlabel_all_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181850_i_quickactions_unlock_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181854_i_quickactions_unsubscribe_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181901_i_quickactions_wip_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216181905_i_quickactions_zoom_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210216184803_quickactions_total_unique_counts_monthly.yml71
-rw-r--r--config/metrics/counts_28d/20210222041219_i_quickactions_invite_email_single_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210222041235_i_quickactions_invite_email_multiple_monthly.yml4
-rw-r--r--config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181506_i_quickactions_approve_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181510_i_quickactions_assign_single_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181517_i_quickactions_assign_self_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181521_i_quickactions_assign_reviewer_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181525_i_quickactions_award_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181529_i_quickactions_board_move_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181540_i_quickactions_clone_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181543_i_quickactions_close_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181547_i_quickactions_confidential_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181551_i_quickactions_copy_metadata_merge_request_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181554_i_quickactions_copy_metadata_issue_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181558_i_quickactions_create_merge_request_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181602_i_quickactions_done_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181605_i_quickactions_draft_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181609_i_quickactions_due_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181613_i_quickactions_duplicate_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181620_i_quickactions_estimate_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181628_i_quickactions_label_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181631_i_quickactions_lock_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181635_i_quickactions_merge_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181639_i_quickactions_milestone_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181642_i_quickactions_move_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181657_i_quickactions_reassign_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181701_i_quickactions_reassign_reviewer_weekly.yml6
-rw-r--r--config/metrics/counts_7d/20210216181705_i_quickactions_rebase_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181708_i_quickactions_relabel_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181712_i_quickactions_relate_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181719_i_quickactions_remove_due_date_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181727_i_quickactions_remove_estimate_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181734_i_quickactions_remove_milestone_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181742_i_quickactions_remove_time_spent_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181745_i_quickactions_remove_zoom_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181749_i_quickactions_reopen_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181753_i_quickactions_shrug_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181756_i_quickactions_spend_subtract_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181800_i_quickactions_spend_add_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181804_i_quickactions_submit_review_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181808_i_quickactions_subscribe_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181811_i_quickactions_tableflip_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181815_i_quickactions_tag_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181819_i_quickactions_target_branch_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181822_i_quickactions_title_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181826_i_quickactions_todo_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181830_i_quickactions_unassign_specific_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181833_i_quickactions_unassign_all_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181837_i_quickactions_unassign_reviewer_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181841_i_quickactions_unlabel_specific_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181845_i_quickactions_unlabel_all_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181848_i_quickactions_unlock_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181852_i_quickactions_unsubscribe_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181859_i_quickactions_wip_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210216181903_i_quickactions_zoom_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210303154557_i_quickactions_invite_email_single_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210303154600_i_quickactions_invite_email_multiple_weekly.yml4
-rw-r--r--config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml4
-rw-r--r--config/metrics/objects_schemas/collected_data_categories_schema.json2
-rw-r--r--config/metrics/schema.json2
-rw-r--r--db/migrate/20210722151951_add_columns_to_security_scans.rb21
-rw-r--r--db/migrate/20210728174349_add_fk_to_security_scans_columns.rb21
-rw-r--r--db/post_migrate/20210811214811_schedule_copy_ci_builds_columns_to_security_scans.rb33
-rw-r--r--db/schema_migrations/202107221519511
-rw-r--r--db/schema_migrations/202107281743491
-rw-r--r--db/schema_migrations/202108112148111
-rw-r--r--db/structure.sql11
-rw-r--r--doc/api/graphql/reference/index.md2
-rw-r--r--doc/development/service_ping/metrics_dictionary.md10
-rw-r--r--doc/user/admin_area/moderate_users.md6
-rw-r--r--generator_templates/usage_metric_definition/metric_definition.yml2
-rw-r--r--lib/gitlab/background_migration/copy_ci_builds_columns_to_security_scans.rb44
-rw-r--r--lib/gitlab/ci/reports/security/finding.rb3
-rw-r--r--lib/gitlab/usage/metric_definition.rb6
-rw-r--r--locale/gitlab.pot48
-rw-r--r--spec/db/schema_spec.rb3
-rw-r--r--spec/features/clusters/cluster_health_dashboard_spec.rb2
-rw-r--r--spec/finders/issues_finder_spec.rb162
-rw-r--r--spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml2
-rw-r--r--spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml2
-rw-r--r--spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_name_suggestions.yml2
-rw-r--r--spec/frontend/environments/environments_app_spec.js50
-rw-r--r--spec/frontend/terraform/components/states_table_actions_spec.js2
-rw-r--r--spec/graphql/mutations/design_management/delete_spec.rb39
-rw-r--r--spec/graphql/resolvers/issues_resolver_spec.rb6
-rw-r--r--spec/lib/gitlab/background_migration/copy_ci_builds_columns_to_security_scans_spec.rb51
-rw-r--r--spec/lib/gitlab/usage/docs/helper_spec.rb4
-rw-r--r--spec/lib/gitlab/usage/metric_definition_spec.rb4
-rw-r--r--spec/lib/gitlab/usage/metrics/instrumentations/collected_data_categories_metric_spec.rb2
-rw-r--r--spec/lib/gitlab/usage_data_metrics_spec.rb162
-rw-r--r--spec/lib/gitlab/usage_data_spec.rb2
-rw-r--r--spec/migrations/schedule_copy_ci_builds_columns_to_security_scans_spec.rb43
-rw-r--r--spec/models/issue_spec.rb59
-rw-r--r--spec/policies/issue_policy_spec.rb15
-rw-r--r--spec/services/service_ping/permit_data_categories_service_spec.rb2
-rw-r--r--spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb8
165 files changed, 1223 insertions, 246 deletions
diff --git a/app/assets/javascripts/admin/users/components/actions/ban.vue b/app/assets/javascripts/admin/users/components/actions/ban.vue
index 4e9cefbfdd7..e5ab0f9123f 100644
--- a/app/assets/javascripts/admin/users/components/actions/ban.vue
+++ b/app/assets/javascripts/admin/users/components/actions/ban.vue
@@ -6,10 +6,11 @@ import { I18N_USER_ACTIONS } from '../../constants';
// TODO: To be replaced with <template> content in https://gitlab.com/gitlab-org/gitlab/-/issues/320922
const messageHtml = `
- <p>${s__('AdminUsers|When banned, users:')}</p>
+ <p>${s__('AdminUsers|When banned:')}</p>
<ul>
- <li>${s__("AdminUsers|Can't log in.")}</li>
- <li>${s__("AdminUsers|Can't access Git repositories.")}</li>
+ <li>${s__("AdminUsers|The user can't log in.")}</li>
+ <li>${s__("AdminUsers|The user can't access git repositories.")}</li>
+ <li>${s__('AdminUsers|Issues authored by this user are hidden from other users.')}</li>
</ul>
<p>${s__('AdminUsers|You can unban their account in the future. Their data remains intact.')}</p>
<p>${sprintf(
diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue
index f104eb61e41..45c886978f1 100644
--- a/app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue
+++ b/app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue
@@ -78,7 +78,7 @@ export default {
return sprintf(
s__(
- 'ClusterIntegration|The Amazon Resource Name (ARN) associated with your role. If you do not have a provision role, first create one on %{startAwsLink}Amazon Web Services %{externalLinkIcon}%{endLink} using the above account and external IDs. %{startMoreInfoLink}More information%{endLink}',
+ 'ClusterIntegration|The Amazon Resource Name (ARN) associated with your role. If you do not have a provisioned role, first create one on %{startAwsLink}Amazon Web Services %{externalLinkIcon}%{endLink} using the above account and external IDs. %{startMoreInfoLink}More information%{endLink}',
),
{
startAwsLink:
diff --git a/app/assets/javascripts/environments/components/environments_app.vue b/app/assets/javascripts/environments/components/environments_app.vue
index e4cf5760987..105315dcf51 100644
--- a/app/assets/javascripts/environments/components/environments_app.vue
+++ b/app/assets/javascripts/environments/components/environments_app.vue
@@ -1,7 +1,9 @@
<script>
-import { GlBadge, GlButton, GlModalDirective, GlTab, GlTabs } from '@gitlab/ui';
+import { GlBadge, GlButton, GlModalDirective, GlTab, GlTabs, GlAlert } from '@gitlab/ui';
import createFlash from '~/flash';
+import { setCookie, getCookie, parseBoolean } from '~/lib/utils/common_utils';
import { s__ } from '~/locale';
+import { ENVIRONMENTS_SURVEY_DISMISSED_COOKIE_NAME } from '../constants';
import eventHub from '../event_hub';
import environmentsMixin from '../mixins/environments_mixin';
import EnvironmentsPaginationApiMixin from '../mixins/environments_pagination_api_mixin';
@@ -15,6 +17,12 @@ export default {
i18n: {
newEnvironmentButtonLabel: s__('Environments|New environment'),
reviewAppButtonLabel: s__('Environments|Enable review app'),
+ surveyAlertTitle: s__('Environments|Help us improve environments'),
+ surveyAlertText: s__(
+ 'Environments|Your feedback helps GitLab make environments better for you and other users. Participate and enter a sweepstake to win a USD 30 gift card.',
+ ),
+ surveyAlertButtonLabel: s__('Environments|Take the survey'),
+ surveyDismissButtonLabel: s__('Environments|Dismiss'),
},
modal: {
id: 'enable-review-app-info',
@@ -25,6 +33,7 @@ export default {
EnableReviewAppModal,
GlBadge,
GlButton,
+ GlAlert,
GlTab,
GlTabs,
StopEnvironmentModal,
@@ -56,6 +65,13 @@ export default {
required: true,
},
},
+ data() {
+ return {
+ environmentsSurveyAlertDismissed: parseBoolean(
+ getCookie(ENVIRONMENTS_SURVEY_DISMISSED_COOKIE_NAME),
+ ),
+ };
+ },
created() {
eventHub.$on('toggleFolder', this.toggleFolder);
@@ -105,6 +121,11 @@ export default {
openFolders.forEach((folder) => this.fetchChildEnvironments(folder));
}
},
+
+ onSurveyAlertDismiss() {
+ setCookie(ENVIRONMENTS_SURVEY_DISMISSED_COOKIE_NAME, 'true');
+ this.environmentsSurveyAlertDismissed = true;
+ },
},
};
</script>
@@ -135,6 +156,19 @@ export default {
>{{ $options.i18n.newEnvironmentButtonLabel }}</gl-button
>
</div>
+ <gl-alert
+ v-if="!environmentsSurveyAlertDismissed"
+ class="gl-my-4"
+ :title="$options.i18n.surveyAlertTitle"
+ :primary-button-text="$options.i18n.surveyAlertButtonLabel"
+ variant="info"
+ dismissible
+ :dismiss-label="$options.i18n.surveyDismissButtonLabel"
+ primary-button-link="https://gitlab.fra1.qualtrics.com/jfe/form/SV_a2xyFsAA4D0w0Jg"
+ @dismiss="onSurveyAlertDismiss"
+ >
+ {{ $options.i18n.surveyAlertText }}
+ </gl-alert>
<gl-tabs :value="activeTab" content-class="gl-display-none">
<gl-tab
v-for="(tab, idx) in tabs"
diff --git a/app/assets/javascripts/environments/constants.js b/app/assets/javascripts/environments/constants.js
index 6d427bef4e6..a02e72dfa72 100644
--- a/app/assets/javascripts/environments/constants.js
+++ b/app/assets/javascripts/environments/constants.js
@@ -38,3 +38,5 @@ export const CANARY_STATUS = {
};
export const CANARY_UPDATE_MODAL = 'confirm-canary-change';
+
+export const ENVIRONMENTS_SURVEY_DISMISSED_COOKIE_NAME = 'environments_survey_alert_dismissed';
diff --git a/app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue b/app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue
index ffccc1419a6..63b98f4143b 100644
--- a/app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue
+++ b/app/assets/javascripts/pages/admin/jobs/index/components/stop_jobs_modal.vue
@@ -18,7 +18,7 @@ export default {
computed: {
text() {
return s__(
- 'AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running.',
+ 'AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running.',
);
},
},
diff --git a/app/assets/javascripts/terraform/components/states_table_actions.vue b/app/assets/javascripts/terraform/components/states_table_actions.vue
index f8f7482422e..817c421823c 100644
--- a/app/assets/javascripts/terraform/components/states_table_actions.vue
+++ b/app/assets/javascripts/terraform/components/states_table_actions.vue
@@ -50,7 +50,7 @@ export default {
errorUpdate: s__('Terraform|An error occurred while changing the state file'),
lock: s__('Terraform|Lock'),
modalBody: s__(
- 'Terraform|You are about to remove the State file %{name}. This will permanently delete all the State versions and history. The infrastructure provisioned previously will remain intact, only the state file with all its versions are to be removed. This action is non-revertible.',
+ 'Terraform|You are about to remove the state file %{name}. This will permanently delete all the State versions and history. The infrastructure provisioned previously will remain intact, and only the state file with all its versions will be removed. This action cannot be undone.',
),
modalCancel: s__('Terraform|Cancel'),
modalHeader: s__('Terraform|Are you sure you want to remove the Terraform State %{name}?'),
diff --git a/app/finders/issues_finder.rb b/app/finders/issues_finder.rb
index 919274d340d..7595b1c7a15 100644
--- a/app/finders/issues_finder.rb
+++ b/app/finders/issues_finder.rb
@@ -47,17 +47,22 @@ class IssuesFinder < IssuableFinder
# rubocop: disable CodeReuse/ActiveRecord
def with_confidentiality_access_check
- return Issue.all if params.user_can_see_all_confidential_issues?
+ return Issue.all if params.user_can_see_all_issues?
+
+ # Only admins can see hidden issues, so for non-admins, we filter out any hidden issues
+ issues = Issue.without_hidden
+
+ return issues.all if params.user_can_see_all_confidential_issues?
# If already filtering by assignee we can skip confidentiality since a user
# can always see confidential issues assigned to them. This is just an
# optimization since a very common usecase of this Finder is to load the
# count of issues assigned to the user for the header bar.
- return Issue.all if current_user && assignee_filter.includes_user?(current_user)
+ return issues.all if current_user && assignee_filter.includes_user?(current_user)
- return Issue.where('issues.confidential IS NOT TRUE') if params.user_cannot_see_confidential_issues?
+ return issues.where('issues.confidential IS NOT TRUE') if params.user_cannot_see_confidential_issues?
- Issue.where('
+ issues.where('
issues.confidential IS NOT TRUE
OR (issues.confidential = TRUE
AND (issues.author_id = :user_id
diff --git a/app/finders/issues_finder/params.rb b/app/finders/issues_finder/params.rb
index 1de117216f8..2edd8a6f099 100644
--- a/app/finders/issues_finder/params.rb
+++ b/app/finders/issues_finder/params.rb
@@ -32,7 +32,7 @@ class IssuesFinder
if parent
Ability.allowed?(current_user, :read_confidential_issues, parent)
else
- Ability.allowed?(current_user, :read_all_resources)
+ user_can_see_all_issues?
end
end
end
@@ -42,6 +42,12 @@ class IssuesFinder
current_user.blank?
end
+
+ def user_can_see_all_issues?
+ strong_memoize(:user_can_see_all_issues) do
+ Ability.allowed?(current_user, :read_all_resources)
+ end
+ end
end
end
diff --git a/app/graphql/resolvers/issues_resolver.rb b/app/graphql/resolvers/issues_resolver.rb
index 2017eb7decd..47e4e3c0b32 100644
--- a/app/graphql/resolvers/issues_resolver.rb
+++ b/app/graphql/resolvers/issues_resolver.rb
@@ -37,7 +37,8 @@ module Resolvers
[
{
project: [:project_feature]
- }
+ },
+ :author
]
end
diff --git a/app/graphql/types/packages/nuget/dependency_link_metadatum_type.rb b/app/graphql/types/packages/nuget/dependency_link_metadatum_type.rb
index a717e93b7cb..f410e62b56a 100644
--- a/app/graphql/types/packages/nuget/dependency_link_metadatum_type.rb
+++ b/app/graphql/types/packages/nuget/dependency_link_metadatum_type.rb
@@ -10,7 +10,7 @@ module Types
authorize :read_package
field :id, ::Types::GlobalIDType[::Packages::Nuget::DependencyLinkMetadatum], null: false, description: 'ID of the metadatum.'
- field :target_framework, GraphQL::Types::String, null: false, description: 'Target framework of the depdency link package.'
+ field :target_framework, GraphQL::Types::String, null: false, description: 'Target framework of the dependency link package.'
end
end
end
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index 5bedfc61d46..40ab8b7fb6c 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -52,6 +52,10 @@ module IssuesHelper
sprite_icon('eye-slash', css_class: 'gl-vertical-align-text-bottom') if issue.confidential?
end
+ def hidden_issue_icon(issue)
+ sprite_icon('spam', css_class: 'gl-vertical-align-text-bottom') if issue.hidden?
+ end
+
def award_user_list(awards, current_user, limit: 10)
names = awards.map do |award|
award.user == current_user ? 'You' : award.user.name
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 8cb46f3d1e9..bf3e9c06d68 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -130,6 +130,15 @@ class Issue < ApplicationRecord
scope :public_only, -> { where(confidential: false) }
scope :confidential_only, -> { where(confidential: true) }
+ scope :without_hidden, -> {
+ if Feature.enabled?(:ban_user_feature_flag)
+ where(id: joins('LEFT JOIN banned_users ON banned_users.user_id = issues.author_id WHERE banned_users.user_id IS NULL')
+ .select('issues.id'))
+ else
+ all
+ end
+ }
+
scope :counts_by_state, -> { reorder(nil).group(:state_id).count }
scope :service_desk, -> { where(author: ::User.support_bot) }
@@ -551,6 +560,8 @@ class Issue < ApplicationRecord
true
elsif confidential? && !assignee_or_author?(user)
project.team.member?(user, Gitlab::Access::REPORTER)
+ elsif hidden?
+ false
else
project.public? ||
project.internal? && !user.external? ||
@@ -558,6 +569,10 @@ class Issue < ApplicationRecord
end
end
+ def hidden?
+ author&.banned?
+ end
+
private
def spammable_attribute_changed?
@@ -585,7 +600,7 @@ class Issue < ApplicationRecord
# Returns `true` if this Issue is visible to everybody.
def publicly_visible?
- project.public? && !confidential? && !::Gitlab::ExternalAuthorization.enabled?
+ project.public? && !confidential? && !hidden? && !::Gitlab::ExternalAuthorization.enabled?
end
def expire_etag_cache
diff --git a/app/policies/issue_policy.rb b/app/policies/issue_policy.rb
index 053243e2296..74bed6b6c4e 100644
--- a/app/policies/issue_policy.rb
+++ b/app/policies/issue_policy.rb
@@ -15,6 +15,9 @@ class IssuePolicy < IssuablePolicy
desc "Issue is confidential"
condition(:confidential, scope: :subject) { @subject.confidential? }
+ desc "Issue is hidden"
+ condition(:hidden, scope: :subject) { @subject.hidden? }
+
desc "Issue is persisted"
condition(:persisted, scope: :subject) { @subject.persisted? }
@@ -23,6 +26,10 @@ class IssuePolicy < IssuablePolicy
prevent :read_issue_iid
end
+ rule { hidden & ~admin }.policy do
+ prevent :read_issue
+ end
+
rule { ~can?(:read_issue) }.prevent :create_note
rule { locked }.policy do
diff --git a/app/services/service_ping/permit_data_categories_service.rb b/app/services/service_ping/permit_data_categories_service.rb
index 49dd2426262..d8fa255a485 100644
--- a/app/services/service_ping/permit_data_categories_service.rb
+++ b/app/services/service_ping/permit_data_categories_service.rb
@@ -2,10 +2,10 @@
module ServicePing
class PermitDataCategoriesService
- STANDARD_CATEGORY = 'Standard'
- SUBSCRIPTION_CATEGORY = 'Subscription'
- OPERATIONAL_CATEGORY = 'Operational'
- OPTIONAL_CATEGORY = 'Optional'
+ STANDARD_CATEGORY = 'standard'
+ SUBSCRIPTION_CATEGORY = 'subscription'
+ OPERATIONAL_CATEGORY = 'operational'
+ OPTIONAL_CATEGORY = 'optional'
CATEGORIES = [
STANDARD_CATEGORY,
SUBSCRIPTION_CATEGORY,
diff --git a/app/views/admin/application_settings/appearances/_form.html.haml b/app/views/admin/application_settings/appearances/_form.html.haml
index a48b57bffd9..3bd16e4c344 100644
--- a/app/views/admin/application_settings/appearances/_form.html.haml
+++ b/app/views/admin/application_settings/appearances/_form.html.haml
@@ -40,7 +40,7 @@
= f.hidden_field :favicon_cache
= f.file_field :favicon, class: '', accept: 'image/*'
.hint
- = _("Maximum file size is 1MB. Image size must be 32x32px. Allowed image formats are %{favicon_extension_whitelist}.") % { favicon_extension_whitelist: favicon_extension_whitelist }
+ = _("Maximum file size is 1 MB. Image size must be 32 x 32 pixels. Allowed image formats are %{favicon_extension_whitelist}.") % { favicon_extension_whitelist: favicon_extension_whitelist }
%br
= _("Images with incorrect dimensions are not resized automatically, and may result in unexpected behavior.")
diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml
index 1a9657f6d0d..ee3aaee6dbb 100644
--- a/app/views/projects/issues/_issue.html.haml
+++ b/app/views/projects/issues/_issue.html.haml
@@ -12,6 +12,9 @@
- if issue.confidential?
%span.has-tooltip{ title: _('Confidential') }
= confidential_icon(issue)
+ - if Feature.enabled?(:ban_user_feature_flag) && issue.hidden?
+ %span.has-tooltip{ title: _('This issue is hidden because its author has been banned') }
+ = hidden_issue_icon(issue)
= link_to issue.title, issue_path(issue)
= render_if_exists 'projects/issues/subepic_flag', issue: issue
- if issue.tasks?
diff --git a/config/metrics/counts_28d/20210216181508_i_quickactions_approve_monthly.yml b/config/metrics/counts_28d/20210216181508_i_quickactions_approve_monthly.yml
index db9f1d99360..e810ab28af9 100644
--- a/config/metrics/counts_28d/20210216181508_i_quickactions_approve_monthly.yml
+++ b/config/metrics/counts_28d/20210216181508_i_quickactions_approve_monthly.yml
@@ -14,6 +14,10 @@ instrumentation_class: RedisHLLMetric
options:
events:
- i_quickactions_approve
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_approve
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181512_i_quickactions_assign_single_monthly.yml b/config/metrics/counts_28d/20210216181512_i_quickactions_assign_single_monthly.yml
index 5586b4755cd..5d103c204fa 100644
--- a/config/metrics/counts_28d/20210216181512_i_quickactions_assign_single_monthly.yml
+++ b/config/metrics/counts_28d/20210216181512_i_quickactions_assign_single_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_assign_single
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181519_i_quickactions_assign_self_monthly.yml b/config/metrics/counts_28d/20210216181519_i_quickactions_assign_self_monthly.yml
index e0ec4d50413..06a3897eae1 100644
--- a/config/metrics/counts_28d/20210216181519_i_quickactions_assign_self_monthly.yml
+++ b/config/metrics/counts_28d/20210216181519_i_quickactions_assign_self_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_assign_self
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181523_i_quickactions_assign_reviewer_monthly.yml b/config/metrics/counts_28d/20210216181523_i_quickactions_assign_reviewer_monthly.yml
index fac65eb896f..e07553d8790 100644
--- a/config/metrics/counts_28d/20210216181523_i_quickactions_assign_reviewer_monthly.yml
+++ b/config/metrics/counts_28d/20210216181523_i_quickactions_assign_reviewer_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_assign_reviewer
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181527_i_quickactions_award_monthly.yml b/config/metrics/counts_28d/20210216181527_i_quickactions_award_monthly.yml
index 044b8037d05..244b24ce56c 100644
--- a/config/metrics/counts_28d/20210216181527_i_quickactions_award_monthly.yml
+++ b/config/metrics/counts_28d/20210216181527_i_quickactions_award_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_award
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181530_i_quickactions_board_move_monthly.yml b/config/metrics/counts_28d/20210216181530_i_quickactions_board_move_monthly.yml
index b84f9be0a1d..8a0076c2dab 100644
--- a/config/metrics/counts_28d/20210216181530_i_quickactions_board_move_monthly.yml
+++ b/config/metrics/counts_28d/20210216181530_i_quickactions_board_move_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_board_move
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181541_i_quickactions_clone_monthly.yml b/config/metrics/counts_28d/20210216181541_i_quickactions_clone_monthly.yml
index ddbffe29356..ca022ed4730 100644
--- a/config/metrics/counts_28d/20210216181541_i_quickactions_clone_monthly.yml
+++ b/config/metrics/counts_28d/20210216181541_i_quickactions_clone_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_clone
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181545_i_quickactions_close_monthly.yml b/config/metrics/counts_28d/20210216181545_i_quickactions_close_monthly.yml
index ca647f138d5..ab93859aa98 100644
--- a/config/metrics/counts_28d/20210216181545_i_quickactions_close_monthly.yml
+++ b/config/metrics/counts_28d/20210216181545_i_quickactions_close_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_close
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181549_i_quickactions_confidential_monthly.yml b/config/metrics/counts_28d/20210216181549_i_quickactions_confidential_monthly.yml
index e6f74098306..9a0729bfe03 100644
--- a/config/metrics/counts_28d/20210216181549_i_quickactions_confidential_monthly.yml
+++ b/config/metrics/counts_28d/20210216181549_i_quickactions_confidential_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_confidential
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181553_i_quickactions_copy_metadata_merge_request_monthly.yml b/config/metrics/counts_28d/20210216181553_i_quickactions_copy_metadata_merge_request_monthly.yml
index 69b46b3d0fe..3e8e48fa0b6 100644
--- a/config/metrics/counts_28d/20210216181553_i_quickactions_copy_metadata_merge_request_monthly.yml
+++ b/config/metrics/counts_28d/20210216181553_i_quickactions_copy_metadata_merge_request_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_copy_metadata_merge_request
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181556_i_quickactions_copy_metadata_issue_monthly.yml b/config/metrics/counts_28d/20210216181556_i_quickactions_copy_metadata_issue_monthly.yml
index ebb754bad3b..67b0c81af92 100644
--- a/config/metrics/counts_28d/20210216181556_i_quickactions_copy_metadata_issue_monthly.yml
+++ b/config/metrics/counts_28d/20210216181556_i_quickactions_copy_metadata_issue_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_copy_metadata_issue
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181600_i_quickactions_create_merge_request_monthly.yml b/config/metrics/counts_28d/20210216181600_i_quickactions_create_merge_request_monthly.yml
index bb5918c155a..0f985f7b54e 100644
--- a/config/metrics/counts_28d/20210216181600_i_quickactions_create_merge_request_monthly.yml
+++ b/config/metrics/counts_28d/20210216181600_i_quickactions_create_merge_request_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_create_merge_request
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181604_i_quickactions_done_monthly.yml b/config/metrics/counts_28d/20210216181604_i_quickactions_done_monthly.yml
index 7f607aa3dd0..da31b57a401 100644
--- a/config/metrics/counts_28d/20210216181604_i_quickactions_done_monthly.yml
+++ b/config/metrics/counts_28d/20210216181604_i_quickactions_done_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_done
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181607_i_quickactions_draft_monthly.yml b/config/metrics/counts_28d/20210216181607_i_quickactions_draft_monthly.yml
index 8987d7325e7..c45a81d1387 100644
--- a/config/metrics/counts_28d/20210216181607_i_quickactions_draft_monthly.yml
+++ b/config/metrics/counts_28d/20210216181607_i_quickactions_draft_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_draft
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181611_i_quickactions_due_monthly.yml b/config/metrics/counts_28d/20210216181611_i_quickactions_due_monthly.yml
index 551975324bc..3a67fb16420 100644
--- a/config/metrics/counts_28d/20210216181611_i_quickactions_due_monthly.yml
+++ b/config/metrics/counts_28d/20210216181611_i_quickactions_due_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_due
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181615_i_quickactions_duplicate_monthly.yml b/config/metrics/counts_28d/20210216181615_i_quickactions_duplicate_monthly.yml
index b7e6cec88cf..23f564a114b 100644
--- a/config/metrics/counts_28d/20210216181615_i_quickactions_duplicate_monthly.yml
+++ b/config/metrics/counts_28d/20210216181615_i_quickactions_duplicate_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_duplicate
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181622_i_quickactions_estimate_monthly.yml b/config/metrics/counts_28d/20210216181622_i_quickactions_estimate_monthly.yml
index ac99b84040d..ad21f7d141d 100644
--- a/config/metrics/counts_28d/20210216181622_i_quickactions_estimate_monthly.yml
+++ b/config/metrics/counts_28d/20210216181622_i_quickactions_estimate_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_estimate
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181629_i_quickactions_label_monthly.yml b/config/metrics/counts_28d/20210216181629_i_quickactions_label_monthly.yml
index 481798bbcd0..d0fe9b9f118 100644
--- a/config/metrics/counts_28d/20210216181629_i_quickactions_label_monthly.yml
+++ b/config/metrics/counts_28d/20210216181629_i_quickactions_label_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_label
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181633_i_quickactions_lock_monthly.yml b/config/metrics/counts_28d/20210216181633_i_quickactions_lock_monthly.yml
index 9e2a63ef679..f26ba29e354 100644
--- a/config/metrics/counts_28d/20210216181633_i_quickactions_lock_monthly.yml
+++ b/config/metrics/counts_28d/20210216181633_i_quickactions_lock_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_lock
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181637_i_quickactions_merge_monthly.yml b/config/metrics/counts_28d/20210216181637_i_quickactions_merge_monthly.yml
index 7e9130cea34..433d51470d4 100644
--- a/config/metrics/counts_28d/20210216181637_i_quickactions_merge_monthly.yml
+++ b/config/metrics/counts_28d/20210216181637_i_quickactions_merge_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_merge
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181641_i_quickactions_milestone_monthly.yml b/config/metrics/counts_28d/20210216181641_i_quickactions_milestone_monthly.yml
index ca01e8c22e1..7ad17685e7d 100644
--- a/config/metrics/counts_28d/20210216181641_i_quickactions_milestone_monthly.yml
+++ b/config/metrics/counts_28d/20210216181641_i_quickactions_milestone_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_milestone
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181644_i_quickactions_move_monthly.yml b/config/metrics/counts_28d/20210216181644_i_quickactions_move_monthly.yml
index 89f1ee7ed89..26c3b85c930 100644
--- a/config/metrics/counts_28d/20210216181644_i_quickactions_move_monthly.yml
+++ b/config/metrics/counts_28d/20210216181644_i_quickactions_move_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_move
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181659_i_quickactions_reassign_monthly.yml b/config/metrics/counts_28d/20210216181659_i_quickactions_reassign_monthly.yml
index 3ea1c762b8b..8e63e25a8de 100644
--- a/config/metrics/counts_28d/20210216181659_i_quickactions_reassign_monthly.yml
+++ b/config/metrics/counts_28d/20210216181659_i_quickactions_reassign_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_reassign
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181703_i_quickactions_reassign_reviewer_monthly.yml b/config/metrics/counts_28d/20210216181703_i_quickactions_reassign_reviewer_monthly.yml
index f7f314181ae..df7e9cf2524 100644
--- a/config/metrics/counts_28d/20210216181703_i_quickactions_reassign_reviewer_monthly.yml
+++ b/config/metrics/counts_28d/20210216181703_i_quickactions_reassign_reviewer_monthly.yml
@@ -10,10 +10,14 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_reassign_reviewer
distribution:
- ce
- ee
tier:
- free
-- premium
+- premium
- ultimate
diff --git a/config/metrics/counts_28d/20210216181707_i_quickactions_rebase_monthly.yml b/config/metrics/counts_28d/20210216181707_i_quickactions_rebase_monthly.yml
index 5fb1f9782ba..828c1769686 100644
--- a/config/metrics/counts_28d/20210216181707_i_quickactions_rebase_monthly.yml
+++ b/config/metrics/counts_28d/20210216181707_i_quickactions_rebase_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_rebase
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181710_i_quickactions_relabel_monthly.yml b/config/metrics/counts_28d/20210216181710_i_quickactions_relabel_monthly.yml
index 8d695c1cae6..01ab64df5c0 100644
--- a/config/metrics/counts_28d/20210216181710_i_quickactions_relabel_monthly.yml
+++ b/config/metrics/counts_28d/20210216181710_i_quickactions_relabel_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_relabel
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181714_i_quickactions_relate_monthly.yml b/config/metrics/counts_28d/20210216181714_i_quickactions_relate_monthly.yml
index 8d5e2f28110..37f49898fed 100644
--- a/config/metrics/counts_28d/20210216181714_i_quickactions_relate_monthly.yml
+++ b/config/metrics/counts_28d/20210216181714_i_quickactions_relate_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_relate
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181721_i_quickactions_remove_due_date_monthly.yml b/config/metrics/counts_28d/20210216181721_i_quickactions_remove_due_date_monthly.yml
index f008cc32c60..f1bf864fd8f 100644
--- a/config/metrics/counts_28d/20210216181721_i_quickactions_remove_due_date_monthly.yml
+++ b/config/metrics/counts_28d/20210216181721_i_quickactions_remove_due_date_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_due_date
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181729_i_quickactions_remove_estimate_monthly.yml b/config/metrics/counts_28d/20210216181729_i_quickactions_remove_estimate_monthly.yml
index 4f916ec0790..70e5b0ac77d 100644
--- a/config/metrics/counts_28d/20210216181729_i_quickactions_remove_estimate_monthly.yml
+++ b/config/metrics/counts_28d/20210216181729_i_quickactions_remove_estimate_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_estimate
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181736_i_quickactions_remove_milestone_monthly.yml b/config/metrics/counts_28d/20210216181736_i_quickactions_remove_milestone_monthly.yml
index 238f1d6aeae..7e3eb749ce0 100644
--- a/config/metrics/counts_28d/20210216181736_i_quickactions_remove_milestone_monthly.yml
+++ b/config/metrics/counts_28d/20210216181736_i_quickactions_remove_milestone_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_milestone
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181744_i_quickactions_remove_time_spent_monthly.yml b/config/metrics/counts_28d/20210216181744_i_quickactions_remove_time_spent_monthly.yml
index c8d2fee4a36..2182df26490 100644
--- a/config/metrics/counts_28d/20210216181744_i_quickactions_remove_time_spent_monthly.yml
+++ b/config/metrics/counts_28d/20210216181744_i_quickactions_remove_time_spent_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_time_spent
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181747_i_quickactions_remove_zoom_monthly.yml b/config/metrics/counts_28d/20210216181747_i_quickactions_remove_zoom_monthly.yml
index 275dc78a488..069a43f5ce0 100644
--- a/config/metrics/counts_28d/20210216181747_i_quickactions_remove_zoom_monthly.yml
+++ b/config/metrics/counts_28d/20210216181747_i_quickactions_remove_zoom_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_zoom
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181751_i_quickactions_reopen_monthly.yml b/config/metrics/counts_28d/20210216181751_i_quickactions_reopen_monthly.yml
index 43017704a3b..b199f518cea 100644
--- a/config/metrics/counts_28d/20210216181751_i_quickactions_reopen_monthly.yml
+++ b/config/metrics/counts_28d/20210216181751_i_quickactions_reopen_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_reopen
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181755_i_quickactions_shrug_monthly.yml b/config/metrics/counts_28d/20210216181755_i_quickactions_shrug_monthly.yml
index 2d863104808..ecd23dd7352 100644
--- a/config/metrics/counts_28d/20210216181755_i_quickactions_shrug_monthly.yml
+++ b/config/metrics/counts_28d/20210216181755_i_quickactions_shrug_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_shrug
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181758_i_quickactions_spend_subtract_monthly.yml b/config/metrics/counts_28d/20210216181758_i_quickactions_spend_subtract_monthly.yml
index e02663015f1..83f893083e9 100644
--- a/config/metrics/counts_28d/20210216181758_i_quickactions_spend_subtract_monthly.yml
+++ b/config/metrics/counts_28d/20210216181758_i_quickactions_spend_subtract_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_spend_subtract
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181802_i_quickactions_spend_add_monthly.yml b/config/metrics/counts_28d/20210216181802_i_quickactions_spend_add_monthly.yml
index 38eca135cc4..29d5d4ccaad 100644
--- a/config/metrics/counts_28d/20210216181802_i_quickactions_spend_add_monthly.yml
+++ b/config/metrics/counts_28d/20210216181802_i_quickactions_spend_add_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_spend_add
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181806_i_quickactions_submit_review_monthly.yml b/config/metrics/counts_28d/20210216181806_i_quickactions_submit_review_monthly.yml
index 0c06fca60a0..29e52cc26ef 100644
--- a/config/metrics/counts_28d/20210216181806_i_quickactions_submit_review_monthly.yml
+++ b/config/metrics/counts_28d/20210216181806_i_quickactions_submit_review_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_submit_review
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181809_i_quickactions_subscribe_monthly.yml b/config/metrics/counts_28d/20210216181809_i_quickactions_subscribe_monthly.yml
index 4e0605f1ee6..08d75e9831b 100644
--- a/config/metrics/counts_28d/20210216181809_i_quickactions_subscribe_monthly.yml
+++ b/config/metrics/counts_28d/20210216181809_i_quickactions_subscribe_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_subscribe
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181813_i_quickactions_tableflip_monthly.yml b/config/metrics/counts_28d/20210216181813_i_quickactions_tableflip_monthly.yml
index 1690e634a01..7f7f318f08e 100644
--- a/config/metrics/counts_28d/20210216181813_i_quickactions_tableflip_monthly.yml
+++ b/config/metrics/counts_28d/20210216181813_i_quickactions_tableflip_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_tableflip
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181817_i_quickactions_tag_monthly.yml b/config/metrics/counts_28d/20210216181817_i_quickactions_tag_monthly.yml
index 84f201ebb21..216305fe08d 100644
--- a/config/metrics/counts_28d/20210216181817_i_quickactions_tag_monthly.yml
+++ b/config/metrics/counts_28d/20210216181817_i_quickactions_tag_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_tag
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181821_i_quickactions_target_branch_monthly.yml b/config/metrics/counts_28d/20210216181821_i_quickactions_target_branch_monthly.yml
index 7a792e721f6..e4a5e1a9f48 100644
--- a/config/metrics/counts_28d/20210216181821_i_quickactions_target_branch_monthly.yml
+++ b/config/metrics/counts_28d/20210216181821_i_quickactions_target_branch_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_target_branch
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181824_i_quickactions_title_monthly.yml b/config/metrics/counts_28d/20210216181824_i_quickactions_title_monthly.yml
index 31c10b3ac34..e2a554d3840 100644
--- a/config/metrics/counts_28d/20210216181824_i_quickactions_title_monthly.yml
+++ b/config/metrics/counts_28d/20210216181824_i_quickactions_title_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_title
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181828_i_quickactions_todo_monthly.yml b/config/metrics/counts_28d/20210216181828_i_quickactions_todo_monthly.yml
index 99866112c5d..6b5c9fb405a 100644
--- a/config/metrics/counts_28d/20210216181828_i_quickactions_todo_monthly.yml
+++ b/config/metrics/counts_28d/20210216181828_i_quickactions_todo_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_todo
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181832_i_quickactions_unassign_specific_monthly.yml b/config/metrics/counts_28d/20210216181832_i_quickactions_unassign_specific_monthly.yml
index 4cbc8aea8f6..b9b4c0a097a 100644
--- a/config/metrics/counts_28d/20210216181832_i_quickactions_unassign_specific_monthly.yml
+++ b/config/metrics/counts_28d/20210216181832_i_quickactions_unassign_specific_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unassign_specific
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181835_i_quickactions_unassign_all_monthly.yml b/config/metrics/counts_28d/20210216181835_i_quickactions_unassign_all_monthly.yml
index 220db3470dd..80e03f09b7e 100644
--- a/config/metrics/counts_28d/20210216181835_i_quickactions_unassign_all_monthly.yml
+++ b/config/metrics/counts_28d/20210216181835_i_quickactions_unassign_all_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unassign_all
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181839_i_quickactions_unassign_reviewer_monthly.yml b/config/metrics/counts_28d/20210216181839_i_quickactions_unassign_reviewer_monthly.yml
index 7a9f050ebbf..23bed7d7ac1 100644
--- a/config/metrics/counts_28d/20210216181839_i_quickactions_unassign_reviewer_monthly.yml
+++ b/config/metrics/counts_28d/20210216181839_i_quickactions_unassign_reviewer_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unassign_reviewer
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181843_i_quickactions_unlabel_specific_monthly.yml b/config/metrics/counts_28d/20210216181843_i_quickactions_unlabel_specific_monthly.yml
index 65ad4cd898c..fc4d95f8147 100644
--- a/config/metrics/counts_28d/20210216181843_i_quickactions_unlabel_specific_monthly.yml
+++ b/config/metrics/counts_28d/20210216181843_i_quickactions_unlabel_specific_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unlabel_specific
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181846_i_quickactions_unlabel_all_monthly.yml b/config/metrics/counts_28d/20210216181846_i_quickactions_unlabel_all_monthly.yml
index 6fd22faa3d7..f846fc102a7 100644
--- a/config/metrics/counts_28d/20210216181846_i_quickactions_unlabel_all_monthly.yml
+++ b/config/metrics/counts_28d/20210216181846_i_quickactions_unlabel_all_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unlabel_all
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181850_i_quickactions_unlock_monthly.yml b/config/metrics/counts_28d/20210216181850_i_quickactions_unlock_monthly.yml
index e47a83fd09e..783e5d1385c 100644
--- a/config/metrics/counts_28d/20210216181850_i_quickactions_unlock_monthly.yml
+++ b/config/metrics/counts_28d/20210216181850_i_quickactions_unlock_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unlock
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181854_i_quickactions_unsubscribe_monthly.yml b/config/metrics/counts_28d/20210216181854_i_quickactions_unsubscribe_monthly.yml
index 406edee8795..f4d89155b77 100644
--- a/config/metrics/counts_28d/20210216181854_i_quickactions_unsubscribe_monthly.yml
+++ b/config/metrics/counts_28d/20210216181854_i_quickactions_unsubscribe_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unsubscribe
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181901_i_quickactions_wip_monthly.yml b/config/metrics/counts_28d/20210216181901_i_quickactions_wip_monthly.yml
index d8d2778ac38..154fea29cc0 100644
--- a/config/metrics/counts_28d/20210216181901_i_quickactions_wip_monthly.yml
+++ b/config/metrics/counts_28d/20210216181901_i_quickactions_wip_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_wip
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216181905_i_quickactions_zoom_monthly.yml b/config/metrics/counts_28d/20210216181905_i_quickactions_zoom_monthly.yml
index a619b3def45..3f0b7d0399f 100644
--- a/config/metrics/counts_28d/20210216181905_i_quickactions_zoom_monthly.yml
+++ b/config/metrics/counts_28d/20210216181905_i_quickactions_zoom_monthly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_zoom
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210216184803_quickactions_total_unique_counts_monthly.yml b/config/metrics/counts_28d/20210216184803_quickactions_total_unique_counts_monthly.yml
index 82c1717e3cf..5efa8c29fcf 100644
--- a/config/metrics/counts_28d/20210216184803_quickactions_total_unique_counts_monthly.yml
+++ b/config/metrics/counts_28d/20210216184803_quickactions_total_unique_counts_monthly.yml
@@ -10,6 +10,77 @@ value_type: number
status: data_available
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_approve
+ - i_quickactions_assign_single
+ - i_quickactions_assign_multiple
+ - i_quickactions_assign_self
+ - i_quickactions_assign_reviewer
+ - i_quickactions_award
+ - i_quickactions_board_move
+ - i_quickactions_child_epic
+ - i_quickactions_clear_weight
+ - i_quickactions_clone
+ - i_quickactions_close
+ - i_quickactions_confidential
+ - i_quickactions_copy_metadata_merge_request
+ - i_quickactions_copy_metadata_issue
+ - i_quickactions_create_merge_request
+ - i_quickactions_done
+ - i_quickactions_draft
+ - i_quickactions_due
+ - i_quickactions_duplicate
+ - i_quickactions_epic
+ - i_quickactions_estimate
+ - i_quickactions_iteration
+ - i_quickactions_label
+ - i_quickactions_lock
+ - i_quickactions_merge
+ - i_quickactions_milestone
+ - i_quickactions_move
+ - i_quickactions_parent_epic
+ - i_quickactions_promote
+ - i_quickactions_publish
+ - i_quickactions_reassign
+ - i_quickactions_reassign_reviewer
+ - i_quickactions_rebase
+ - i_quickactions_relabel
+ - i_quickactions_relate
+ - i_quickactions_remove_child_epic
+ - i_quickactions_remove_due_date
+ - i_quickactions_remove_epic
+ - i_quickactions_remove_estimate
+ - i_quickactions_remove_iteration
+ - i_quickactions_remove_milestone
+ - i_quickactions_remove_parent_epic
+ - i_quickactions_remove_time_spent
+ - i_quickactions_remove_zoom
+ - i_quickactions_reopen
+ - i_quickactions_severity
+ - i_quickactions_shrug
+ - i_quickactions_spend_subtract
+ - i_quickactions_spend_add
+ - i_quickactions_submit_review
+ - i_quickactions_subscribe
+ - i_quickactions_tableflip
+ - i_quickactions_tag
+ - i_quickactions_target_branch
+ - i_quickactions_title
+ - i_quickactions_todo
+ - i_quickactions_unassign_specific
+ - i_quickactions_unassign_all
+ - i_quickactions_unassign_reviewer
+ - i_quickactions_unlabel_specific
+ - i_quickactions_unlabel_all
+ - i_quickactions_unlock
+ - i_quickactions_unsubscribe
+ - i_quickactions_weight
+ - i_quickactions_wip
+ - i_quickactions_zoom
+ - i_quickactions_invite_email_single
+ - i_quickactions_invite_email_multiple
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210222041219_i_quickactions_invite_email_single_monthly.yml b/config/metrics/counts_28d/20210222041219_i_quickactions_invite_email_single_monthly.yml
index 6c66ac6b52e..6bb847c958b 100644
--- a/config/metrics/counts_28d/20210222041219_i_quickactions_invite_email_single_monthly.yml
+++ b/config/metrics/counts_28d/20210222041219_i_quickactions_invite_email_single_monthly.yml
@@ -12,6 +12,10 @@ milestone: "13.10"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49264
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_invite_email_single
distribution:
- ce
- ee
diff --git a/config/metrics/counts_28d/20210222041235_i_quickactions_invite_email_multiple_monthly.yml b/config/metrics/counts_28d/20210222041235_i_quickactions_invite_email_multiple_monthly.yml
index a3bcc3732a1..989f170b970 100644
--- a/config/metrics/counts_28d/20210222041235_i_quickactions_invite_email_multiple_monthly.yml
+++ b/config/metrics/counts_28d/20210222041235_i_quickactions_invite_email_multiple_monthly.yml
@@ -12,6 +12,10 @@ milestone: "13.10"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49264
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_invite_email_multiple
distribution:
- ce
tier:
diff --git a/config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml b/config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml
index a56e3c080bd..36cf23f04c4 100644
--- a/config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml
+++ b/config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml
@@ -11,6 +11,10 @@ milestone: "14.2"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66422
time_frame: 28d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_severity
data_category: Optional
distribution:
- ce
diff --git a/config/metrics/counts_7d/20210216181506_i_quickactions_approve_weekly.yml b/config/metrics/counts_7d/20210216181506_i_quickactions_approve_weekly.yml
index 4ef1a406ce0..05d9bee86ce 100644
--- a/config/metrics/counts_7d/20210216181506_i_quickactions_approve_weekly.yml
+++ b/config/metrics/counts_7d/20210216181506_i_quickactions_approve_weekly.yml
@@ -14,6 +14,10 @@ instrumentation_class: RedisHLLMetric
options:
events:
- i_quickactions_approve
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_approve
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181510_i_quickactions_assign_single_weekly.yml b/config/metrics/counts_7d/20210216181510_i_quickactions_assign_single_weekly.yml
index a32968621af..759cc2c1fb0 100644
--- a/config/metrics/counts_7d/20210216181510_i_quickactions_assign_single_weekly.yml
+++ b/config/metrics/counts_7d/20210216181510_i_quickactions_assign_single_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_assign_single
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181517_i_quickactions_assign_self_weekly.yml b/config/metrics/counts_7d/20210216181517_i_quickactions_assign_self_weekly.yml
index 034394c338a..620dbf804a0 100644
--- a/config/metrics/counts_7d/20210216181517_i_quickactions_assign_self_weekly.yml
+++ b/config/metrics/counts_7d/20210216181517_i_quickactions_assign_self_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_assign_self
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181521_i_quickactions_assign_reviewer_weekly.yml b/config/metrics/counts_7d/20210216181521_i_quickactions_assign_reviewer_weekly.yml
index ddeb9b88df8..f3c7de295d2 100644
--- a/config/metrics/counts_7d/20210216181521_i_quickactions_assign_reviewer_weekly.yml
+++ b/config/metrics/counts_7d/20210216181521_i_quickactions_assign_reviewer_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_assign_reviewer
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181525_i_quickactions_award_weekly.yml b/config/metrics/counts_7d/20210216181525_i_quickactions_award_weekly.yml
index f002171bf96..be38ef308f5 100644
--- a/config/metrics/counts_7d/20210216181525_i_quickactions_award_weekly.yml
+++ b/config/metrics/counts_7d/20210216181525_i_quickactions_award_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_award
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181529_i_quickactions_board_move_weekly.yml b/config/metrics/counts_7d/20210216181529_i_quickactions_board_move_weekly.yml
index 05012ed36d8..a26798a93db 100644
--- a/config/metrics/counts_7d/20210216181529_i_quickactions_board_move_weekly.yml
+++ b/config/metrics/counts_7d/20210216181529_i_quickactions_board_move_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_board_move
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181540_i_quickactions_clone_weekly.yml b/config/metrics/counts_7d/20210216181540_i_quickactions_clone_weekly.yml
index f7fbf7e722a..e6e88c16f80 100644
--- a/config/metrics/counts_7d/20210216181540_i_quickactions_clone_weekly.yml
+++ b/config/metrics/counts_7d/20210216181540_i_quickactions_clone_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_clone
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181543_i_quickactions_close_weekly.yml b/config/metrics/counts_7d/20210216181543_i_quickactions_close_weekly.yml
index 3fb5f7f2504..88f34521f1f 100644
--- a/config/metrics/counts_7d/20210216181543_i_quickactions_close_weekly.yml
+++ b/config/metrics/counts_7d/20210216181543_i_quickactions_close_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_close
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181547_i_quickactions_confidential_weekly.yml b/config/metrics/counts_7d/20210216181547_i_quickactions_confidential_weekly.yml
index 7119cec2083..873105f4e64 100644
--- a/config/metrics/counts_7d/20210216181547_i_quickactions_confidential_weekly.yml
+++ b/config/metrics/counts_7d/20210216181547_i_quickactions_confidential_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_confidential
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181551_i_quickactions_copy_metadata_merge_request_weekly.yml b/config/metrics/counts_7d/20210216181551_i_quickactions_copy_metadata_merge_request_weekly.yml
index a317c83e75e..52da1fe765b 100644
--- a/config/metrics/counts_7d/20210216181551_i_quickactions_copy_metadata_merge_request_weekly.yml
+++ b/config/metrics/counts_7d/20210216181551_i_quickactions_copy_metadata_merge_request_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_copy_metadata_merge_request
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181554_i_quickactions_copy_metadata_issue_weekly.yml b/config/metrics/counts_7d/20210216181554_i_quickactions_copy_metadata_issue_weekly.yml
index 39495ccca3c..197ae5da660 100644
--- a/config/metrics/counts_7d/20210216181554_i_quickactions_copy_metadata_issue_weekly.yml
+++ b/config/metrics/counts_7d/20210216181554_i_quickactions_copy_metadata_issue_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_copy_metadata_issue
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181558_i_quickactions_create_merge_request_weekly.yml b/config/metrics/counts_7d/20210216181558_i_quickactions_create_merge_request_weekly.yml
index f6c15cf447a..1a1a688c2c2 100644
--- a/config/metrics/counts_7d/20210216181558_i_quickactions_create_merge_request_weekly.yml
+++ b/config/metrics/counts_7d/20210216181558_i_quickactions_create_merge_request_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_create_merge_request
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181602_i_quickactions_done_weekly.yml b/config/metrics/counts_7d/20210216181602_i_quickactions_done_weekly.yml
index a079996d0b2..8da3c6bfe33 100644
--- a/config/metrics/counts_7d/20210216181602_i_quickactions_done_weekly.yml
+++ b/config/metrics/counts_7d/20210216181602_i_quickactions_done_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_done
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181605_i_quickactions_draft_weekly.yml b/config/metrics/counts_7d/20210216181605_i_quickactions_draft_weekly.yml
index edba1aa2ca3..4fb4eec4838 100644
--- a/config/metrics/counts_7d/20210216181605_i_quickactions_draft_weekly.yml
+++ b/config/metrics/counts_7d/20210216181605_i_quickactions_draft_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_draft
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181609_i_quickactions_due_weekly.yml b/config/metrics/counts_7d/20210216181609_i_quickactions_due_weekly.yml
index 91b47b48d6a..11d765ac7dd 100644
--- a/config/metrics/counts_7d/20210216181609_i_quickactions_due_weekly.yml
+++ b/config/metrics/counts_7d/20210216181609_i_quickactions_due_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_due
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181613_i_quickactions_duplicate_weekly.yml b/config/metrics/counts_7d/20210216181613_i_quickactions_duplicate_weekly.yml
index 29a485623c3..991f6dba561 100644
--- a/config/metrics/counts_7d/20210216181613_i_quickactions_duplicate_weekly.yml
+++ b/config/metrics/counts_7d/20210216181613_i_quickactions_duplicate_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_duplicate
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181620_i_quickactions_estimate_weekly.yml b/config/metrics/counts_7d/20210216181620_i_quickactions_estimate_weekly.yml
index 4a6f7b6db71..8d166ac79b5 100644
--- a/config/metrics/counts_7d/20210216181620_i_quickactions_estimate_weekly.yml
+++ b/config/metrics/counts_7d/20210216181620_i_quickactions_estimate_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_estimate
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181628_i_quickactions_label_weekly.yml b/config/metrics/counts_7d/20210216181628_i_quickactions_label_weekly.yml
index 6380019b823..e20baed4e5f 100644
--- a/config/metrics/counts_7d/20210216181628_i_quickactions_label_weekly.yml
+++ b/config/metrics/counts_7d/20210216181628_i_quickactions_label_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_label
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181631_i_quickactions_lock_weekly.yml b/config/metrics/counts_7d/20210216181631_i_quickactions_lock_weekly.yml
index fc19bfc5aba..df251caef8a 100644
--- a/config/metrics/counts_7d/20210216181631_i_quickactions_lock_weekly.yml
+++ b/config/metrics/counts_7d/20210216181631_i_quickactions_lock_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_lock
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181635_i_quickactions_merge_weekly.yml b/config/metrics/counts_7d/20210216181635_i_quickactions_merge_weekly.yml
index 72344d83c3c..516b09c1b34 100644
--- a/config/metrics/counts_7d/20210216181635_i_quickactions_merge_weekly.yml
+++ b/config/metrics/counts_7d/20210216181635_i_quickactions_merge_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_merge
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181639_i_quickactions_milestone_weekly.yml b/config/metrics/counts_7d/20210216181639_i_quickactions_milestone_weekly.yml
index cbc0a5cb301..2c4daede54e 100644
--- a/config/metrics/counts_7d/20210216181639_i_quickactions_milestone_weekly.yml
+++ b/config/metrics/counts_7d/20210216181639_i_quickactions_milestone_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_milestone
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181642_i_quickactions_move_weekly.yml b/config/metrics/counts_7d/20210216181642_i_quickactions_move_weekly.yml
index 8aa6aa0c2f2..728e45897c0 100644
--- a/config/metrics/counts_7d/20210216181642_i_quickactions_move_weekly.yml
+++ b/config/metrics/counts_7d/20210216181642_i_quickactions_move_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_move
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181657_i_quickactions_reassign_weekly.yml b/config/metrics/counts_7d/20210216181657_i_quickactions_reassign_weekly.yml
index e461d58c499..0121682ea09 100644
--- a/config/metrics/counts_7d/20210216181657_i_quickactions_reassign_weekly.yml
+++ b/config/metrics/counts_7d/20210216181657_i_quickactions_reassign_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_reassign
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181701_i_quickactions_reassign_reviewer_weekly.yml b/config/metrics/counts_7d/20210216181701_i_quickactions_reassign_reviewer_weekly.yml
index e8b81447916..273121f1a0c 100644
--- a/config/metrics/counts_7d/20210216181701_i_quickactions_reassign_reviewer_weekly.yml
+++ b/config/metrics/counts_7d/20210216181701_i_quickactions_reassign_reviewer_weekly.yml
@@ -10,11 +10,15 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_reassign_reviewer
distribution:
- ce
- ee
tier:
- free
-- premium
+- premium
- ultimate
diff --git a/config/metrics/counts_7d/20210216181705_i_quickactions_rebase_weekly.yml b/config/metrics/counts_7d/20210216181705_i_quickactions_rebase_weekly.yml
index 7c65f6868bf..6ce5d7743cd 100644
--- a/config/metrics/counts_7d/20210216181705_i_quickactions_rebase_weekly.yml
+++ b/config/metrics/counts_7d/20210216181705_i_quickactions_rebase_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_rebase
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181708_i_quickactions_relabel_weekly.yml b/config/metrics/counts_7d/20210216181708_i_quickactions_relabel_weekly.yml
index a8ac0715b22..8e6a7ee093d 100644
--- a/config/metrics/counts_7d/20210216181708_i_quickactions_relabel_weekly.yml
+++ b/config/metrics/counts_7d/20210216181708_i_quickactions_relabel_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_relabel
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181712_i_quickactions_relate_weekly.yml b/config/metrics/counts_7d/20210216181712_i_quickactions_relate_weekly.yml
index e7e396da7fc..fbc62505ee2 100644
--- a/config/metrics/counts_7d/20210216181712_i_quickactions_relate_weekly.yml
+++ b/config/metrics/counts_7d/20210216181712_i_quickactions_relate_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_relate
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181719_i_quickactions_remove_due_date_weekly.yml b/config/metrics/counts_7d/20210216181719_i_quickactions_remove_due_date_weekly.yml
index b934268b88e..b17ea84052d 100644
--- a/config/metrics/counts_7d/20210216181719_i_quickactions_remove_due_date_weekly.yml
+++ b/config/metrics/counts_7d/20210216181719_i_quickactions_remove_due_date_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_due_date
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181727_i_quickactions_remove_estimate_weekly.yml b/config/metrics/counts_7d/20210216181727_i_quickactions_remove_estimate_weekly.yml
index e18ae759715..c6c9c6b2403 100644
--- a/config/metrics/counts_7d/20210216181727_i_quickactions_remove_estimate_weekly.yml
+++ b/config/metrics/counts_7d/20210216181727_i_quickactions_remove_estimate_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_estimate
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181734_i_quickactions_remove_milestone_weekly.yml b/config/metrics/counts_7d/20210216181734_i_quickactions_remove_milestone_weekly.yml
index 6d783572976..0839d8ab6ec 100644
--- a/config/metrics/counts_7d/20210216181734_i_quickactions_remove_milestone_weekly.yml
+++ b/config/metrics/counts_7d/20210216181734_i_quickactions_remove_milestone_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_milestone
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181742_i_quickactions_remove_time_spent_weekly.yml b/config/metrics/counts_7d/20210216181742_i_quickactions_remove_time_spent_weekly.yml
index 86458cb813f..e1fa53fbb3a 100644
--- a/config/metrics/counts_7d/20210216181742_i_quickactions_remove_time_spent_weekly.yml
+++ b/config/metrics/counts_7d/20210216181742_i_quickactions_remove_time_spent_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_time_spent
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181745_i_quickactions_remove_zoom_weekly.yml b/config/metrics/counts_7d/20210216181745_i_quickactions_remove_zoom_weekly.yml
index eff4a6bc9eb..5468c0d8212 100644
--- a/config/metrics/counts_7d/20210216181745_i_quickactions_remove_zoom_weekly.yml
+++ b/config/metrics/counts_7d/20210216181745_i_quickactions_remove_zoom_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_remove_zoom
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181749_i_quickactions_reopen_weekly.yml b/config/metrics/counts_7d/20210216181749_i_quickactions_reopen_weekly.yml
index a64b3eec3b4..00349bfaa57 100644
--- a/config/metrics/counts_7d/20210216181749_i_quickactions_reopen_weekly.yml
+++ b/config/metrics/counts_7d/20210216181749_i_quickactions_reopen_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_reopen
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181753_i_quickactions_shrug_weekly.yml b/config/metrics/counts_7d/20210216181753_i_quickactions_shrug_weekly.yml
index dcbb2ce8aaa..ab4b1451997 100644
--- a/config/metrics/counts_7d/20210216181753_i_quickactions_shrug_weekly.yml
+++ b/config/metrics/counts_7d/20210216181753_i_quickactions_shrug_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_shrug
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181756_i_quickactions_spend_subtract_weekly.yml b/config/metrics/counts_7d/20210216181756_i_quickactions_spend_subtract_weekly.yml
index 1752363a6e6..59d354bfc0d 100644
--- a/config/metrics/counts_7d/20210216181756_i_quickactions_spend_subtract_weekly.yml
+++ b/config/metrics/counts_7d/20210216181756_i_quickactions_spend_subtract_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_spend_subtract
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181800_i_quickactions_spend_add_weekly.yml b/config/metrics/counts_7d/20210216181800_i_quickactions_spend_add_weekly.yml
index 478b32079e7..3b6a75bffd8 100644
--- a/config/metrics/counts_7d/20210216181800_i_quickactions_spend_add_weekly.yml
+++ b/config/metrics/counts_7d/20210216181800_i_quickactions_spend_add_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_spend_add
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181804_i_quickactions_submit_review_weekly.yml b/config/metrics/counts_7d/20210216181804_i_quickactions_submit_review_weekly.yml
index 3e02aebcf62..0ee8f918d2f 100644
--- a/config/metrics/counts_7d/20210216181804_i_quickactions_submit_review_weekly.yml
+++ b/config/metrics/counts_7d/20210216181804_i_quickactions_submit_review_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_submit_review
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181808_i_quickactions_subscribe_weekly.yml b/config/metrics/counts_7d/20210216181808_i_quickactions_subscribe_weekly.yml
index 0d5b43552fe..d8f86c2a14c 100644
--- a/config/metrics/counts_7d/20210216181808_i_quickactions_subscribe_weekly.yml
+++ b/config/metrics/counts_7d/20210216181808_i_quickactions_subscribe_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_subscribe
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181811_i_quickactions_tableflip_weekly.yml b/config/metrics/counts_7d/20210216181811_i_quickactions_tableflip_weekly.yml
index 3725e008de5..dd732adf42f 100644
--- a/config/metrics/counts_7d/20210216181811_i_quickactions_tableflip_weekly.yml
+++ b/config/metrics/counts_7d/20210216181811_i_quickactions_tableflip_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_tableflip
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181815_i_quickactions_tag_weekly.yml b/config/metrics/counts_7d/20210216181815_i_quickactions_tag_weekly.yml
index b2983522af5..8eab6430180 100644
--- a/config/metrics/counts_7d/20210216181815_i_quickactions_tag_weekly.yml
+++ b/config/metrics/counts_7d/20210216181815_i_quickactions_tag_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_tag
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181819_i_quickactions_target_branch_weekly.yml b/config/metrics/counts_7d/20210216181819_i_quickactions_target_branch_weekly.yml
index 03c3a7fd3ae..26a6c2920dc 100644
--- a/config/metrics/counts_7d/20210216181819_i_quickactions_target_branch_weekly.yml
+++ b/config/metrics/counts_7d/20210216181819_i_quickactions_target_branch_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_target_branch
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181822_i_quickactions_title_weekly.yml b/config/metrics/counts_7d/20210216181822_i_quickactions_title_weekly.yml
index 67cf9ffadf2..4c31b0d3b70 100644
--- a/config/metrics/counts_7d/20210216181822_i_quickactions_title_weekly.yml
+++ b/config/metrics/counts_7d/20210216181822_i_quickactions_title_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_title
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181826_i_quickactions_todo_weekly.yml b/config/metrics/counts_7d/20210216181826_i_quickactions_todo_weekly.yml
index 2732afe133a..73b3f32b641 100644
--- a/config/metrics/counts_7d/20210216181826_i_quickactions_todo_weekly.yml
+++ b/config/metrics/counts_7d/20210216181826_i_quickactions_todo_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_todo
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181830_i_quickactions_unassign_specific_weekly.yml b/config/metrics/counts_7d/20210216181830_i_quickactions_unassign_specific_weekly.yml
index 8a1b27e26c9..72d9c8d7f3b 100644
--- a/config/metrics/counts_7d/20210216181830_i_quickactions_unassign_specific_weekly.yml
+++ b/config/metrics/counts_7d/20210216181830_i_quickactions_unassign_specific_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unassign_specific
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181833_i_quickactions_unassign_all_weekly.yml b/config/metrics/counts_7d/20210216181833_i_quickactions_unassign_all_weekly.yml
index d772d842803..3fd749e96db 100644
--- a/config/metrics/counts_7d/20210216181833_i_quickactions_unassign_all_weekly.yml
+++ b/config/metrics/counts_7d/20210216181833_i_quickactions_unassign_all_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unassign_all
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181837_i_quickactions_unassign_reviewer_weekly.yml b/config/metrics/counts_7d/20210216181837_i_quickactions_unassign_reviewer_weekly.yml
index 5d8182c97a6..7639f6150f5 100644
--- a/config/metrics/counts_7d/20210216181837_i_quickactions_unassign_reviewer_weekly.yml
+++ b/config/metrics/counts_7d/20210216181837_i_quickactions_unassign_reviewer_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unassign_reviewer
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181841_i_quickactions_unlabel_specific_weekly.yml b/config/metrics/counts_7d/20210216181841_i_quickactions_unlabel_specific_weekly.yml
index 823d3c64177..9a9eba132ae 100644
--- a/config/metrics/counts_7d/20210216181841_i_quickactions_unlabel_specific_weekly.yml
+++ b/config/metrics/counts_7d/20210216181841_i_quickactions_unlabel_specific_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unlabel_specific
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181845_i_quickactions_unlabel_all_weekly.yml b/config/metrics/counts_7d/20210216181845_i_quickactions_unlabel_all_weekly.yml
index 3e16e38d814..e4678349c8f 100644
--- a/config/metrics/counts_7d/20210216181845_i_quickactions_unlabel_all_weekly.yml
+++ b/config/metrics/counts_7d/20210216181845_i_quickactions_unlabel_all_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unlabel_all
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181848_i_quickactions_unlock_weekly.yml b/config/metrics/counts_7d/20210216181848_i_quickactions_unlock_weekly.yml
index e89b4b48b82..58326ce548e 100644
--- a/config/metrics/counts_7d/20210216181848_i_quickactions_unlock_weekly.yml
+++ b/config/metrics/counts_7d/20210216181848_i_quickactions_unlock_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unlock
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181852_i_quickactions_unsubscribe_weekly.yml b/config/metrics/counts_7d/20210216181852_i_quickactions_unsubscribe_weekly.yml
index cbce70d915e..2b03fe4120e 100644
--- a/config/metrics/counts_7d/20210216181852_i_quickactions_unsubscribe_weekly.yml
+++ b/config/metrics/counts_7d/20210216181852_i_quickactions_unsubscribe_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_unsubscribe
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181859_i_quickactions_wip_weekly.yml b/config/metrics/counts_7d/20210216181859_i_quickactions_wip_weekly.yml
index 72e438d2227..90ea8899d40 100644
--- a/config/metrics/counts_7d/20210216181859_i_quickactions_wip_weekly.yml
+++ b/config/metrics/counts_7d/20210216181859_i_quickactions_wip_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_wip
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210216181903_i_quickactions_zoom_weekly.yml b/config/metrics/counts_7d/20210216181903_i_quickactions_zoom_weekly.yml
index 783565854e8..0edaae2867e 100644
--- a/config/metrics/counts_7d/20210216181903_i_quickactions_zoom_weekly.yml
+++ b/config/metrics/counts_7d/20210216181903_i_quickactions_zoom_weekly.yml
@@ -10,6 +10,10 @@ value_type: number
status: data_available
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_zoom
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210303154557_i_quickactions_invite_email_single_weekly.yml b/config/metrics/counts_7d/20210303154557_i_quickactions_invite_email_single_weekly.yml
index 6acc548b2e7..74172eeb2a6 100644
--- a/config/metrics/counts_7d/20210303154557_i_quickactions_invite_email_single_weekly.yml
+++ b/config/metrics/counts_7d/20210303154557_i_quickactions_invite_email_single_weekly.yml
@@ -12,6 +12,10 @@ milestone: "13.10"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49264
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_invite_email_single
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210303154600_i_quickactions_invite_email_multiple_weekly.yml b/config/metrics/counts_7d/20210303154600_i_quickactions_invite_email_multiple_weekly.yml
index 944b5102af2..cd0c0d5a77d 100644
--- a/config/metrics/counts_7d/20210303154600_i_quickactions_invite_email_multiple_weekly.yml
+++ b/config/metrics/counts_7d/20210303154600_i_quickactions_invite_email_multiple_weekly.yml
@@ -12,6 +12,10 @@ milestone: "13.10"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49264
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_invite_email_multiple
distribution:
- ce
- ee
diff --git a/config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml b/config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml
index ccf8b50ee02..d75b80f6269 100644
--- a/config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml
+++ b/config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml
@@ -11,6 +11,10 @@ milestone: "14.2"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66422
time_frame: 7d
data_source: redis_hll
+instrumentation_class: RedisHLLMetric
+options:
+ events:
+ - i_quickactions_severity
data_category: Optional
distribution:
- ce
diff --git a/config/metrics/objects_schemas/collected_data_categories_schema.json b/config/metrics/objects_schemas/collected_data_categories_schema.json
index c1ff96d3953..80ccc7a3a3c 100644
--- a/config/metrics/objects_schemas/collected_data_categories_schema.json
+++ b/config/metrics/objects_schemas/collected_data_categories_schema.json
@@ -2,6 +2,6 @@
"type": "array",
"items": {
"type": ["string", "null"],
- "enum": ["Standard", "Subscription", "Operational", "Optional"]
+ "enum": ["standard", "subscription", "operational", "optional"]
}
}
diff --git a/config/metrics/schema.json b/config/metrics/schema.json
index 59918314e5e..24ea41d3f16 100644
--- a/config/metrics/schema.json
+++ b/config/metrics/schema.json
@@ -59,7 +59,7 @@
},
"data_category": {
"type": "string",
- "enum": ["Operational", "Optional", "Subscription", "Standard"]
+ "enum": ["Operational", "Optional", "Subscription", "Standard", "operational", "optional", "subscription", "standard"]
},
"instrumentation_class": {
"type": "string",
diff --git a/db/migrate/20210722151951_add_columns_to_security_scans.rb b/db/migrate/20210722151951_add_columns_to_security_scans.rb
new file mode 100644
index 00000000000..341cef057ce
--- /dev/null
+++ b/db/migrate/20210722151951_add_columns_to_security_scans.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class AddColumnsToSecurityScans < ActiveRecord::Migration[6.1]
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ with_lock_retries do
+ add_column :security_scans, :project_id, :bigint
+ add_column :security_scans, :pipeline_id, :bigint
+ end
+ end
+
+ def down
+ with_lock_retries do
+ remove_column :security_scans, :project_id, :bigint
+ remove_column :security_scans, :pipeline_id, :bigint
+ end
+ end
+end
diff --git a/db/migrate/20210728174349_add_fk_to_security_scans_columns.rb b/db/migrate/20210728174349_add_fk_to_security_scans_columns.rb
new file mode 100644
index 00000000000..418097b92e5
--- /dev/null
+++ b/db/migrate/20210728174349_add_fk_to_security_scans_columns.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class AddFkToSecurityScansColumns < ActiveRecord::Migration[6.1]
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ add_concurrent_index :security_scans, :project_id
+ add_concurrent_foreign_key :security_scans, :projects, column: :project_id, on_delete: :cascade
+
+ add_concurrent_index :security_scans, :pipeline_id
+ end
+
+ def down
+ remove_foreign_key :security_scans, column: :project_id
+ remove_concurrent_index_by_name :security_scans, name: 'index_security_scans_on_project_id'
+
+ remove_concurrent_index_by_name :security_scans, name: 'index_security_scans_on_pipeline_id'
+ end
+end
diff --git a/db/post_migrate/20210811214811_schedule_copy_ci_builds_columns_to_security_scans.rb b/db/post_migrate/20210811214811_schedule_copy_ci_builds_columns_to_security_scans.rb
new file mode 100644
index 00000000000..dc90c202c41
--- /dev/null
+++ b/db/post_migrate/20210811214811_schedule_copy_ci_builds_columns_to_security_scans.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+class ScheduleCopyCiBuildsColumnsToSecurityScans < ActiveRecord::Migration[6.1]
+ include Gitlab::Database::MigrationHelpers
+
+ INTERVAL = 2.minutes.to_i
+ BATCH_SIZE = 5_000
+ MIGRATION = 'CopyCiBuildsColumnsToSecurityScans'
+
+ disable_ddl_transaction!
+
+ class SecurityScan < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'security_scans'
+ end
+
+ def up
+ SecurityScan.reset_column_information
+
+ queue_background_migration_jobs_by_range_at_intervals(
+ SecurityScan,
+ MIGRATION,
+ INTERVAL,
+ batch_size: BATCH_SIZE,
+ track_jobs: true
+ )
+ end
+
+ def down
+ # noop
+ end
+end
diff --git a/db/schema_migrations/20210722151951 b/db/schema_migrations/20210722151951
new file mode 100644
index 00000000000..a5e6a8c0963
--- /dev/null
+++ b/db/schema_migrations/20210722151951
@@ -0,0 +1 @@
+7289fb2a65c1210a352991fae7fac0c8e1129a33c166d0dad6f2aed98cb672a6 \ No newline at end of file
diff --git a/db/schema_migrations/20210728174349 b/db/schema_migrations/20210728174349
new file mode 100644
index 00000000000..59035edce30
--- /dev/null
+++ b/db/schema_migrations/20210728174349
@@ -0,0 +1 @@
+3a56c903333f13e9e3d39e5b65a3b70fdcfbf967cdac8bff348dfb71c0fde520 \ No newline at end of file
diff --git a/db/schema_migrations/20210811214811 b/db/schema_migrations/20210811214811
new file mode 100644
index 00000000000..b34641b6b44
--- /dev/null
+++ b/db/schema_migrations/20210811214811
@@ -0,0 +1 @@
+9e66aa8fc5e2a32ce0857f7ef77e906424bdf86c49643dfc71ed1a2e353b2095 \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 870277556bb..8955a08a6ba 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -18133,7 +18133,9 @@ CREATE TABLE security_scans (
updated_at timestamp with time zone NOT NULL,
build_id bigint NOT NULL,
scan_type smallint NOT NULL,
- info jsonb DEFAULT '{}'::jsonb NOT NULL
+ info jsonb DEFAULT '{}'::jsonb NOT NULL,
+ project_id bigint,
+ pipeline_id bigint
);
CREATE SEQUENCE security_scans_id_seq
@@ -25160,6 +25162,10 @@ CREATE INDEX index_security_scans_on_created_at ON security_scans USING btree (c
CREATE INDEX index_security_scans_on_date_created_at_and_id ON security_scans USING btree (date(timezone('UTC'::text, created_at)), id);
+CREATE INDEX index_security_scans_on_pipeline_id ON security_scans USING btree (pipeline_id);
+
+CREATE INDEX index_security_scans_on_project_id ON security_scans USING btree (project_id);
+
CREATE INDEX index_self_managed_prometheus_alert_events_on_environment_id ON self_managed_prometheus_alert_events USING btree (environment_id);
CREATE INDEX index_sent_notifications_on_noteable_type_noteable_id ON sent_notifications USING btree (noteable_id) WHERE ((noteable_type)::text = 'Issue'::text);
@@ -26691,6 +26697,9 @@ ALTER TABLE ONLY label_links
ALTER TABLE ONLY project_group_links
ADD CONSTRAINT fk_daa8cee94c FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
+ALTER TABLE ONLY security_scans
+ ADD CONSTRAINT fk_dbc89265b9 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY epics
ADD CONSTRAINT fk_dccd3f98fc FOREIGN KEY (assignee_id) REFERENCES users(id) ON DELETE SET NULL;
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 341e569847a..8b308ce8960 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -11395,7 +11395,7 @@ Nuget dependency link metadata.
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="nugetdependencylinkmetadataid"></a>`id` | [`PackagesNugetDependencyLinkMetadatumID!`](#packagesnugetdependencylinkmetadatumid) | ID of the metadatum. |
-| <a id="nugetdependencylinkmetadatatargetframework"></a>`targetFramework` | [`String!`](#string) | Target framework of the depdency link package. |
+| <a id="nugetdependencylinkmetadatatargetframework"></a>`targetFramework` | [`String!`](#string) | Target framework of the dependency link package. |
### `NugetMetadata`
diff --git a/doc/development/service_ping/metrics_dictionary.md b/doc/development/service_ping/metrics_dictionary.md
index d3eeaedd91d..b3c5f078a4a 100644
--- a/doc/development/service_ping/metrics_dictionary.md
+++ b/doc/development/service_ping/metrics_dictionary.md
@@ -37,7 +37,7 @@ Each metric is defined in a separate YAML file consisting of a number of fields:
| `status` | yes | `string`; [status](#metric-statuses) of the metric, may be set to `data_available`, `implemented`, `not_used`, `deprecated`, `removed`, `broken`. |
| `time_frame` | yes | `string`; may be set to a value like `7d`, `28d`, `all`, `none`. |
| `data_source` | yes | `string`; may be set to a value like `database`, `redis`, `redis_hll`, `prometheus`, `system`. |
-| `data_category` | yes | `string`; [categories](#data-category) of the metric, may be set to `Operational`, `Optional`, `Subscription`, `Standard`. The default value is `Optional`.|
+| `data_category` | yes | `string`; [categories](#data-category) of the metric, may be set to `operational`, `optional`, `subscription`, `standard`. The default value is `optional`.|
| `instrumentation_class` | no | `string`; [the class that implements the metric](metrics_instrumentation.md). |
| `distribution` | yes | `array`; may be set to one of `ce, ee` or `ee`. The [distribution](https://about.gitlab.com/handbook/marketing/strategic-marketing/tiers/#definitions) where the tracked feature is available. |
| `performance_indicator_type` | no | `array`; may be set to one of [`gmau`, `smau`, `paid_gmau`, or `umau`](https://about.gitlab.com/handbook/business-technology/data-team/data-catalog/xmau-analysis/). |
@@ -99,10 +99,10 @@ should be changed.
We use the following categories to classify a metric:
-- `Operational`: Required data for operational purposes.
-- `Optional`: Default value for a metric. Data that is optional to collect. This can be [enabled or disabled](../service_ping/index.md#disable-service-ping) in the Admin Area.
-- `Subscription`: Data related to licensing.
-- `Standard`: Standard set of identifiers that are included when collecting data.
+- `operational`: Required data for operational purposes.
+- `optional`: Default value for a metric. Data that is optional to collect. This can be [enabled or disabled](../service_ping/index.md#disable-service-ping) in the Admin Area.
+- `subscription`: Data related to licensing.
+- `standard`: Standard set of identifiers that are included when collecting data.
### Metric name suggestion examples
diff --git a/doc/user/admin_area/moderate_users.md b/doc/user/admin_area/moderate_users.md
index 43aacc364a6..8211167895c 100644
--- a/doc/user/admin_area/moderate_users.md
+++ b/doc/user/admin_area/moderate_users.md
@@ -195,12 +195,12 @@ Users can also be activated using the [GitLab API](../../api/users.md#activate-u
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/327353) in GitLab 14.2.
-GitLab administrators can ban and unban users. The banned user's issues are still displayed. Hiding
-a banned user's issues is a [work in progress](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66687).
+GitLab administrators can ban and unban users. Banned users are blocked, and their issues are hidden.
+The banned user's comments are still displayed. Hiding a banned user's comments is [tracked in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/327356).
### Ban a user
-To completely block a user, administrators can choose to ban the user.
+To block a user and hide their contributions, administrators can ban the user.
Users can be banned using the Admin Area. To do this:
diff --git a/generator_templates/usage_metric_definition/metric_definition.yml b/generator_templates/usage_metric_definition/metric_definition.yml
index 8dc7db146eb..1d84214d924 100644
--- a/generator_templates/usage_metric_definition/metric_definition.yml
+++ b/generator_templates/usage_metric_definition/metric_definition.yml
@@ -11,7 +11,7 @@ milestone: "<%= milestone %>"
introduced_by_url:
time_frame: <%= time_frame %>
data_source:
-data_category: Optional
+data_category: optional
performance_indicator_type:
distribution:
<%= distribution %>
diff --git a/lib/gitlab/background_migration/copy_ci_builds_columns_to_security_scans.rb b/lib/gitlab/background_migration/copy_ci_builds_columns_to_security_scans.rb
new file mode 100644
index 00000000000..59ce06d3e8f
--- /dev/null
+++ b/lib/gitlab/background_migration/copy_ci_builds_columns_to_security_scans.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+# rubocop:disable Style/Documentation
+
+module Gitlab
+ module BackgroundMigration
+ class CopyCiBuildsColumnsToSecurityScans
+ extend ::Gitlab::Utils::Override
+
+ UPDATE_BATCH_SIZE = 500
+
+ def perform(start_id, stop_id)
+ (start_id..stop_id).step(UPDATE_BATCH_SIZE).each do |offset|
+ batch_start = offset
+ batch_stop = offset + UPDATE_BATCH_SIZE - 1
+
+ ActiveRecord::Base.connection.execute <<~SQL
+ UPDATE
+ security_scans
+ SET
+ project_id = ci_builds.project_id,
+ pipeline_id = ci_builds.commit_id
+ FROM ci_builds
+ WHERE ci_builds.type='Ci::Build'
+ AND ci_builds.id=security_scans.build_id
+ AND security_scans.id BETWEEN #{Integer(batch_start)} AND #{Integer(batch_stop)}
+ SQL
+ end
+
+ mark_job_as_succeeded(start_id, stop_id)
+ rescue StandardError => error
+ Gitlab::ErrorTracking.track_and_raise_for_dev_exception(error)
+ end
+ end
+
+ private
+
+ def mark_job_as_succeeded(*arguments)
+ Gitlab::Database::BackgroundMigrationJob.mark_all_as_succeeded(
+ 'CopyCiBuildsColumnsToSecurityScans',
+ arguments
+ )
+ end
+ end
+end
diff --git a/lib/gitlab/ci/reports/security/finding.rb b/lib/gitlab/ci/reports/security/finding.rb
index a0d9318859d..dc1c51b3ed0 100644
--- a/lib/gitlab/ci/reports/security/finding.rb
+++ b/lib/gitlab/ci/reports/security/finding.rb
@@ -21,7 +21,8 @@ module Gitlab
attr_reader :scanner
attr_reader :scan
attr_reader :severity
- attr_reader :uuid
+ attr_accessor :uuid
+ attr_accessor :overridden_uuid
attr_reader :remediations
attr_reader :details
attr_reader :signatures
diff --git a/lib/gitlab/usage/metric_definition.rb b/lib/gitlab/usage/metric_definition.rb
index 7cfd9d2c5e9..db0cb4c6326 100644
--- a/lib/gitlab/usage/metric_definition.rb
+++ b/lib/gitlab/usage/metric_definition.rb
@@ -55,6 +55,10 @@ module Gitlab
end
end
+ def category_to_lowercase
+ attributes[:data_category]&.downcase!
+ end
+
alias_method :to_dictionary, :to_h
class << self
@@ -96,7 +100,7 @@ module Gitlab
definition = YAML.safe_load(definition)
definition.deep_symbolize_keys!
- self.new(path, definition).tap(&:validate!)
+ self.new(path, definition).tap(&:validate!).tap(&:category_to_lowercase)
rescue StandardError => e
Gitlab::ErrorTracking.track_and_raise_for_dev_exception(InvalidError.new(e.message))
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 7c36f531da8..59a55462340 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -2343,7 +2343,7 @@ msgstr ""
msgid "AdminArea|View latest users"
msgstr ""
-msgid "AdminArea|You’re about to stop all jobs.This will halt all current jobs that are running."
+msgid "AdminArea|You’re about to stop all jobs. This will halt all current jobs that are running."
msgstr ""
msgid "AdminDashboard|Error loading the statistics. Please try again"
@@ -2571,12 +2571,6 @@ msgstr ""
msgid "AdminUsers|Blocking user has the following effects:"
msgstr ""
-msgid "AdminUsers|Can't access Git repositories."
-msgstr ""
-
-msgid "AdminUsers|Can't log in."
-msgstr ""
-
msgid "AdminUsers|Cannot sign in or access instance information"
msgstr ""
@@ -2643,6 +2637,9 @@ msgstr ""
msgid "AdminUsers|Is using seat"
msgstr ""
+msgid "AdminUsers|Issues authored by this user are hidden from other users."
+msgstr ""
+
msgid "AdminUsers|It's you!"
msgstr ""
@@ -2706,6 +2703,12 @@ msgstr ""
msgid "AdminUsers|Sort by"
msgstr ""
+msgid "AdminUsers|The user can't access git repositories."
+msgstr ""
+
+msgid "AdminUsers|The user can't log in."
+msgstr ""
+
msgid "AdminUsers|The user will be logged out"
msgstr ""
@@ -2772,7 +2775,7 @@ msgstr ""
msgid "AdminUsers|What does this mean?"
msgstr ""
-msgid "AdminUsers|When banned, users:"
+msgid "AdminUsers|When banned:"
msgstr ""
msgid "AdminUsers|When the user logs back in, their account will reactivate as a fully active account"
@@ -7843,7 +7846,7 @@ msgstr ""
msgid "ClusterIntegration|Subnets"
msgstr ""
-msgid "ClusterIntegration|The Amazon Resource Name (ARN) associated with your role. If you do not have a provision role, first create one on %{startAwsLink}Amazon Web Services %{externalLinkIcon}%{endLink} using the above account and external IDs. %{startMoreInfoLink}More information%{endLink}"
+msgid "ClusterIntegration|The Amazon Resource Name (ARN) associated with your role. If you do not have a provisioned role, first create one on %{startAwsLink}Amazon Web Services %{externalLinkIcon}%{endLink} using the above account and external IDs. %{startMoreInfoLink}More information%{endLink}"
msgstr ""
msgid "ClusterIntegration|The Kubernetes certificate used to authenticate to the cluster."
@@ -12748,6 +12751,9 @@ msgstr ""
msgid "Environments|Deployment %{status}"
msgstr ""
+msgid "Environments|Dismiss"
+msgstr ""
+
msgid "Environments|Enable review app"
msgstr ""
@@ -12760,6 +12766,9 @@ msgstr ""
msgid "Environments|Environments are places where code gets deployed, such as staging or production."
msgstr ""
+msgid "Environments|Help us improve environments"
+msgstr ""
+
msgid "Environments|Install Elastic Stack on your cluster to enable advanced querying capabilities such as full text search."
msgstr ""
@@ -12835,6 +12844,9 @@ msgstr ""
msgid "Environments|Stopping %{environmentName}"
msgstr ""
+msgid "Environments|Take the survey"
+msgstr ""
+
msgid "Environments|There was an error fetching the logs. Please try again."
msgstr ""
@@ -12856,6 +12868,9 @@ msgstr ""
msgid "Environments|You don't have any environments right now"
msgstr ""
+msgid "Environments|Your feedback helps GitLab make environments better for you and other users. Participate and enter a sweepstake to win a USD 30 gift card."
+msgstr ""
+
msgid "Environments|protected"
msgstr ""
@@ -20570,7 +20585,7 @@ msgstr ""
msgid "Maximum file size indexed (KiB)"
msgstr ""
-msgid "Maximum file size is 1MB. Image size must be 32x32px. Allowed image formats are %{favicon_extension_whitelist}."
+msgid "Maximum file size is 1 MB. Image size must be 32 x 32 pixels. Allowed image formats are %{favicon_extension_whitelist}."
msgstr ""
msgid "Maximum file size is 1MB. Pages are optimized for a 28px tall header logo"
@@ -23115,7 +23130,7 @@ msgstr ""
msgid "OnCallSchedules|Collapse schedule"
msgstr ""
-msgid "OnCallSchedules|Create on-call schedules in GitLab"
+msgid "OnCallSchedules|Create on-call schedules in GitLab"
msgstr ""
msgid "OnCallSchedules|Currently no rotation."
@@ -23411,7 +23426,7 @@ msgstr ""
msgid "Open Selection"
msgstr ""
-msgid "Open a CLI and connect to the cluster you want to install the Agent in. Use this installation method to minimise any manual steps.The token is already included in the command."
+msgid "Open a CLI and connect to the cluster you want to install the Agent in. Use this installation method to minimize any manual steps. The token is already included in the command."
msgstr ""
msgid "Open comment type dropdown"
@@ -32719,7 +32734,7 @@ msgstr ""
msgid "Terraform|Unlocking state"
msgstr ""
-msgid "Terraform|You are about to remove the State file %{name}. This will permanently delete all the State versions and history. The infrastructure provisioned previously\twill remain intact, only the state file with all its versions are to be removed. This action is non-revertible."
+msgid "Terraform|You are about to remove the state file %{name}. This will permanently delete all the State versions and history. The infrastructure provisioned previously will remain intact, and only the state file with all its versions will be removed. This action cannot be undone."
msgstr ""
msgid "Terraform|You cannot remove the State file because it's locked. Unlock the State file first before removing it."
@@ -34017,6 +34032,9 @@ msgstr ""
msgid "This issue is currently blocked by the following issues:"
msgstr ""
+msgid "This issue is hidden because its author has been banned"
+msgstr ""
+
msgid "This issue is in a child epic of the filtered epic"
msgstr ""
@@ -38166,7 +38184,7 @@ msgstr ""
msgid "You have set up 2FA for your account! If you lose access to your 2FA device, you can use your recovery codes to access your account. Alternatively, if you upload an SSH key, you can %{anchorOpen}use that key to generate additional recovery codes%{anchorClose}."
msgstr ""
-msgid "You have successfully purchased %{product}. You'll receive a receipt by mail."
+msgid "You have successfully purchased %{product}. You'll receive a receipt by email."
msgstr ""
msgid "You have successfully purchased a %{plan} plan subscription for %{seats}. You’ll receive a receipt via email."
@@ -38592,7 +38610,7 @@ msgstr ""
msgid "Your requirements are being imported. Once finished, you'll receive a confirmation email."
msgstr ""
-msgid "Your requirements will be imported in the background. Once it's finished, you'll get a confirmation email. "
+msgid "Your requirements will be imported in the background. After it's finished, you'll get a confirmation email."
msgstr ""
msgid "Your response has been recorded."
diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb
index 18f2f7b54c4..7e4b8c53885 100644
--- a/spec/db/schema_spec.rb
+++ b/spec/db/schema_spec.rb
@@ -86,7 +86,8 @@ RSpec.describe 'Database schema' do
users: %w[color_scheme_id created_by_id theme_id email_opted_in_source_id],
users_star_projects: %w[user_id],
vulnerability_identifiers: %w[external_id],
- vulnerability_scanners: %w[external_id]
+ vulnerability_scanners: %w[external_id],
+ security_scans: %w[pipeline_id] # foreign key is not added as ci_pipeline table will be moved into different db soon
}.with_indifferent_access.freeze
context 'for table' do
diff --git a/spec/features/clusters/cluster_health_dashboard_spec.rb b/spec/features/clusters/cluster_health_dashboard_spec.rb
index 32caad775e4..e4a36f654e5 100644
--- a/spec/features/clusters/cluster_health_dashboard_spec.rb
+++ b/spec/features/clusters/cluster_health_dashboard_spec.rb
@@ -80,7 +80,7 @@ RSpec.describe 'Cluster Health board', :js, :kubeclient, :use_clean_rails_memory
expect(page).to have_content('Avg')
end
- it 'focuses the single panel on toggle' do
+ it 'focuses the single panel on toggle', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338341' do
click_button('More actions')
click_button('Expand panel')
diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb
index 1c8c2af8e03..0cb73f3da6d 100644
--- a/spec/finders/issues_finder_spec.rb
+++ b/spec/finders/issues_finder_spec.rb
@@ -789,7 +789,7 @@ RSpec.describe IssuesFinder do
context 'user filters confidential issues' do
let(:params) { { confidential: true } }
- it 'returns only confdential issues' do
+ it 'returns only confidential issues' do
expect(issues).to contain_exactly(confidential_issue)
end
end
@@ -797,7 +797,7 @@ RSpec.describe IssuesFinder do
context 'user filters only public issues' do
let(:params) { { confidential: false } }
- it 'returns only confdential issues' do
+ it 'returns only public issues' do
expect(issues).to contain_exactly(issue1, issue2, issue3, issue4, issue5)
end
end
@@ -1004,9 +1004,38 @@ RSpec.describe IssuesFinder do
let(:guest) { create(:user) }
let_it_be(:authorized_user) { create(:user) }
+ let_it_be(:banned_user) { create(:user, :banned) }
let_it_be(:project) { create(:project, namespace: authorized_user.namespace) }
let_it_be(:public_issue) { create(:issue, project: project) }
let_it_be(:confidential_issue) { create(:issue, project: project, confidential: true) }
+ let_it_be(:hidden_issue) { create(:issue, project: project, author: banned_user) }
+
+ shared_examples 'returns public, does not return hidden or confidential' do
+ it 'returns only public issues' do
+ expect(subject).to include(public_issue)
+ expect(subject).not_to include(confidential_issue, hidden_issue)
+ end
+ end
+
+ shared_examples 'returns public and confidential, does not return hidden' do
+ it 'returns only public and confidential issues' do
+ expect(subject).to include(public_issue, confidential_issue)
+ expect(subject).not_to include(hidden_issue)
+ end
+ end
+
+ shared_examples 'returns public and hidden, does not return confidential' do
+ it 'returns only public and hidden issues' do
+ expect(subject).to include(public_issue, hidden_issue)
+ expect(subject).not_to include(confidential_issue)
+ end
+ end
+
+ shared_examples 'returns public, confidential, and hidden' do
+ it 'returns all issues' do
+ expect(subject).to include(public_issue, confidential_issue, hidden_issue)
+ end
+ end
context 'when no project filter is given' do
let(:params) { {} }
@@ -1014,18 +1043,28 @@ RSpec.describe IssuesFinder do
context 'for an anonymous user' do
subject { described_class.new(nil, params).with_confidentiality_access_check }
- it 'returns only public issues' do
- expect(subject).to include(public_issue)
- expect(subject).not_to include(confidential_issue)
+ it_behaves_like 'returns public, does not return hidden or confidential'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public and hidden, does not return confidential'
end
end
context 'for a user without project membership' do
subject { described_class.new(user, params).with_confidentiality_access_check }
- it 'returns only public issues' do
- expect(subject).to include(public_issue)
- expect(subject).not_to include(confidential_issue)
+ it_behaves_like 'returns public, does not return hidden or confidential'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public and hidden, does not return confidential'
end
end
@@ -1036,17 +1075,28 @@ RSpec.describe IssuesFinder do
project.add_guest(guest)
end
- it 'returns only public issues' do
- expect(subject).to include(public_issue)
- expect(subject).not_to include(confidential_issue)
+ it_behaves_like 'returns public, does not return hidden or confidential'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public and hidden, does not return confidential'
end
end
context 'for a project member with access to view confidential issues' do
subject { described_class.new(authorized_user, params).with_confidentiality_access_check }
- it 'returns all issues' do
- expect(subject).to include(public_issue, confidential_issue)
+ it_behaves_like 'returns public and confidential, does not return hidden'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public, confidential, and hidden'
end
end
@@ -1056,15 +1106,26 @@ RSpec.describe IssuesFinder do
subject { described_class.new(admin_user, params).with_confidentiality_access_check }
context 'when admin mode is enabled', :enable_admin_mode do
- it 'returns all issues' do
- expect(subject).to include(public_issue, confidential_issue)
+ it_behaves_like 'returns public, confidential, and hidden'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public, confidential, and hidden'
end
end
context 'when admin mode is disabled' do
- it 'returns only public issues' do
- expect(subject).to include(public_issue)
- expect(subject).not_to include(confidential_issue)
+ it_behaves_like 'returns public, does not return hidden or confidential'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public and hidden, does not return confidential'
end
end
end
@@ -1076,14 +1137,18 @@ RSpec.describe IssuesFinder do
context 'for an anonymous user' do
subject { described_class.new(nil, params).with_confidentiality_access_check }
- it 'returns only public issues' do
- expect(subject).to include(public_issue)
- expect(subject).not_to include(confidential_issue)
+ it_behaves_like 'returns public, does not return hidden or confidential'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public and hidden, does not return confidential'
end
it 'does not filter by confidentiality' do
expect(Issue).not_to receive(:where).with(a_string_matching('confidential'), anything)
-
subject
end
end
@@ -1091,9 +1156,14 @@ RSpec.describe IssuesFinder do
context 'for a user without project membership' do
subject { described_class.new(user, params).with_confidentiality_access_check }
- it 'returns only public issues' do
- expect(subject).to include(public_issue)
- expect(subject).not_to include(confidential_issue)
+ it_behaves_like 'returns public, does not return hidden or confidential'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public and hidden, does not return confidential'
end
it 'filters by confidentiality' do
@@ -1108,9 +1178,14 @@ RSpec.describe IssuesFinder do
project.add_guest(guest)
end
- it 'returns only public issues' do
- expect(subject).to include(public_issue)
- expect(subject).not_to include(confidential_issue)
+ it_behaves_like 'returns public, does not return hidden or confidential'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public and hidden, does not return confidential'
end
it 'filters by confidentiality' do
@@ -1121,8 +1196,14 @@ RSpec.describe IssuesFinder do
context 'for a project member with access to view confidential issues' do
subject { described_class.new(authorized_user, params).with_confidentiality_access_check }
- it 'returns all issues' do
- expect(subject).to include(public_issue, confidential_issue)
+ it_behaves_like 'returns public and confidential, does not return hidden'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public, confidential, and hidden'
end
it 'does not filter by confidentiality' do
@@ -1138,8 +1219,14 @@ RSpec.describe IssuesFinder do
subject { described_class.new(admin_user, params).with_confidentiality_access_check }
context 'when admin mode is enabled', :enable_admin_mode do
- it 'returns all issues' do
- expect(subject).to include(public_issue, confidential_issue)
+ it_behaves_like 'returns public, confidential, and hidden'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public, confidential, and hidden'
end
it 'does not filter by confidentiality' do
@@ -1150,9 +1237,14 @@ RSpec.describe IssuesFinder do
end
context 'when admin mode is disabled' do
- it 'returns only public issues' do
- expect(subject).to include(public_issue)
- expect(subject).not_to include(confidential_issue)
+ it_behaves_like 'returns public, does not return hidden or confidential'
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it_behaves_like 'returns public and hidden, does not return confidential'
end
it 'filters by confidentiality' do
diff --git a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml
index af5704f7d01..8495d983d10 100644
--- a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml
+++ b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml
@@ -12,7 +12,7 @@ milestone: "13.9"
introduced_by_url:
time_frame: 7d
data_source:
-data_category: Operational
+data_category: operational
performance_indicator_type:
distribution:
- ce
diff --git a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml
index 6f4e2b3f9ee..82e9af5b04f 100644
--- a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml
+++ b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_ee.yml
@@ -12,7 +12,7 @@ milestone: "13.9"
introduced_by_url:
time_frame: 7d
data_source:
-data_category: Optional
+data_category: optional
performance_indicator_type:
distribution:
- ee
diff --git a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_name_suggestions.yml b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_name_suggestions.yml
index a0e5ea799a5..aad7dc76290 100644
--- a/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_name_suggestions.yml
+++ b/spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_name_suggestions.yml
@@ -13,7 +13,7 @@ milestone: "13.9"
introduced_by_url:
time_frame: 7d
data_source:
-data_category: Optional
+data_category: optional
performance_indicator_type:
distribution:
- ce
diff --git a/spec/frontend/environments/environments_app_spec.js b/spec/frontend/environments/environments_app_spec.js
index 1abdeff614c..dc176001943 100644
--- a/spec/frontend/environments/environments_app_spec.js
+++ b/spec/frontend/environments/environments_app_spec.js
@@ -1,4 +1,4 @@
-import { GlTabs } from '@gitlab/ui';
+import { GlTabs, GlAlert } from '@gitlab/ui';
import { mount, shallowMount } from '@vue/test-utils';
import MockAdapter from 'axios-mock-adapter';
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
@@ -7,7 +7,9 @@ import DeployBoard from '~/environments/components/deploy_board.vue';
import EmptyState from '~/environments/components/empty_state.vue';
import EnableReviewAppModal from '~/environments/components/enable_review_app_modal.vue';
import EnvironmentsApp from '~/environments/components/environments_app.vue';
+import { ENVIRONMENTS_SURVEY_DISMISSED_COOKIE_NAME } from '~/environments/constants';
import axios from '~/lib/utils/axios_utils';
+import { setCookie, getCookie, removeCookie } from '~/lib/utils/common_utils';
import * as urlUtils from '~/lib/utils/url_utility';
import { environment, folder } from './mock_data';
@@ -48,6 +50,7 @@ describe('Environment', () => {
const findNewEnvironmentButton = () => wrapper.findByTestId('new-environment');
const findEnvironmentsTabAvailable = () => wrapper.find('.js-environments-tab-available > a');
const findEnvironmentsTabStopped = () => wrapper.find('.js-environments-tab-stopped > a');
+ const findSurveyAlert = () => wrapper.find(GlAlert);
beforeEach(() => {
mock = new MockAdapter(axios);
@@ -280,4 +283,49 @@ describe('Environment', () => {
expect(wrapper.findComponent(GlTabs).attributes('value')).toBe('1');
});
});
+
+ describe('survey alert', () => {
+ beforeEach(async () => {
+ mockRequest(200, { environments: [] });
+ await createWrapper(true);
+ });
+
+ afterEach(() => {
+ removeCookie(ENVIRONMENTS_SURVEY_DISMISSED_COOKIE_NAME);
+ });
+
+ describe('when the user has not dismissed the alert', () => {
+ it('shows the alert', () => {
+ expect(findSurveyAlert().exists()).toBe(true);
+ });
+
+ describe('when the user dismisses the alert', () => {
+ beforeEach(() => {
+ findSurveyAlert().vm.$emit('dismiss');
+ });
+
+ it('hides the alert', () => {
+ expect(findSurveyAlert().exists()).toBe(false);
+ });
+
+ it('persists the dismisal using a cookie', () => {
+ const cookieValue = getCookie(ENVIRONMENTS_SURVEY_DISMISSED_COOKIE_NAME);
+
+ expect(cookieValue).toBe('true');
+ });
+ });
+ });
+
+ describe('when the user has previously dismissed the alert', () => {
+ beforeEach(async () => {
+ setCookie(ENVIRONMENTS_SURVEY_DISMISSED_COOKIE_NAME, 'true');
+
+ await createWrapper(true);
+ });
+
+ it('does not show the alert', () => {
+ expect(findSurveyAlert().exists()).toBe(false);
+ });
+ });
+ });
});
diff --git a/spec/frontend/terraform/components/states_table_actions_spec.js b/spec/frontend/terraform/components/states_table_actions_spec.js
index 34e7d597cd8..9d28e8ce294 100644
--- a/spec/frontend/terraform/components/states_table_actions_spec.js
+++ b/spec/frontend/terraform/components/states_table_actions_spec.js
@@ -275,7 +275,7 @@ describe('StatesTableActions', () => {
it('displays a remove modal', () => {
expect(findRemoveModal().text()).toContain(
- `You are about to remove the State file ${defaultProps.state.name}`,
+ `You are about to remove the state file ${defaultProps.state.name}`,
);
});
diff --git a/spec/graphql/mutations/design_management/delete_spec.rb b/spec/graphql/mutations/design_management/delete_spec.rb
index 3efa865c64b..93fff5e5103 100644
--- a/spec/graphql/mutations/design_management/delete_spec.rb
+++ b/spec/graphql/mutations/design_management/delete_spec.rb
@@ -86,9 +86,9 @@ RSpec.describe Mutations::DesignManagement::Delete do
end
end
- it 'runs no more than 28 queries' do
+ it 'runs no more than 29 queries' do
filenames.each(&:present?) # ignore setup
- # Queries: as of 2019-08-28
+ # Queries: as of 2021-07-22
# -------------
# 01. routing query
# 02. find project by id
@@ -100,25 +100,26 @@ RSpec.describe Mutations::DesignManagement::Delete do
# 09. find namespace by id
# 10. find group namespace by id
# 11. project.authorizations for user (same query as 5)
- # 12. project.project_features (same query as 3)
- # 13. project.authorizations for user (same query as 5)
- # 14. current designs by filename and issue
- # 15, 16 project.authorizations for user (same query as 5)
- # 17. find route by id and source_type
+ # 12. find user by id
+ # 13. project.project_features (same query as 3)
+ # 14. project.authorizations for user (same query as 5)
+ # 15. current designs by filename and issue
+ # 16, 17 project.authorizations for user (same query as 5)
+ # 18. find route by id and source_type
# ------------- our queries are below:
- # 18. start transaction 1
- # 19. start transaction 2
- # 20. find version by sha and issue
- # 21. exists version with sha and issue?
- # 22. leave transaction 2
- # 23. create version with sha and issue
- # 24. create design-version links
- # 25. validate version.actions.present?
- # 26. validate version.issue.present?
- # 27. validate version.sha is unique
- # 28. leave transaction 1
+ # 19. start transaction 1
+ # 20. start transaction 2
+ # 21. find version by sha and issue
+ # 22. exists version with sha and issue?
+ # 23. leave transaction 2
+ # 24. create version with sha and issue
+ # 25. create design-version links
+ # 26. validate version.actions.present?
+ # 27. validate version.issue.present?
+ # 28. validate version.sha is unique
+ # 29. leave transaction 1
#
- expect { run_mutation }.not_to exceed_query_limit(28)
+ expect { run_mutation }.not_to exceed_query_limit(29)
end
end
diff --git a/spec/graphql/resolvers/issues_resolver_spec.rb b/spec/graphql/resolvers/issues_resolver_spec.rb
index d0675633a9b..6e187e57729 100644
--- a/spec/graphql/resolvers/issues_resolver_spec.rb
+++ b/spec/graphql/resolvers/issues_resolver_spec.rb
@@ -393,13 +393,13 @@ RSpec.describe Resolvers::IssuesResolver do
end
it 'finds a specific issue with iid', :request_store do
- result = batch_sync(max_queries: 4) { resolve_issues(iid: issue1.iid).to_a }
+ result = batch_sync(max_queries: 5) { resolve_issues(iid: issue1.iid).to_a }
expect(result).to contain_exactly(issue1)
end
it 'batches queries that only include IIDs', :request_store do
- result = batch_sync(max_queries: 4) do
+ result = batch_sync(max_queries: 5) do
[issue1, issue2]
.map { |issue| resolve_issues(iid: issue.iid.to_s) }
.flat_map(&:to_a)
@@ -409,7 +409,7 @@ RSpec.describe Resolvers::IssuesResolver do
end
it 'finds a specific issue with iids', :request_store do
- result = batch_sync(max_queries: 4) do
+ result = batch_sync(max_queries: 5) do
resolve_issues(iids: [issue1.iid]).to_a
end
diff --git a/spec/lib/gitlab/background_migration/copy_ci_builds_columns_to_security_scans_spec.rb b/spec/lib/gitlab/background_migration/copy_ci_builds_columns_to_security_scans_spec.rb
new file mode 100644
index 00000000000..db822f36c21
--- /dev/null
+++ b/spec/lib/gitlab/background_migration/copy_ci_builds_columns_to_security_scans_spec.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::BackgroundMigration::CopyCiBuildsColumnsToSecurityScans, schema: 20210728174349 do
+ let(:migration) { described_class.new }
+
+ let_it_be(:namespaces) { table(:namespaces) }
+ let_it_be(:projects) { table(:projects) }
+ let_it_be(:ci_pipelines) { table(:ci_pipelines) }
+ let_it_be(:ci_builds) { table(:ci_builds) }
+ let_it_be(:security_scans) { table(:security_scans) }
+
+ let!(:namespace) { namespaces.create!(name: 'namespace', path: 'namespace') }
+ let!(:project1) { projects.create!(namespace_id: namespace.id) }
+ let!(:project2) { projects.create!(namespace_id: namespace.id) }
+ let!(:pipeline1) { ci_pipelines.create!(status: "success")}
+ let!(:pipeline2) { ci_pipelines.create!(status: "success")}
+
+ let!(:build1) { ci_builds.create!(commit_id: pipeline1.id, type: 'Ci::Build', project_id: project1.id) }
+ let!(:build2) { ci_builds.create!(commit_id: pipeline2.id, type: 'Ci::Build', project_id: project2.id) }
+ let!(:build3) { ci_builds.create!(commit_id: pipeline1.id, type: 'Ci::Build', project_id: project1.id) }
+
+ let!(:scan1) { security_scans.create!(build_id: build1.id, scan_type: 1) }
+ let!(:scan2) { security_scans.create!(build_id: build2.id, scan_type: 1) }
+ let!(:scan3) { security_scans.create!(build_id: build3.id, scan_type: 1) }
+
+ subject { migration.perform(scan1.id, scan2.id) }
+
+ before do
+ stub_const("#{described_class}::UPDATE_BATCH_SIZE", 2)
+ end
+
+ it 'copies `project_id`, `commit_id` from `ci_builds` to `security_scans`', :aggregate_failures do
+ expect(migration).to receive(:mark_job_as_succeeded).with(scan1.id, scan2.id)
+
+ subject
+
+ scan1.reload
+ expect(scan1.project_id).to eq(project1.id)
+ expect(scan1.pipeline_id).to eq(pipeline1.id)
+
+ scan2.reload
+ expect(scan2.project_id).to eq(project2.id)
+ expect(scan2.pipeline_id).to eq(pipeline2.id)
+
+ scan3.reload
+ expect(scan3.project_id).to be_nil
+ expect(scan3.pipeline_id).to be_nil
+ end
+end
diff --git a/spec/lib/gitlab/usage/docs/helper_spec.rb b/spec/lib/gitlab/usage/docs/helper_spec.rb
index e2bb1d8d818..6cff1ab4126 100644
--- a/spec/lib/gitlab/usage/docs/helper_spec.rb
+++ b/spec/lib/gitlab/usage/docs/helper_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe Gitlab::Usage::Docs::Helper do
let(:metric_definition) do
{
- data_category: 'Standard',
+ data_category: 'standard',
name: 'test_metric',
description: description,
product_group: 'group::product intelligence',
@@ -66,7 +66,7 @@ RSpec.describe Gitlab::Usage::Docs::Helper do
end
describe '#render_data_category' do
- let(:expected) { 'Data Category: `Standard`' }
+ let(:expected) { 'Data Category: `standard`' }
it { expect(helper.render_data_category(metric_definition)).to eq(expected) }
end
diff --git a/spec/lib/gitlab/usage/metric_definition_spec.rb b/spec/lib/gitlab/usage/metric_definition_spec.rb
index a7cff80e43a..1ae8a0881ef 100644
--- a/spec/lib/gitlab/usage/metric_definition_spec.rb
+++ b/spec/lib/gitlab/usage/metric_definition_spec.rb
@@ -18,7 +18,7 @@ RSpec.describe Gitlab::Usage::MetricDefinition do
distribution: %w(ee ce),
tier: %w(free starter premium ultimate bronze silver gold),
name: 'uuid',
- data_category: 'Standard'
+ data_category: 'standard'
}
end
@@ -199,7 +199,7 @@ RSpec.describe Gitlab::Usage::MetricDefinition do
data_source: 'database',
distribution: %w(ee ce),
tier: %w(free starter premium ultimate bronze silver gold),
- data_category: 'Optional'
+ data_category: 'optional'
}
end
diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/collected_data_categories_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/collected_data_categories_metric_spec.rb
index 8f52d550e5c..1b2170baf17 100644
--- a/spec/lib/gitlab/usage/metrics/instrumentations/collected_data_categories_metric_spec.rb
+++ b/spec/lib/gitlab/usage/metrics/instrumentations/collected_data_categories_metric_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
RSpec.describe Gitlab::Usage::Metrics::Instrumentations::CollectedDataCategoriesMetric do
it_behaves_like 'a correct instrumented metric value', {} do
- let(:expected_value) { %w[Standard Subscription Operational Optional] }
+ let(:expected_value) { %w[standard subscription operational optional] }
before do
allow_next_instance_of(ServicePing::PermitDataCategoriesService) do |instance|
diff --git a/spec/lib/gitlab/usage_data_metrics_spec.rb b/spec/lib/gitlab/usage_data_metrics_spec.rb
index cb3ca32b31e..7608fa7e7a0 100644
--- a/spec/lib/gitlab/usage_data_metrics_spec.rb
+++ b/spec/lib/gitlab/usage_data_metrics_spec.rb
@@ -26,130 +26,54 @@ RSpec.describe Gitlab::UsageDataMetrics do
expect(subject[:counts]).to include(:boards)
end
- it 'includes i_quickactions_approve monthly and weekly key' do
- expect(subject[:redis_hll_counters][:quickactions]).to include(:i_quickactions_approve_monthly)
- expect(subject[:redis_hll_counters][:quickactions]).to include(:i_quickactions_approve_weekly)
- end
-
- it 'includes ide_edit monthly and weekly keys' do
- expect(subject[:redis_hll_counters][:ide_edit].keys).to contain_exactly(*[
- :g_edit_by_web_ide_monthly, :g_edit_by_web_ide_weekly,
- :g_edit_by_sfe_monthly, :g_edit_by_sfe_weekly,
- :g_edit_by_sse_monthly, :g_edit_by_sse_weekly,
- :g_edit_by_snippet_ide_monthly, :g_edit_by_snippet_ide_weekly,
- :ide_edit_total_unique_counts_monthly, :ide_edit_total_unique_counts_weekly
- ])
- end
-
- it 'includes incident_management_alerts monthly and weekly keys' do
- expect(subject[:redis_hll_counters][:incident_management_alerts].keys).to contain_exactly(*[
- :incident_management_alert_create_incident_monthly, :incident_management_alert_create_incident_weekly
- ])
- end
-
- it 'includes incident_management monthly and weekly keys' do
- expect(subject[:redis_hll_counters][:incident_management]).to include(
- :incident_management_incident_created_monthly, :incident_management_incident_created_weekly,
- :incident_management_incident_reopened_monthly, :incident_management_incident_reopened_weekly,
- :incident_management_incident_closed_monthly, :incident_management_incident_closed_weekly,
- :incident_management_incident_assigned_monthly, :incident_management_incident_assigned_weekly,
- :incident_management_incident_todo_monthly, :incident_management_incident_todo_weekly,
- :incident_management_incident_comment_monthly, :incident_management_incident_comment_weekly,
- :incident_management_incident_zoom_meeting_monthly, :incident_management_incident_zoom_meeting_weekly,
- :incident_management_incident_relate_monthly, :incident_management_incident_relate_weekly,
- :incident_management_incident_unrelate_monthly, :incident_management_incident_unrelate_weekly,
- :incident_management_incident_change_confidential_monthly, :incident_management_incident_change_confidential_weekly,
- :incident_management_alert_status_changed_monthly, :incident_management_alert_status_changed_weekly,
- :incident_management_alert_assigned_monthly, :incident_management_alert_assigned_weekly,
- :incident_management_alert_todo_monthly, :incident_management_alert_todo_weekly,
- :incident_management_total_unique_counts_monthly, :incident_management_total_unique_counts_weekly
- )
- end
-
- it 'includes testing monthly and weekly keys' do
- expect(subject[:redis_hll_counters][:testing]).to include(
- :i_testing_test_case_parsed_monthly, :i_testing_test_case_parsed_weekly,
- :users_expanding_testing_code_quality_report_monthly, :users_expanding_testing_code_quality_report_weekly,
- :users_expanding_testing_accessibility_report_monthly, :users_expanding_testing_accessibility_report_weekly,
- :i_testing_summary_widget_total_monthly, :i_testing_summary_widget_total_weekly,
- :testing_total_unique_counts_monthly
- )
- end
-
- it 'includes source_code monthly and weekly keys' do
- expect(subject[:redis_hll_counters][:source_code].keys).to contain_exactly(*[
- :wiki_action_monthly, :wiki_action_weekly,
- :design_action_monthly, :design_action_weekly,
- :project_action_monthly, :project_action_weekly,
- :git_write_action_monthly, :git_write_action_weekly,
- :merge_request_action_monthly, :merge_request_action_weekly,
- :i_source_code_code_intelligence_monthly, :i_source_code_code_intelligence_weekly
- ])
- end
-
- it 'includes code_review monthly and weekly keys' do
- category = 'code_review'
- events = Gitlab::UsageDataCounters::HLLRedisCounter.known_events.select { |event| event['category'] == category}.map { |event| event['name'] }
- known_events_keys = []
- events.each do |event_name|
- known_events_keys << "#{event_name}_monthly".to_sym
- known_events_keys << "#{event_name}_weekly".to_sym
+ describe 'Redis_HLL_counters' do
+ # categories to be merged on future MR
+ let(:ignored_metric_files_key_patterns) do
+ %w(
+ analytics
+ ci_templates
+ ecosystem
+ deploy_token_packages
+ user_packages
+ epic_events
+ snippets
+ epics_usage
+ network_policies
+ ).freeze
end
- known_events_keys << "#{category}_total_unique_counts_monthly".to_sym
- known_events_keys << "#{category}_total_unique_counts_weekly".to_sym
-
- expect(subject[:redis_hll_counters][:code_review].keys).to contain_exactly(*known_events_keys)
- end
- it 'includes terraform monthly key' do
- expect(subject[:redis_hll_counters][:terraform].keys).to include(:p_terraform_state_api_unique_users_monthly)
- end
+ let(:metric_files_key_paths) do
+ Gitlab::Usage::MetricDefinition
+ .definitions
+ .select { |k, v| v.attributes[:data_source] == 'redis_hll' && v.key_path.starts_with?('redis_hll_counters') }
+ .reject { |k, v| v.key_path =~ Regexp.union(ignored_metric_files_key_patterns) }
+ .keys
+ .sort
+ end
- it 'includes terraform monthly and weekly keys' do
- expect(subject[:redis_hll_counters][:pipeline_authoring].keys).to contain_exactly(*[
- :o_pipeline_authoring_unique_users_committing_ciconfigfile_monthly, :o_pipeline_authoring_unique_users_committing_ciconfigfile_weekly,
- :o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_monthly, :o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_weekly,
- :pipeline_authoring_total_unique_counts_monthly, :pipeline_authoring_total_unique_counts_weekly
- ])
- end
+ # Recursively traverse nested Hash of a generated Usage Ping to return an Array of key paths
+ # in the dotted format used in metric definition YAML files, e.g.: 'count.category.metric_name'
+ def parse_service_ping_keys(object, key_path = [])
+ if object.is_a?(Hash)
+ object.each_with_object([]) do |(key, value), result|
+ result.append parse_service_ping_keys(value, key_path + [key])
+ end
+ else
+ key_path.join('.')
+ end
+ end
- it 'includes users_expanding_secure_security_report monthly and weekly keys' do
- expect(subject[:redis_hll_counters][:secure].keys).to contain_exactly(*[
- :users_expanding_secure_security_report_monthly, :users_expanding_secure_security_report_weekly
- ])
- end
+ let(:usage_ping_key_paths) do
+ parse_service_ping_keys(subject)
+ .flatten
+ .select { |k| k.starts_with?('redis_hll_counters') }
+ .reject {|k| k =~ Regexp.union(ignored_metric_files_key_patterns) }
+ .sort
+ end
- it 'includes issues_edit monthly and weekly keys' do
- expect(subject[:redis_hll_counters][:issues_edit].keys).to include(
- :g_project_management_issue_title_changed_monthly, :g_project_management_issue_title_changed_weekly,
- :g_project_management_issue_description_changed_monthly, :g_project_management_issue_description_changed_weekly,
- :g_project_management_issue_assignee_changed_monthly, :g_project_management_issue_assignee_changed_weekly,
- :g_project_management_issue_made_confidential_monthly, :g_project_management_issue_made_confidential_weekly,
- :g_project_management_issue_made_visible_monthly, :g_project_management_issue_made_visible_weekly,
- :g_project_management_issue_created_monthly, :g_project_management_issue_created_weekly,
- :g_project_management_issue_closed_monthly, :g_project_management_issue_closed_weekly,
- :g_project_management_issue_reopened_monthly, :g_project_management_issue_reopened_weekly,
- :g_project_management_issue_label_changed_monthly, :g_project_management_issue_label_changed_weekly,
- :g_project_management_issue_milestone_changed_monthly, :g_project_management_issue_milestone_changed_weekly,
- :g_project_management_issue_cross_referenced_monthly, :g_project_management_issue_cross_referenced_weekly,
- :g_project_management_issue_moved_monthly, :g_project_management_issue_moved_weekly,
- :g_project_management_issue_related_monthly, :g_project_management_issue_related_weekly,
- :g_project_management_issue_unrelated_monthly, :g_project_management_issue_unrelated_weekly,
- :g_project_management_issue_marked_as_duplicate_monthly, :g_project_management_issue_marked_as_duplicate_weekly,
- :g_project_management_issue_locked_monthly, :g_project_management_issue_locked_weekly,
- :g_project_management_issue_unlocked_monthly, :g_project_management_issue_unlocked_weekly,
- :g_project_management_issue_designs_added_monthly, :g_project_management_issue_designs_added_weekly,
- :g_project_management_issue_designs_modified_monthly, :g_project_management_issue_designs_modified_weekly,
- :g_project_management_issue_designs_removed_monthly, :g_project_management_issue_designs_removed_weekly,
- :g_project_management_issue_due_date_changed_monthly, :g_project_management_issue_due_date_changed_weekly,
- :g_project_management_issue_time_estimate_changed_monthly, :g_project_management_issue_time_estimate_changed_weekly,
- :g_project_management_issue_time_spent_changed_monthly, :g_project_management_issue_time_spent_changed_weekly,
- :g_project_management_issue_comment_added_monthly, :g_project_management_issue_comment_added_weekly,
- :g_project_management_issue_comment_edited_monthly, :g_project_management_issue_comment_edited_weekly,
- :g_project_management_issue_comment_removed_monthly, :g_project_management_issue_comment_removed_weekly,
- :g_project_management_issue_cloned_monthly, :g_project_management_issue_cloned_weekly,
- :issues_edit_total_unique_counts_monthly, :issues_edit_total_unique_counts_weekly
- )
+ it 'is included in the Usage Ping hash structure' do
+ expect(metric_files_key_paths).to match_array(usage_ping_key_paths)
+ end
end
it 'includes counts keys' do
diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb
index 86121b984ac..b216d3698b5 100644
--- a/spec/lib/gitlab/usage_data_spec.rb
+++ b/spec/lib/gitlab/usage_data_spec.rb
@@ -1080,7 +1080,7 @@ RSpec.describe Gitlab::UsageData, :aggregate_failures do
end
it 'reports collected data categories' do
- expected_value = %w[Standard Subscription Operational Optional]
+ expected_value = %w[standard subscription operational optional]
allow_next_instance_of(ServicePing::PermitDataCategoriesService) do |instance|
expect(instance).to receive(:execute).and_return(expected_value)
diff --git a/spec/migrations/schedule_copy_ci_builds_columns_to_security_scans_spec.rb b/spec/migrations/schedule_copy_ci_builds_columns_to_security_scans_spec.rb
new file mode 100644
index 00000000000..5ebd8753892
--- /dev/null
+++ b/spec/migrations/schedule_copy_ci_builds_columns_to_security_scans_spec.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration!
+
+RSpec.describe ScheduleCopyCiBuildsColumnsToSecurityScans do
+ let_it_be(:namespaces) { table(:namespaces) }
+ let_it_be(:projects) { table(:projects) }
+ let_it_be(:ci_pipelines) { table(:ci_pipelines) }
+ let_it_be(:ci_builds) { table(:ci_builds) }
+ let_it_be(:security_scans) { table(:security_scans) }
+
+ let!(:namespace) { namespaces.create!(name: 'namespace', path: 'namespace') }
+ let!(:project) { projects.create!(namespace_id: namespace.id) }
+ let!(:pipeline) { ci_pipelines.create!(status: "success")}
+
+ let!(:build1) { ci_builds.create!(commit_id: pipeline.id, type: 'Ci::Build', project_id: project.id) }
+ let!(:build2) { ci_builds.create!(commit_id: pipeline.id, type: 'Ci::Build', project_id: project.id) }
+ let!(:build3) { ci_builds.create!(commit_id: pipeline.id, type: 'Ci::Build', project_id: project.id) }
+
+ let!(:scan1) { security_scans.create!(build_id: build1.id, scan_type: 1) }
+ let!(:scan2) { security_scans.create!(build_id: build2.id, scan_type: 1) }
+ let!(:scan3) { security_scans.create!(build_id: build3.id, scan_type: 1) }
+
+ before do
+ stub_const("#{described_class}::BATCH_SIZE", 2)
+ allow_next_instance_of(Gitlab::BackgroundMigration::CopyCiBuildsColumnsToSecurityScans) do |instance|
+ allow(instance).to receive(:mark_job_as_succeeded)
+ end
+ end
+
+ around do |example|
+ freeze_time { Sidekiq::Testing.fake! { example.run } }
+ end
+
+ it 'schedules background migrations', :aggregate_failures do
+ migrate!
+
+ expect(BackgroundMigrationWorker.jobs.size).to eq(2)
+ expect(described_class::MIGRATION).to be_scheduled_delayed_migration(2.minutes, scan1.id, scan2.id)
+ expect(described_class::MIGRATION).to be_scheduled_delayed_migration(4.minutes, scan3.id, scan3.id)
+ end
+end
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 26d2a05c54f..8e28b7dd250 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -796,17 +796,47 @@ RSpec.describe Issue do
end
end
+ shared_examples 'hidden issue readable by user' do
+ before do
+ issue.author.ban!
+ end
+
+ specify do
+ is_expected.to eq(true)
+ end
+
+ after do
+ issue.author.activate!
+ end
+ end
+
+ shared_examples 'hidden issue not readable by user' do
+ before do
+ issue.author.ban!
+ end
+
+ specify do
+ is_expected.to eq(false)
+ end
+
+ after do
+ issue.author.activate!
+ end
+ end
+
context 'with an admin user' do
let(:user) { build(:admin) }
context 'when admin mode is enabled', :enable_admin_mode do
it_behaves_like 'issue readable by user'
it_behaves_like 'confidential issue readable by user'
+ it_behaves_like 'hidden issue readable by user'
end
context 'when admin mode is disabled' do
it_behaves_like 'issue not readable by user'
it_behaves_like 'confidential issue not readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
end
@@ -817,6 +847,7 @@ RSpec.describe Issue do
it_behaves_like 'issue readable by user'
it_behaves_like 'confidential issue readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
context 'with a reporter user' do
@@ -826,6 +857,7 @@ RSpec.describe Issue do
it_behaves_like 'issue readable by user'
it_behaves_like 'confidential issue readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
context 'with a guest user' do
@@ -835,6 +867,7 @@ RSpec.describe Issue do
it_behaves_like 'issue readable by user'
it_behaves_like 'confidential issue not readable by user'
+ it_behaves_like 'hidden issue not readable by user'
context 'when user is an assignee' do
before do
@@ -843,6 +876,7 @@ RSpec.describe Issue do
it_behaves_like 'issue readable by user'
it_behaves_like 'confidential issue readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
context 'when user is the author' do
@@ -852,6 +886,7 @@ RSpec.describe Issue do
it_behaves_like 'issue readable by user'
it_behaves_like 'confidential issue readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
end
@@ -861,6 +896,7 @@ RSpec.describe Issue do
it_behaves_like 'issue readable by user'
it_behaves_like 'confidential issue not readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
context 'using an internal project' do
@@ -873,6 +909,7 @@ RSpec.describe Issue do
it_behaves_like 'issue readable by user'
it_behaves_like 'confidential issue not readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
context 'using an external user' do
@@ -882,6 +919,7 @@ RSpec.describe Issue do
it_behaves_like 'issue not readable by user'
it_behaves_like 'confidential issue not readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
end
@@ -892,6 +930,7 @@ RSpec.describe Issue do
it_behaves_like 'issue not readable by user'
it_behaves_like 'confidential issue not readable by user'
+ it_behaves_like 'hidden issue not readable by user'
end
end
@@ -1160,6 +1199,26 @@ RSpec.describe Issue do
end
end
+ describe '.without_hidden' do
+ let_it_be(:banned_user) { create(:user, :banned) }
+ let_it_be(:public_issue) { create(:issue, project: reusable_project) }
+ let_it_be(:hidden_issue) { create(:issue, project: reusable_project, author: banned_user) }
+
+ it 'only returns without_hidden issues' do
+ expect(described_class.without_hidden).to eq([public_issue])
+ end
+
+ context 'when feature flag is disabled' do
+ before do
+ stub_feature_flags(ban_user_feature_flag: false)
+ end
+
+ it 'returns public and hidden issues' do
+ expect(described_class.without_hidden).to eq([public_issue, hidden_issue])
+ end
+ end
+ end
+
describe '.by_project_id_and_iid' do
let_it_be(:issue_a) { create(:issue, project: reusable_project) }
let_it_be(:issue_b) { create(:issue, iid: issue_a.iid) }
diff --git a/spec/policies/issue_policy_spec.rb b/spec/policies/issue_policy_spec.rb
index 8ff936d5a35..d62271eedf6 100644
--- a/spec/policies/issue_policy_spec.rb
+++ b/spec/policies/issue_policy_spec.rb
@@ -360,6 +360,21 @@ RSpec.describe IssuePolicy do
expect(permissions(assignee, confidential_issue_no_assignee)).to be_disallowed(:read_issue, :read_issue_iid, :update_issue, :admin_issue, :set_issue_metadata)
end
end
+
+ context 'with a hidden issue' do
+ let(:user) { create(:user) }
+ let(:banned_user) { create(:user, :banned) }
+ let(:admin) { create(:user, :admin)}
+ let(:hidden_issue) { create(:issue, project: project, author: banned_user) }
+
+ it 'does not allow non-admin user to read the issue' do
+ expect(permissions(user, hidden_issue)).not_to be_allowed(:read_issue)
+ end
+
+ it 'allows admin to read the issue', :enable_admin_mode do
+ expect(permissions(admin, hidden_issue)).to be_allowed(:read_issue)
+ end
+ end
end
context 'with external authorization enabled' do
diff --git a/spec/services/service_ping/permit_data_categories_service_spec.rb b/spec/services/service_ping/permit_data_categories_service_spec.rb
index 5b25f216c4d..550c0ea5e13 100644
--- a/spec/services/service_ping/permit_data_categories_service_spec.rb
+++ b/spec/services/service_ping/permit_data_categories_service_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe ServicePing::PermitDataCategoriesService do
end
it 'returns all categories' do
- expect(permitted_categories).to match_array(%w[Standard Subscription Operational Optional])
+ expect(permitted_categories).to match_array(%w[standard subscription operational optional])
end
end
diff --git a/spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb b/spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb
index ea72398010c..6b49a415889 100644
--- a/spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb
+++ b/spec/support/shared_contexts/services/service_ping/stubbed_service_ping_metrics_definitions_shared_context.rb
@@ -6,20 +6,20 @@ RSpec.shared_context 'stubbed service ping metrics definitions' do
let(:metrics_definitions) { standard_metrics + subscription_metrics + operational_metrics + optional_metrics }
let(:standard_metrics) do
[
- metric_attributes('uuid', "Standard")
+ metric_attributes('uuid', "standard")
]
end
let(:operational_metrics) do
[
- metric_attributes('counts.merge_requests', "Operational"),
- metric_attributes('counts.todos', "Operational")
+ metric_attributes('counts.merge_requests', "operational"),
+ metric_attributes('counts.todos', "operational")
]
end
let(:optional_metrics) do
[
- metric_attributes('counts.boards', "Optional"),
+ metric_attributes('counts.boards', "optional"),
metric_attributes('gitaly.filesystems', '').except('data_category')
]
end