diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-09 21:08:33 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-09 21:08:33 +0300 |
commit | e440e09fe47e84c45f9ed9acc3ec1213846e8be4 (patch) | |
tree | 5ad7c327c3a6edb620ed49f0762ea958db40fdfb | |
parent | 9c39a0a9b81f06f6345a6b6e071b8e8cd249c064 (diff) |
Add latest changes from gitlab-org/gitlab@master
85 files changed, 570 insertions, 858 deletions
diff --git a/app/assets/javascripts/pipeline_editor/components/header/pipeline_status.vue b/app/assets/javascripts/pipeline_editor/components/header/pipeline_status.vue index 0f971573507..46f6f4a28c1 100644 --- a/app/assets/javascripts/pipeline_editor/components/header/pipeline_status.vue +++ b/app/assets/javascripts/pipeline_editor/components/header/pipeline_status.vue @@ -104,12 +104,16 @@ export default { class="gl-display-flex gl-justify-content-space-between gl-align-items-center gl-white-space-nowrap gl-max-w-full" > <template v-if="showLoadingState"> - <gl-loading-icon class="gl-mr-auto gl-display-inline-block" size="sm" /> - <span data-testid="pipeline-loading-msg">{{ $options.i18n.fetchLoading }}</span> + <div> + <gl-loading-icon class="gl-mr-auto gl-display-inline-block" size="sm" /> + <span data-testid="pipeline-loading-msg">{{ $options.i18n.fetchLoading }}</span> + </div> </template> <template v-else-if="hasError"> - <gl-icon class="gl-mr-auto" name="warning-solid" /> - <span data-testid="pipeline-error-msg">{{ $options.i18n.fetchError }}</span> + <div> + <gl-icon class="gl-mr-auto" name="warning-solid" /> + <span data-testid="pipeline-error-msg">{{ $options.i18n.fetchError }}</span> + </div> </template> <template v-else> <div> diff --git a/app/assets/javascripts/vue_shared/components/markdown/header.vue b/app/assets/javascripts/vue_shared/components/markdown/header.vue index d343ba700ab..3ed9de6c133 100644 --- a/app/assets/javascripts/vue_shared/components/markdown/header.vue +++ b/app/assets/javascripts/vue_shared/components/markdown/header.vue @@ -1,5 +1,5 @@ <script> -import { GlPopover, GlButton, GlTooltipDirective, GlIcon } from '@gitlab/ui'; +import { GlPopover, GlButton, GlTooltipDirective } from '@gitlab/ui'; import $ from 'jquery'; import { keysFor, BOLD_TEXT, ITALIC_TEXT, LINK_TEXT } from '~/behaviors/shortcuts/keybindings'; import { getSelectedFragment } from '~/lib/utils/common_utils'; @@ -10,7 +10,6 @@ import ToolbarButton from './toolbar_button.vue'; export default { components: { ToolbarButton, - GlIcon, GlPopover, GlButton, }, @@ -46,6 +45,7 @@ export default { data() { return { tag: '> ', + suggestPopoverVisible: false, }; }, computed: { @@ -76,15 +76,27 @@ export default { return this.isMac ? '⌘' : s__('KeyboardKey|Ctrl+'); }, }, + watch: { + showSuggestPopover() { + this.updateSuggestPopoverVisibility(); + }, + }, mounted() { $(document).on('markdown-preview:show.vue', this.previewMarkdownTab); $(document).on('markdown-preview:hide.vue', this.writeMarkdownTab); + + this.updateSuggestPopoverVisibility(); }, beforeDestroy() { $(document).off('markdown-preview:show.vue', this.previewMarkdownTab); $(document).off('markdown-preview:hide.vue', this.writeMarkdownTab); }, methods: { + async updateSuggestPopoverVisibility() { + await this.$nextTick(); + + this.suggestPopoverVisible = this.showSuggestPopover && this.canSuggest; + }, isValid(form) { return ( !form || @@ -153,127 +165,114 @@ export default { </button> </li> <li :class="{ active: !previewMarkdown }" class="md-header-toolbar"> - <div class="d-inline-block"> - <toolbar-button - tag="**" - :button-title=" - sprintf(s__('MarkdownEditor|Add bold text (%{modifierKey}B)'), { modifierKey }) - " - :shortcuts="$options.shortcuts.bold" - icon="bold" - /> - <toolbar-button - tag="_" - :button-title=" - sprintf(s__('MarkdownEditor|Add italic text (%{modifierKey}I)'), { modifierKey }) - " - :shortcuts="$options.shortcuts.italic" - icon="italic" - /> + <toolbar-button + tag="**" + :button-title=" + sprintf(s__('MarkdownEditor|Add bold text (%{modifierKey}B)'), { modifierKey }) + " + :shortcuts="$options.shortcuts.bold" + icon="bold" + /> + <toolbar-button + tag="_" + :button-title=" + sprintf(s__('MarkdownEditor|Add italic text (%{modifierKey}I)'), { modifierKey }) + " + :shortcuts="$options.shortcuts.italic" + icon="italic" + /> + <toolbar-button + :prepend="true" + :tag="tag" + :button-title="__('Insert a quote')" + icon="quote" + @click="handleQuote" + /> + <template v-if="canSuggest"> <toolbar-button + ref="suggestButton" + :tag="mdSuggestion" :prepend="true" - :tag="tag" - :button-title="__('Insert a quote')" - icon="quote" - @click="handleQuote" + :button-title="__('Insert suggestion')" + :cursor-offset="4" + :tag-content="lineContent" + icon="doc-code" + data-qa-selector="suggestion_button" + class="js-suggestion-btn" + @click="handleSuggestDismissed" /> - </div> - <div class="d-inline-block ml-md-2 ml-0"> - <template v-if="canSuggest"> - <toolbar-button - ref="suggestButton" - :tag="mdSuggestion" - :prepend="true" - :button-title="__('Insert suggestion')" - :cursor-offset="4" - :tag-content="lineContent" - icon="doc-code" - data-qa-selector="suggestion_button" - class="js-suggestion-btn" + <gl-popover + v-if="suggestPopoverVisible" + :target="$refs.suggestButton.$el" + :css-classes="['diff-suggest-popover']" + placement="bottom" + :show="suggestPopoverVisible" + > + <strong>{{ __('New! Suggest changes directly') }}</strong> + <p class="mb-2"> + {{ + __( + 'Suggest code changes which can be immediately applied in one click. Try it out!', + ) + }} + </p> + <gl-button + variant="info" + category="primary" + size="small" @click="handleSuggestDismissed" - /> - <gl-popover - v-if="showSuggestPopover && $refs.suggestButton" - :target="$refs.suggestButton" - :css-classes="['diff-suggest-popover']" - placement="bottom" - :show="showSuggestPopover" > - <strong>{{ __('New! Suggest changes directly') }}</strong> - <p class="mb-2"> - {{ - __( - 'Suggest code changes which can be immediately applied in one click. Try it out!', - ) - }} - </p> - <gl-button - variant="info" - category="primary" - size="sm" - @click="handleSuggestDismissed" - > - {{ __('Got it') }} - </gl-button> - </gl-popover> - </template> - <toolbar-button tag="`" tag-block="```" :button-title="__('Insert code')" icon="code" /> - <toolbar-button - tag="[{text}](url)" - tag-select="url" - :button-title=" - sprintf(s__('MarkdownEditor|Add a link (%{modifierKey}K)'), { modifierKey }) - " - :shortcuts="$options.shortcuts.link" - icon="link" - /> - </div> - <div class="d-inline-block ml-md-2 ml-0"> - <toolbar-button - :prepend="true" - tag="- " - :button-title="__('Add a bullet list')" - icon="list-bulleted" - /> - <toolbar-button - :prepend="true" - tag="1. " - :button-title="__('Add a numbered list')" - icon="list-numbered" - /> - <toolbar-button - :prepend="true" - tag="- [ ] " - :button-title="__('Add a task list')" - icon="list-task" - /> - <toolbar-button - :tag="mdCollapsibleSection" - :prepend="true" - tag-select="Click to expand" - :button-title="__('Add a collapsible section')" - icon="details-block" - /> - <toolbar-button - :tag="mdTable" - :prepend="true" - :button-title="__('Add a table')" - icon="table" - /> - </div> - <div class="d-inline-block ml-md-2 ml-0"> - <button - v-gl-tooltip - :aria-label="__('Go full screen')" - class="toolbar-btn toolbar-fullscreen-btn js-zen-enter" - data-container="body" - tabindex="-1" - :title="__('Go full screen')" - type="button" - > - <gl-icon name="maximize" /> - </button> - </div> + {{ __('Got it') }} + </gl-button> + </gl-popover> + </template> + <toolbar-button tag="`" tag-block="```" :button-title="__('Insert code')" icon="code" /> + <toolbar-button + tag="[{text}](url)" + tag-select="url" + :button-title=" + sprintf(s__('MarkdownEditor|Add a link (%{modifierKey}K)'), { modifierKey }) + " + :shortcuts="$options.shortcuts.link" + icon="link" + /> + <toolbar-button + :prepend="true" + tag="- " + :button-title="__('Add a bullet list')" + icon="list-bulleted" + /> + <toolbar-button + :prepend="true" + tag="1. " + :button-title="__('Add a numbered list')" + icon="list-numbered" + /> + <toolbar-button + :prepend="true" + tag="- [ ] " + :button-title="__('Add a task list')" + icon="list-task" + /> + <toolbar-button + :tag="mdCollapsibleSection" + :prepend="true" + tag-select="Click to expand" + :button-title="__('Add a collapsible section')" + icon="details-block" + /> + <toolbar-button + :tag="mdTable" + :prepend="true" + :button-title="__('Add a table')" + icon="table" + /> + <toolbar-button + class="js-zen-enter" + :prepend="true" + :button-title="__('Go full screen')" + icon="maximize" + /> </li> </ul> </div> diff --git a/app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue b/app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue index 6c35741e7e5..2f8481cd064 100644 --- a/app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue +++ b/app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue @@ -1,9 +1,9 @@ <script> -import { GlTooltipDirective, GlIcon } from '@gitlab/ui'; +import { GlTooltipDirective, GlButton } from '@gitlab/ui'; export default { components: { - GlIcon, + GlButton, }, directives: { GlTooltip: GlTooltipDirective, @@ -19,7 +19,8 @@ export default { }, tag: { type: String, - required: true, + required: false, + default: '', }, tagBlock: { type: String, @@ -71,7 +72,7 @@ export default { </script> <template> - <button + <gl-button v-gl-tooltip :data-md-tag="tag" :data-md-cursor-offset="cursorOffset" @@ -82,11 +83,11 @@ export default { :data-md-shortcuts="shortcutsString" :title="buttonTitle" :aria-label="buttonTitle" + :icon="icon" type="button" + category="tertiary" class="toolbar-btn js-md" data-container="body" @click="() => $emit('click')" - > - <gl-icon :name="icon" /> - </button> + /> </template> diff --git a/app/assets/stylesheets/framework/markdown_area.scss b/app/assets/stylesheets/framework/markdown_area.scss index 2a97009e605..506c1b91417 100644 --- a/app/assets/stylesheets/framework/markdown_area.scss +++ b/app/assets/stylesheets/framework/markdown_area.scss @@ -83,6 +83,7 @@ li.md-header-toolbar { margin-left: auto; display: none; + padding-bottom: $gl-padding-8; &.active { display: block; @@ -91,9 +92,9 @@ flex: none; display: flex; justify-content: center; + flex-wrap: wrap; + margin-top: $gl-padding-8; width: 100%; - padding-top: $gl-padding-top; - padding-bottom: $gl-padding-top; } } } @@ -131,36 +132,6 @@ width: 100%; } -.toolbar-btn { - float: left; - padding: 0 7px; - background: transparent; - border: 0; - outline: 0; - - svg { - width: 14px; - height: 14px; - vertical-align: middle; - fill: $gl-text-color-secondary; - } - - &:hover, - &:focus { - svg { - fill: $blue-600; - } - } -} - -.toolbar-fullscreen-btn { - margin-right: -5px; - - @include media-breakpoint-down(xs) { - margin-right: 0; - } -} - .md-suggestion-diff { display: table !important; border: 1px solid $border-color !important; diff --git a/app/assets/stylesheets/framework/secondary_navigation_elements.scss b/app/assets/stylesheets/framework/secondary_navigation_elements.scss index f904ef11f5b..06eebb95438 100644 --- a/app/assets/stylesheets/framework/secondary_navigation_elements.scss +++ b/app/assets/stylesheets/framework/secondary_navigation_elements.scss @@ -14,7 +14,6 @@ a, button { padding: $gl-padding-8; - padding-bottom: $gl-padding-8 + 1; font-size: 14px; line-height: 28px; color: $gl-text-color-secondary; diff --git a/app/assets/stylesheets/pages/note_form.scss b/app/assets/stylesheets/pages/note_form.scss index c025d8569a7..dbbbaac9e5a 100644 --- a/app/assets/stylesheets/pages/note_form.scss +++ b/app/assets/stylesheets/pages/note_form.scss @@ -54,7 +54,7 @@ .common-note-form { .md-area { - padding: $gl-padding-top $gl-padding; + padding: $gl-padding-8 $gl-padding; border: 1px solid $border-color; border-radius: $border-radius-base; transition: border-color ease-in-out 0.15s, @@ -323,7 +323,7 @@ table { } .comment-toolbar { - padding-top: $gl-padding-top; + padding-top: $gl-padding-8; color: $gl-text-color-secondary; border-top: 1px solid $border-color; } diff --git a/app/controllers/admin/clusters/applications_controller.rb b/app/controllers/admin/clusters/applications_controller.rb deleted file mode 100644 index 7400cc16175..00000000000 --- a/app/controllers/admin/clusters/applications_controller.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -class Admin::Clusters::ApplicationsController < Clusters::ApplicationsController - include EnforcesAdminAuthentication - - private - - def clusterable - @clusterable ||= InstanceClusterablePresenter.fabricate(Clusters::Instance.new, current_user: current_user) - end -end diff --git a/app/controllers/clusters/applications_controller.rb b/app/controllers/clusters/applications_controller.rb deleted file mode 100644 index 91003e9580d..00000000000 --- a/app/controllers/clusters/applications_controller.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -class Clusters::ApplicationsController < Clusters::BaseController - before_action :cluster - before_action :authorize_create_cluster!, only: [:create] - before_action :authorize_update_cluster!, only: [:update] - before_action :authorize_admin_cluster!, only: [:destroy] - - def create - request_handler do - Clusters::Applications::CreateService - .new(@cluster, current_user, cluster_application_params) - .execute(request) - end - end - - def update - request_handler do - Clusters::Applications::UpdateService - .new(@cluster, current_user, cluster_application_params) - .execute(request) - end - end - - def destroy - request_handler do - Clusters::Applications::DestroyService - .new(@cluster, current_user, cluster_application_destroy_params) - .execute(request) - end - end - - private - - def request_handler - yield - - head :no_content - rescue Clusters::Applications::BaseService::InvalidApplicationError - render_404 - rescue StandardError - head :bad_request - end - - def cluster - @cluster ||= clusterable.clusters.find(params[:id]) || render_404 - end - - def cluster_application_params - params.permit(:application, :hostname, :pages_domain_id, :email, :stack, :host, :port, :protocol) - end - - def cluster_application_destroy_params - params.permit(:application) - end -end diff --git a/app/controllers/groups/clusters/applications_controller.rb b/app/controllers/groups/clusters/applications_controller.rb deleted file mode 100644 index ce6fda4143c..00000000000 --- a/app/controllers/groups/clusters/applications_controller.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -class Groups::Clusters::ApplicationsController < Clusters::ApplicationsController - include ControllerWithCrossProjectAccessCheck - - prepend_before_action :group - requires_cross_project_access - - private - - def clusterable - @clusterable ||= ClusterablePresenter.fabricate(group, current_user: current_user) - end - - def group - @group ||= find_routable!(Group, params[:group_id] || params[:id], request.path_info) - end -end diff --git a/app/controllers/projects/clusters/applications_controller.rb b/app/controllers/projects/clusters/applications_controller.rb deleted file mode 100644 index 6c5778124e8..00000000000 --- a/app/controllers/projects/clusters/applications_controller.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -class Projects::Clusters::ApplicationsController < Clusters::ApplicationsController - prepend_before_action :project - - private - - def clusterable - @clusterable ||= ClusterablePresenter.fabricate(project, current_user: current_user) - end - - def project - @project ||= find_routable!(Project, File.join(params[:namespace_id], params[:project_id]), request.path_info) - end -end diff --git a/app/presenters/clusterable_presenter.rb b/app/presenters/clusterable_presenter.rb index a316793dae9..03e26b92922 100644 --- a/app/presenters/clusterable_presenter.rb +++ b/app/presenters/clusterable_presenter.rb @@ -48,14 +48,6 @@ class ClusterablePresenter < Gitlab::View::Presenter::Delegated raise NotImplementedError end - def install_applications_cluster_path(cluster, application) - raise NotImplementedError - end - - def update_applications_cluster_path(cluster, application) - raise NotImplementedError - end - def clear_cluster_cache_path(cluster) raise NotImplementedError end diff --git a/app/presenters/group_clusterable_presenter.rb b/app/presenters/group_clusterable_presenter.rb index adbe20517be..34e7084ab02 100644 --- a/app/presenters/group_clusterable_presenter.rb +++ b/app/presenters/group_clusterable_presenter.rb @@ -9,16 +9,6 @@ class GroupClusterablePresenter < ClusterablePresenter cluster_status_group_cluster_path(clusterable, cluster, params) end - override :install_applications_cluster_path - def install_applications_cluster_path(cluster, application) - install_applications_group_cluster_path(clusterable, cluster, application) - end - - override :update_applications_cluster_path - def update_applications_cluster_path(cluster, application) - update_applications_group_cluster_path(clusterable, cluster, application) - end - override :clear_cluster_cache_path def clear_cluster_cache_path(cluster) clear_cache_group_cluster_path(clusterable, cluster) diff --git a/app/presenters/instance_clusterable_presenter.rb b/app/presenters/instance_clusterable_presenter.rb index 84b3328b37f..56d91f90b2e 100644 --- a/app/presenters/instance_clusterable_presenter.rb +++ b/app/presenters/instance_clusterable_presenter.rb @@ -27,16 +27,6 @@ class InstanceClusterablePresenter < ClusterablePresenter cluster_status_admin_cluster_path(cluster, params) end - override :install_applications_cluster_path - def install_applications_cluster_path(cluster, application) - install_applications_admin_cluster_path(cluster, application) - end - - override :update_applications_cluster_path - def update_applications_cluster_path(cluster, application) - update_applications_admin_cluster_path(cluster, application) - end - override :clear_cluster_cache_path def clear_cluster_cache_path(cluster) clear_cache_admin_cluster_path(cluster) diff --git a/app/presenters/project_clusterable_presenter.rb b/app/presenters/project_clusterable_presenter.rb index 1c5f11ffe59..920304e743e 100644 --- a/app/presenters/project_clusterable_presenter.rb +++ b/app/presenters/project_clusterable_presenter.rb @@ -9,16 +9,6 @@ class ProjectClusterablePresenter < ClusterablePresenter cluster_status_project_cluster_path(clusterable, cluster, params) end - override :install_applications_cluster_path - def install_applications_cluster_path(cluster, application) - install_applications_project_cluster_path(clusterable, cluster, application) - end - - override :update_applications_cluster_path - def update_applications_cluster_path(cluster, application) - update_applications_project_cluster_path(clusterable, cluster, application) - end - override :clear_cluster_cache_path def clear_cluster_cache_path(cluster) clear_cache_project_cluster_path(clusterable, cluster) diff --git a/config/feature_flags/development/dast_profile_disable_joins.yml b/config/feature_flags/development/dast_profile_disable_joins.yml new file mode 100644 index 00000000000..469e930dd7c --- /dev/null +++ b/config/feature_flags/development/dast_profile_disable_joins.yml @@ -0,0 +1,8 @@ +--- +name: dast_profile_disable_joins +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66709 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/336944 +milestone: '14.2' +type: development +group: group::dynamic analysis +default_enabled: true diff --git a/config/feature_flags/development/dast_scanner_profile_disable_joins.yml b/config/feature_flags/development/dast_scanner_profile_disable_joins.yml new file mode 100644 index 00000000000..8c27633b785 --- /dev/null +++ b/config/feature_flags/development/dast_scanner_profile_disable_joins.yml @@ -0,0 +1,8 @@ +--- +name: dast_scanner_profile_disable_joins +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66709 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/336946 +milestone: '14.2' +type: development +group: group::dynamic analysis +default_enabled: true diff --git a/config/feature_flags/development/dast_site_profile_disable_joins.yml b/config/feature_flags/development/dast_site_profile_disable_joins.yml new file mode 100644 index 00000000000..08327a4abf1 --- /dev/null +++ b/config/feature_flags/development/dast_site_profile_disable_joins.yml @@ -0,0 +1,8 @@ +--- +name: dast_site_profile_disable_joins +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66709 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/336945 +milestone: '14.2' +type: development +group: group::dynamic analysis +default_enabled: true diff --git a/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml b/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml index c00f26994d8..2f665b70b97 100644 --- a/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml +++ b/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_title_changed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml b/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml index 6610a4df2d3..e41e729a5fd 100644 --- a/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml +++ b/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_description_changed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml b/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml index cd400db57ea..6c69ce110ac 100644 --- a/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml +++ b/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_assignee_changed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml b/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml index afc08c91ed1..344713942fc 100644 --- a/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml +++ b/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_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: + - g_project_management_issue_made_confidential distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml b/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml index 871583812ea..3127f67dc01 100644 --- a/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml +++ b/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_made_visible distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181323_g_project_management_issue_created_monthly.yml b/config/metrics/counts_28d/20210216181323_g_project_management_issue_created_monthly.yml index d330defab80..126264279fd 100644 --- a/config/metrics/counts_28d/20210216181323_g_project_management_issue_created_monthly.yml +++ b/config/metrics/counts_28d/20210216181323_g_project_management_issue_created_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_created distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml b/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml index abfd7c56e5e..f8f2b018f70 100644 --- a/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml +++ b/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_closed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml b/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml index c70ad295be9..3137d120236 100644 --- a/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml +++ b/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_reopened distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml b/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml index e17f4f25823..f3106e74896 100644 --- a/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml +++ b/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_label_changed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml b/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml index bb1219ce38b..89cabf2b80b 100644 --- a/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml +++ b/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_milestone_changed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml b/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml index c34403dbee9..f29cc4ff2ec 100644 --- a/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml +++ b/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_cross_referenced distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml b/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml index 53a4ddd973f..3fef89a23b1 100644 --- a/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml +++ b/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_moved distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml b/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml index 24f380bdefc..7c21c40a425 100644 --- a/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml +++ b/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_related distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml b/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml index e80b69a6eab..25666725e9c 100644 --- a/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml +++ b/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_unrelated distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml b/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml index 4aba7913e10..e4824c5531e 100644 --- a/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml +++ b/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_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: + - g_project_management_issue_marked_as_duplicate distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml b/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml index bcf6139f9f0..4f5f6eaed79 100644 --- a/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml +++ b/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_locked distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml b/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml index c6c415c7a06..bce5bce76c2 100644 --- a/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml +++ b/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_unlocked distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml b/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml index a2f5aba207c..04c1e19947a 100644 --- a/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml +++ b/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_designs_added distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml b/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml index 68fd822154d..dbf9c5f378a 100644 --- a/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml +++ b/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_designs_modified distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml b/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml index c33d75e7cea..dfb14377c91 100644 --- a/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml +++ b/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_designs_removed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml b/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml index 3f817290468..b77b891429f 100644 --- a/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml +++ b/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_due_date_changed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml b/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml index 5f84f8b925a..8b24e5eaf03 100644 --- a/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml +++ b/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_time_estimate_changed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml b/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml index 3933f65c1e6..3e7568c9e00 100644 --- a/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml +++ b/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_time_spent_changed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml b/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml index 3bea2ecf08e..6382fd73edd 100644 --- a/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml +++ b/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_comment_added distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml b/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml index 38f0f295dcc..d038ef21b7c 100644 --- a/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml +++ b/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_comment_edited distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml b/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml index bc10624fd20..7d6e327a18d 100644 --- a/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml +++ b/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_comment_removed distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml b/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml index 5c94aafe2b5..fd40cb87181 100644 --- a/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml +++ b/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_cloned distribution: - ce - ee diff --git a/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml b/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml index 6ac1d0acb72..213d742bbf2 100644 --- a/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml +++ b/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml @@ -10,6 +10,42 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_title_changed + - g_project_management_issue_description_changed + - g_project_management_issue_assignee_changed + - g_project_management_issue_made_confidential + - g_project_management_issue_made_visible + - g_project_management_issue_created + - g_project_management_issue_closed + - g_project_management_issue_reopened + - g_project_management_issue_label_changed + - g_project_management_issue_milestone_changed + - g_project_management_issue_iteration_changed + - g_project_management_issue_weight_changed + - g_project_management_issue_cross_referenced + - g_project_management_issue_moved + - g_project_management_issue_related + - g_project_management_issue_unrelated + - g_project_management_issue_marked_as_duplicate + - g_project_management_issue_locked + - g_project_management_issue_unlocked + - g_project_management_issue_added_to_epic + - g_project_management_issue_removed_from_epic + - g_project_management_issue_changed_epic + - g_project_management_issue_designs_added + - g_project_management_issue_designs_modified + - g_project_management_issue_designs_removed + - g_project_management_issue_due_date_changed + - g_project_management_issue_time_estimate_changed + - g_project_management_issue_time_spent_changed + - g_project_management_issue_comment_added + - g_project_management_issue_comment_edited + - g_project_management_issue_comment_removed + - g_project_management_issue_health_status_changed + - g_project_management_issue_cloned distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml b/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml index f671827b165..2f53170bd15 100644 --- a/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml +++ b/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml @@ -11,6 +11,10 @@ milestone: "13.6" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/issues/229918 time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_title_changed distribution: - ee - ce diff --git a/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml b/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml index 79407c70dd5..235410930cd 100644 --- a/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml +++ b/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_description_changed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml b/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml index 4281d78ae7d..1d9c7ba07c1 100644 --- a/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml +++ b/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_assignee_changed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml b/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml index f3a6812cf6d..4ff7397f5e6 100644 --- a/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml +++ b/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_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: + - g_project_management_issue_made_confidential distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml b/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml index ad7fdda5984..d3f31f1f493 100644 --- a/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml +++ b/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_made_visible distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181321_g_project_management_issue_created_weekly.yml b/config/metrics/counts_7d/20210216181321_g_project_management_issue_created_weekly.yml index 8d1bed247b9..0cebbe8bd7d 100644 --- a/config/metrics/counts_7d/20210216181321_g_project_management_issue_created_weekly.yml +++ b/config/metrics/counts_7d/20210216181321_g_project_management_issue_created_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_created distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml b/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml index 34a0e306822..525e80c6d43 100644 --- a/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml +++ b/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_closed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml b/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml index 37df169972c..28ed3b7ecbb 100644 --- a/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml +++ b/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_reopened distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml b/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml index 437d115fadd..45975bdd24c 100644 --- a/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml +++ b/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_label_changed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml b/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml index b51f8afc673..7a36d179dd2 100644 --- a/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml +++ b/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_milestone_changed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml b/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml index 3bfb7aae868..56d7a62b08d 100644 --- a/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml +++ b/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 28d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_cross_referenced distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml b/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml index e42797908c4..7496c57b838 100644 --- a/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml +++ b/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_moved distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml b/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml index d98f25c1b20..5c9279469e3 100644 --- a/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml +++ b/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_related distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml b/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml index c88a0eabefa..16ab218e5f5 100644 --- a/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml +++ b/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_unrelated distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml b/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml index a633eadcea2..32133c3a4b3 100644 --- a/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml +++ b/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_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: + - g_project_management_issue_marked_as_duplicate distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml b/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml index a1423d961c8..9556cc2f2db 100644 --- a/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml +++ b/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_locked distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml b/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml index cdc010c89d3..5397b1c1e83 100644 --- a/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml +++ b/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_unlocked distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml b/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml index 6128830827f..cd53d00cdf0 100644 --- a/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml +++ b/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_designs_added distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml b/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml index 06a0481802c..afae03b98ab 100644 --- a/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml +++ b/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_designs_modified distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml b/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml index f6c0e1fac84..c70f7419852 100644 --- a/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml +++ b/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_designs_removed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml b/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml index 1405f7966cc..972840daecd 100644 --- a/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml +++ b/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_due_date_changed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml b/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml index 88617905463..94a3c6d7000 100644 --- a/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml +++ b/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_time_estimate_changed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml b/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml index ef16ec406d9..693d5f243fb 100644 --- a/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml +++ b/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_time_spent_changed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml b/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml index 3c89bb79fdf..fca44db1d25 100644 --- a/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml +++ b/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_comment_added distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml b/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml index ad7f4adb5ea..7168f88c08b 100644 --- a/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml +++ b/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_comment_edited distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml b/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml index edc1b2efc59..8a0f9e65833 100644 --- a/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml +++ b/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_comment_removed distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml b/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml index 85b12d6af6b..f6f7b4277a5 100644 --- a/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml +++ b/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml @@ -10,6 +10,10 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_cloned distribution: - ce - ee diff --git a/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml b/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml index 2dcb9cb42c8..53923a6147c 100644 --- a/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml +++ b/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml @@ -10,6 +10,42 @@ value_type: number status: data_available time_frame: 7d data_source: redis_hll +instrumentation_class: RedisHLLMetric +options: + events: + - g_project_management_issue_title_changed + - g_project_management_issue_description_changed + - g_project_management_issue_assignee_changed + - g_project_management_issue_made_confidential + - g_project_management_issue_made_visible + - g_project_management_issue_created + - g_project_management_issue_closed + - g_project_management_issue_reopened + - g_project_management_issue_label_changed + - g_project_management_issue_milestone_changed + - g_project_management_issue_iteration_changed + - g_project_management_issue_weight_changed + - g_project_management_issue_cross_referenced + - g_project_management_issue_moved + - g_project_management_issue_related + - g_project_management_issue_unrelated + - g_project_management_issue_marked_as_duplicate + - g_project_management_issue_locked + - g_project_management_issue_unlocked + - g_project_management_issue_added_to_epic + - g_project_management_issue_removed_from_epic + - g_project_management_issue_changed_epic + - g_project_management_issue_designs_added + - g_project_management_issue_designs_modified + - g_project_management_issue_designs_removed + - g_project_management_issue_due_date_changed + - g_project_management_issue_time_estimate_changed + - g_project_management_issue_time_spent_changed + - g_project_management_issue_comment_added + - g_project_management_issue_comment_edited + - g_project_management_issue_comment_removed + - g_project_management_issue_health_status_changed + - g_project_management_issue_cloned distribution: - ce - ee diff --git a/config/routes.rb b/config/routes.rb index a4404f9d3a8..9fdd2a70417 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -248,12 +248,6 @@ Rails.application.routes.draw do get :environments, format: :json end - scope :applications do - post '/:application', to: 'clusters/applications#create', as: :install_applications - patch '/:application', to: 'clusters/applications#update', as: :update_applications - delete '/:application', to: 'clusters/applications#destroy', as: :uninstall_applications - end - get :metrics_dashboard get :'/prometheus/api/v1/*proxy_path', to: 'clusters#prometheus_proxy', as: :prometheus_api get :cluster_status, format: :json diff --git a/db/post_migrate/20210701033622_finalize_ci_builds_needs_bigint_conversion.rb b/db/post_migrate/20210701033622_finalize_ci_builds_needs_bigint_conversion.rb new file mode 100644 index 00000000000..baee9fb3848 --- /dev/null +++ b/db/post_migrate/20210701033622_finalize_ci_builds_needs_bigint_conversion.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +class FinalizeCiBuildsNeedsBigintConversion < ActiveRecord::Migration[6.1] + include Gitlab::Database::MigrationHelpers + + disable_ddl_transaction! + + TABLE_NAME = 'ci_build_needs' + + def up + ensure_batched_background_migration_is_finished( + job_class_name: 'CopyColumnUsingBackgroundMigrationJob', + table_name: TABLE_NAME, + column_name: 'id', + job_arguments: [['build_id'], ['build_id_convert_to_bigint']] + ) + + swap + end + + def down + swap + end + + private + + def swap + # This is to replace the existing "index_ci_build_needs_on_build_id_and_name" UNIQUE, btree (build_id, name) + add_concurrent_index TABLE_NAME, [:build_id_convert_to_bigint, :name], unique: true, name: 'index_ci_build_needs_on_build_id_convert_to_bigint_and_name' + + # Add a foreign key on `build_id_convert_to_bigint` before we swap the columns and drop the old FK (fk_rails_3cf221d4ed) + add_concurrent_foreign_key TABLE_NAME, :ci_builds, + column: :build_id_convert_to_bigint, on_delete: :cascade, + name: 'fk_rails_3cf221d4ed_tmp', reverse_lock_order: true + + with_lock_retries(raise_on_exhaustion: true) do + # We'll need ACCESS EXCLUSIVE lock on the related tables, + # lets make sure it can be acquired from the start + execute "LOCK TABLE ci_builds, #{TABLE_NAME} IN ACCESS EXCLUSIVE MODE" + + # Swap column names + temp_name = 'build_id_tmp' + execute "ALTER TABLE #{quote_table_name(TABLE_NAME)} RENAME COLUMN #{quote_column_name(:build_id)} TO #{quote_column_name(temp_name)}" + execute "ALTER TABLE #{quote_table_name(TABLE_NAME)} RENAME COLUMN #{quote_column_name(:build_id_convert_to_bigint)} TO #{quote_column_name(:build_id)}" + execute "ALTER TABLE #{quote_table_name(TABLE_NAME)} RENAME COLUMN #{quote_column_name(temp_name)} TO #{quote_column_name(:build_id_convert_to_bigint)}" + + # We need to update the trigger function in order to make PostgreSQL to + # regenerate the execution plan for it. This is to avoid type mismatch errors like + # "type of parameter 15 (bigint) does not match that when preparing the plan (integer)" + function_name = Gitlab::Database::UnidirectionalCopyTrigger.on_table(TABLE_NAME).name(:build_id, :build_id_convert_to_bigint) + execute "ALTER FUNCTION #{quote_table_name(function_name)} RESET ALL" + + # Swap defaults + change_column_default TABLE_NAME, :build_id, nil + change_column_default TABLE_NAME, :build_id_convert_to_bigint, 0 + + # Rename the index on the `bigint` column to match the new column name + # (we already hold an exclusive lock, so no need to use DROP INDEX CONCURRENTLY here) + execute 'DROP INDEX index_ci_build_needs_on_build_id_and_name' + rename_index TABLE_NAME, 'index_ci_build_needs_on_build_id_convert_to_bigint_and_name', 'index_ci_build_needs_on_build_id_and_name' + + # Drop original FK on the old int4 `build_id` (fk_rails_3cf221d4ed) + remove_foreign_key TABLE_NAME, name: 'fk_rails_3cf221d4ed' + # We swapped the columns but the FK for buil_id is still using the temporary name for the buil_id_convert_to_bigint column + # So we have to also swap the FK name now that we dropped the other one with the same + rename_constraint(TABLE_NAME, 'fk_rails_3cf221d4ed_tmp', 'fk_rails_3cf221d4ed') + end + end +end diff --git a/db/schema_migrations/20210701033622 b/db/schema_migrations/20210701033622 new file mode 100644 index 00000000000..40dcc68d424 --- /dev/null +++ b/db/schema_migrations/20210701033622 @@ -0,0 +1 @@ +e38d73441ddd7f6238a66ee86009c445ad6056f3e6872e7a6c72abe051294d7e
\ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 373fc573419..ad92c14adec 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -10487,11 +10487,11 @@ ALTER SEQUENCE chat_teams_id_seq OWNED BY chat_teams.id; CREATE TABLE ci_build_needs ( id integer NOT NULL, - build_id integer NOT NULL, + build_id_convert_to_bigint integer DEFAULT 0 NOT NULL, name text NOT NULL, artifacts boolean DEFAULT true NOT NULL, optional boolean DEFAULT false NOT NULL, - build_id_convert_to_bigint bigint DEFAULT 0 NOT NULL + build_id bigint NOT NULL ); CREATE SEQUENCE ci_build_needs_id_seq diff --git a/lib/gitlab/i18n.rb b/lib/gitlab/i18n.rb index 7ebbe9f1c14..07cf0442a7b 100644 --- a/lib/gitlab/i18n.rb +++ b/lib/gitlab/i18n.rb @@ -38,26 +38,26 @@ module Gitlab # Currently monthly updated manually by ~group::import PM. # https://gitlab.com/gitlab-org/gitlab/-/issues/18923 TRANSLATION_LEVELS = { - 'bg' => 1, - 'cs_CZ' => 1, - 'de' => 17, + 'bg' => 0, + 'cs_CZ' => 0, + 'de' => 16, 'en' => 100, - 'eo' => 1, - 'es' => 38, - 'fil_PH' => 1, + 'eo' => 0, + 'es' => 36, + 'fil_PH' => 0, 'fr' => 12, - 'gl_ES' => 1, + 'gl_ES' => 0, 'id_ID' => 0, 'it' => 2, - 'ja' => 42, - 'ko' => 13, - 'nl_NL' => 1, + 'ja' => 40, + 'ko' => 12, + 'nl_NL' => 0, 'pl_PL' => 5, - 'pt_BR' => 21, - 'ru' => 29, + 'pt_BR' => 30, + 'ru' => 28, 'tr_TR' => 16, 'uk' => 41, - 'zh_CN' => 67, + 'zh_CN' => 68, 'zh_HK' => 2, 'zh_TW' => 3 }.freeze diff --git a/spec/controllers/admin/clusters/applications_controller_spec.rb b/spec/controllers/admin/clusters/applications_controller_spec.rb deleted file mode 100644 index d1ca64d6bd2..00000000000 --- a/spec/controllers/admin/clusters/applications_controller_spec.rb +++ /dev/null @@ -1,139 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Admin::Clusters::ApplicationsController do - include AccessMatchersForController - - def current_application - Clusters::Cluster::APPLICATIONS[application] - end - - shared_examples 'a secure endpoint' do - it { expect { subject }.to be_allowed_for(:admin) } - it { expect { subject }.to be_denied_for(:user) } - it { expect { subject }.to be_denied_for(:external) } - end - - let(:cluster) { create(:cluster, :instance, :provided_by_gcp) } - - describe 'POST create' do - subject do - post :create, params: params - end - - let(:application) { 'ingress' } - let(:params) { { application: application, id: cluster.id } } - - describe 'functionality' do - let(:admin) { create(:admin) } - - before do - sign_in(admin) - end - - it 'schedule an application installation' do - expect(ClusterInstallAppWorker).to receive(:perform_async).with(application, anything).once - - expect { subject }.to change { current_application.count } - expect(response).to have_gitlab_http_status(:no_content) - expect(cluster.application_ingress).to be_scheduled - end - - context 'when cluster do not exists' do - before do - cluster.destroy! - end - - it 'return 404' do - expect { subject }.not_to change { current_application.count } - expect(response).to have_gitlab_http_status(:not_found) - end - end - - context 'when application is unknown' do - let(:application) { 'unkwnown-app' } - - it 'return 404' do - is_expected.to have_gitlab_http_status(:not_found) - end - end - - context 'when application is already installing' do - before do - create(:clusters_applications_ingress, :installing, cluster: cluster) - end - - it 'returns 400' do - is_expected.to have_gitlab_http_status(:bad_request) - end - end - end - - describe 'security' do - before do - allow(ClusterInstallAppWorker).to receive(:perform_async) - end - - it_behaves_like 'a secure endpoint' - end - end - - describe 'PATCH update' do - subject do - patch :update, params: params - end - - let!(:application) { create(:clusters_applications_cert_manager, :installed, cluster: cluster) } - let(:application_name) { application.name } - let(:params) { { application: application_name, id: cluster.id, email: "new-email@example.com" } } - - describe 'functionality' do - let(:admin) { create(:admin) } - - before do - sign_in(admin) - end - - context "when cluster and app exists" do - it "schedules an application update" do - expect(ClusterPatchAppWorker).to receive(:perform_async).with(application.name, anything).once - - is_expected.to have_gitlab_http_status(:no_content) - - expect(cluster.application_cert_manager).to be_scheduled - end - end - - context 'when cluster do not exists' do - before do - cluster.destroy! - end - - it { is_expected.to have_gitlab_http_status(:not_found) } - end - - context 'when application is unknown' do - let(:application_name) { 'unkwnown-app' } - - it { is_expected.to have_gitlab_http_status(:not_found) } - end - - context 'when application is already scheduled' do - before do - application.make_scheduled! - end - - it { is_expected.to have_gitlab_http_status(:bad_request) } - end - end - - describe 'security' do - before do - allow(ClusterPatchAppWorker).to receive(:perform_async) - end - - it_behaves_like 'a secure endpoint' - end - end -end diff --git a/spec/controllers/groups/clusters/applications_controller_spec.rb b/spec/controllers/groups/clusters/applications_controller_spec.rb deleted file mode 100644 index 5629e86c928..00000000000 --- a/spec/controllers/groups/clusters/applications_controller_spec.rb +++ /dev/null @@ -1,148 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Groups::Clusters::ApplicationsController do - include AccessMatchersForController - - def current_application - Clusters::Cluster::APPLICATIONS[application] - end - - shared_examples 'a secure endpoint' do - it('is allowed for admin when admin mode is enabled', :enable_admin_mode) { expect { subject }.to be_allowed_for(:admin) } - it('is denied for admin when admin mode is disabled') { expect { subject }.to be_denied_for(:admin) } - it { expect { subject }.to be_allowed_for(:owner).of(group) } - it { expect { subject }.to be_allowed_for(:maintainer).of(group) } - it { expect { subject }.to be_denied_for(:developer).of(group) } - it { expect { subject }.to be_denied_for(:reporter).of(group) } - it { expect { subject }.to be_denied_for(:guest).of(group) } - it { expect { subject }.to be_denied_for(:user) } - it { expect { subject }.to be_denied_for(:external) } - end - - let(:cluster) { create(:cluster, :group, :provided_by_gcp) } - let(:group) { cluster.group } - - describe 'POST create' do - subject do - post :create, params: params.merge(group_id: group) - end - - let(:application) { 'ingress' } - let(:params) { { application: application, id: cluster.id } } - - describe 'functionality' do - let(:user) { create(:user) } - - before do - group.add_maintainer(user) - sign_in(user) - end - - it 'schedule an application installation' do - expect(ClusterInstallAppWorker).to receive(:perform_async).with(application, anything).once - - expect { subject }.to change { current_application.count } - expect(response).to have_gitlab_http_status(:no_content) - expect(cluster.application_ingress).to be_scheduled - end - - context 'when cluster do not exists' do - before do - cluster.destroy! - end - - it 'return 404' do - expect { subject }.not_to change { current_application.count } - expect(response).to have_gitlab_http_status(:not_found) - end - end - - context 'when application is unknown' do - let(:application) { 'unkwnown-app' } - - it 'return 404' do - is_expected.to have_gitlab_http_status(:not_found) - end - end - - context 'when application is already installing' do - before do - create(:clusters_applications_ingress, :installing, cluster: cluster) - end - - it 'returns 400' do - is_expected.to have_gitlab_http_status(:bad_request) - end - end - end - - describe 'security' do - before do - allow(ClusterInstallAppWorker).to receive(:perform_async) - end - - it_behaves_like 'a secure endpoint' - end - end - - describe 'PATCH update' do - subject do - patch :update, params: params.merge(group_id: group) - end - - let!(:application) { create(:clusters_applications_cert_manager, :installed, cluster: cluster) } - let(:application_name) { application.name } - let(:params) { { application: application_name, id: cluster.id, email: "new-email@example.com" } } - - describe 'functionality' do - let(:user) { create(:user) } - - before do - group.add_maintainer(user) - sign_in(user) - end - - context "when cluster and app exists" do - it "schedules an application update" do - expect(ClusterPatchAppWorker).to receive(:perform_async).with(application.name, anything).once - - is_expected.to have_gitlab_http_status(:no_content) - - expect(cluster.application_cert_manager).to be_scheduled - end - end - - context 'when cluster do not exists' do - before do - cluster.destroy! - end - - it { is_expected.to have_gitlab_http_status(:not_found) } - end - - context 'when application is unknown' do - let(:application_name) { 'unkwnown-app' } - - it { is_expected.to have_gitlab_http_status(:not_found) } - end - - context 'when application is already scheduled' do - before do - application.make_scheduled! - end - - it { is_expected.to have_gitlab_http_status(:bad_request) } - end - end - - describe 'security' do - before do - allow(ClusterPatchAppWorker).to receive(:perform_async) - end - - it_behaves_like 'a secure endpoint' - end - end -end diff --git a/spec/controllers/projects/clusters/applications_controller_spec.rb b/spec/controllers/projects/clusters/applications_controller_spec.rb deleted file mode 100644 index cc6170252c1..00000000000 --- a/spec/controllers/projects/clusters/applications_controller_spec.rb +++ /dev/null @@ -1,215 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Projects::Clusters::ApplicationsController do - include AccessMatchersForController - - def current_application - Clusters::Cluster::APPLICATIONS[application] - end - - shared_examples 'a secure endpoint' do - it 'is allowed for admin when admin mode enabled', :enable_admin_mode do - expect { subject }.to be_allowed_for(:admin) - end - it 'is denied for admin when admin mode disabled' do - expect { subject }.to be_denied_for(:admin) - end - it { expect { subject }.to be_allowed_for(:owner).of(project) } - it { expect { subject }.to be_allowed_for(:maintainer).of(project) } - it { expect { subject }.to be_denied_for(:developer).of(project) } - it { expect { subject }.to be_denied_for(:reporter).of(project) } - it { expect { subject }.to be_denied_for(:guest).of(project) } - it { expect { subject }.to be_denied_for(:user) } - it { expect { subject }.to be_denied_for(:external) } - end - - describe 'POST create' do - subject do - post :create, params: params.merge(namespace_id: project.namespace, project_id: project) - end - - let(:cluster) { create(:cluster, :project, :provided_by_gcp) } - let(:project) { cluster.project } - let(:application) { 'ingress' } - let(:params) { { application: application, id: cluster.id } } - - describe 'functionality' do - let(:user) { create(:user) } - - before do - project.add_maintainer(user) - sign_in(user) - end - - it 'schedule an application installation' do - expect(ClusterInstallAppWorker).to receive(:perform_async).with(application, anything).once - - expect { subject }.to change { current_application.count } - expect(response).to have_gitlab_http_status(:no_content) - expect(cluster.application_ingress).to be_scheduled - end - - context 'when cluster do not exists' do - before do - cluster.destroy! - end - - it 'return 404' do - expect { subject }.not_to change { current_application.count } - expect(response).to have_gitlab_http_status(:not_found) - end - end - - context 'when application is unknown' do - let(:application) { 'unkwnown-app' } - - it 'return 404' do - is_expected.to have_gitlab_http_status(:not_found) - end - end - - context 'when application is already installing' do - before do - create(:clusters_applications_ingress, :installing, cluster: cluster) - end - - it 'returns 400' do - is_expected.to have_gitlab_http_status(:bad_request) - end - end - end - - describe 'security' do - before do - allow(ClusterInstallAppWorker).to receive(:perform_async) - end - - it_behaves_like 'a secure endpoint' - end - end - - describe 'PATCH update' do - subject do - patch :update, params: params.merge(namespace_id: project.namespace, project_id: project) - end - - let(:cluster) { create(:cluster, :project, :provided_by_gcp) } - let(:project) { cluster.project } - let!(:application) { create(:clusters_applications_knative, :installed, cluster: cluster) } - let(:application_name) { application.name } - let(:params) { { application: application_name, id: cluster.id, hostname: "new.example.com" } } - - describe 'functionality' do - let(:user) { create(:user) } - - before do - project.add_maintainer(user) - sign_in(user) - end - - context "when cluster and app exists" do - it "schedules an application update" do - expect(ClusterPatchAppWorker).to receive(:perform_async).with(application.name, anything).once - - is_expected.to have_gitlab_http_status(:no_content) - - expect(cluster.application_knative).to be_scheduled - end - end - - context 'when cluster do not exists' do - before do - cluster.destroy! - end - - it { is_expected.to have_gitlab_http_status(:not_found) } - end - - context 'when application is unknown' do - let(:application_name) { 'unkwnown-app' } - - it { is_expected.to have_gitlab_http_status(:not_found) } - end - - context 'when application is already scheduled' do - before do - application.make_scheduled! - end - - it { is_expected.to have_gitlab_http_status(:bad_request) } - end - end - - describe 'security' do - before do - allow(ClusterPatchAppWorker).to receive(:perform_async) - end - - it_behaves_like 'a secure endpoint' - end - end - - describe 'DELETE destroy' do - subject do - delete :destroy, params: params.merge(namespace_id: project.namespace, project_id: project) - end - - let(:cluster) { create(:cluster, :project, :provided_by_gcp) } - let(:project) { cluster.project } - let!(:application) { create(:clusters_applications_prometheus, :installed, cluster: cluster) } - let(:application_name) { application.name } - let(:params) { { application: application_name, id: cluster.id } } - let(:worker_class) { Clusters::Applications::UninstallWorker } - - describe 'functionality' do - let(:user) { create(:user) } - - before do - project.add_maintainer(user) - sign_in(user) - end - - context "when cluster and app exists" do - it "schedules an application update" do - expect(worker_class).to receive(:perform_async).with(application.name, application.id).once - - is_expected.to have_gitlab_http_status(:no_content) - - expect(cluster.application_prometheus).to be_scheduled - end - end - - context 'when cluster do not exists' do - before do - cluster.destroy! - end - - it { is_expected.to have_gitlab_http_status(:not_found) } - end - - context 'when application is unknown' do - let(:application_name) { 'unkwnown-app' } - - it { is_expected.to have_gitlab_http_status(:not_found) } - end - - context 'when application is already scheduled' do - before do - application.make_scheduled! - end - - it { is_expected.to have_gitlab_http_status(:bad_request) } - end - end - - describe 'security' do - before do - allow(worker_class).to receive(:perform_async) - end - - it_behaves_like 'a secure endpoint' - end - end -end diff --git a/spec/frontend/vue_shared/components/markdown/toolbar_button_spec.js b/spec/frontend/vue_shared/components/markdown/toolbar_button_spec.js index 786dfabb990..19e4f2d8c92 100644 --- a/spec/frontend/vue_shared/components/markdown/toolbar_button_spec.js +++ b/spec/frontend/vue_shared/components/markdown/toolbar_button_spec.js @@ -1,3 +1,4 @@ +import { GlButton } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; import ToolbarButton from '~/vue_shared/components/markdown/toolbar_button.vue'; @@ -25,7 +26,7 @@ describe('toolbar_button', () => { }); const getButtonShortcutsAttr = () => { - return wrapper.find('button').attributes('data-md-shortcuts'); + return wrapper.find(GlButton).attributes('data-md-shortcuts'); }; describe('keyboard shortcuts', () => { diff --git a/spec/lib/gitlab/usage_data_metrics_spec.rb b/spec/lib/gitlab/usage_data_metrics_spec.rb index 476a6e99cfd..5bc72845222 100644 --- a/spec/lib/gitlab/usage_data_metrics_spec.rb +++ b/spec/lib/gitlab/usage_data_metrics_spec.rb @@ -87,6 +87,39 @@ RSpec.describe Gitlab::UsageDataMetrics do ]) 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 + ) + end + it 'includes counts keys' do expect(subject[:counts]).to include(:issues) end diff --git a/spec/presenters/group_clusterable_presenter_spec.rb b/spec/presenters/group_clusterable_presenter_spec.rb index 27360201e81..84b97ba0bb7 100644 --- a/spec/presenters/group_clusterable_presenter_spec.rb +++ b/spec/presenters/group_clusterable_presenter_spec.rb @@ -67,22 +67,6 @@ RSpec.describe GroupClusterablePresenter do it { is_expected.to eq(cluster_status_group_cluster_path(group, cluster)) } end - describe '#install_applications_cluster_path' do - let(:application) { :helm } - - subject { presenter.install_applications_cluster_path(cluster, application) } - - it { is_expected.to eq(install_applications_group_cluster_path(group, cluster, application)) } - end - - describe '#update_applications_cluster_path' do - let(:application) { :helm } - - subject { presenter.update_applications_cluster_path(cluster, application) } - - it { is_expected.to eq(update_applications_group_cluster_path(group, cluster, application)) } - end - describe '#clear_cluster_cache_path' do subject { presenter.clear_cluster_cache_path(cluster) } diff --git a/spec/presenters/project_clusterable_presenter_spec.rb b/spec/presenters/project_clusterable_presenter_spec.rb index b518c63f0ca..9057b518647 100644 --- a/spec/presenters/project_clusterable_presenter_spec.rb +++ b/spec/presenters/project_clusterable_presenter_spec.rb @@ -67,22 +67,6 @@ RSpec.describe ProjectClusterablePresenter do it { is_expected.to eq(cluster_status_project_cluster_path(project, cluster)) } end - describe '#install_applications_cluster_path' do - let(:application) { :helm } - - subject { presenter.install_applications_cluster_path(cluster, application) } - - it { is_expected.to eq(install_applications_project_cluster_path(project, cluster, application)) } - end - - describe '#update_applications_cluster_path' do - let(:application) { :helm } - - subject { presenter.update_applications_cluster_path(cluster, application) } - - it { is_expected.to eq(update_applications_project_cluster_path(project, cluster, application)) } - end - describe '#clear_cluster_cache_path' do subject { presenter.clear_cluster_cache_path(cluster) } |