Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2021-09-03 12:09:03 +00:00
parent 764ff99273
commit 53ea1228be
1182 changed files with 3184 additions and 1989 deletions

View File

@ -2591,3 +2591,66 @@ Database/MultipleDatabases:
- 'spec/support/helpers/usage_data_helpers.rb'
- 'spec/tasks/gitlab/backup_rake_spec.rb'
- 'spec/tasks/gitlab/db_rake_spec.rb'
# WIP: https://gitlab.com/gitlab-org/gitlab/-/issues/339787
Performance/ActiveRecordSubtransactionMethods:
Exclude:
- 'app/controllers/clusters/clusters_controller.rb'
- 'app/controllers/repositories/lfs_storage_controller.rb'
- 'app/controllers/search_controller.rb'
- 'app/models/application_record.rb'
- 'app/models/ci/ref.rb'
- 'app/models/container_repository.rb'
- 'app/models/design_management/design_collection.rb'
- 'app/models/error_tracking/error.rb'
- 'app/models/external_pull_request.rb'
- 'app/models/gpg_signature.rb'
- 'app/models/merge_request.rb'
- 'app/models/plan.rb'
- 'app/models/project.rb'
- 'app/models/shard.rb'
- 'app/models/x509_certificate.rb'
- 'app/models/x509_commit_signature.rb'
- 'app/models/x509_issuer.rb'
- 'app/services/bulk_imports/relation_export_service.rb'
- 'app/services/ci/update_build_state_service.rb'
- 'app/services/event_create_service.rb'
- 'app/services/groups/import_export/import_service.rb'
- 'app/services/lfs/file_transformer.rb'
- 'app/services/merge_requests/approval_service.rb'
- 'app/services/namespaces/statistics_refresher_service.rb'
- 'app/services/packages/rubygems/create_dependencies_service.rb'
- 'app/services/packages/rubygems/metadata_extraction_service.rb'
- 'app/services/projects/create_service.rb'
- 'app/services/projects/lfs_pointers/lfs_download_service.rb'
- 'app/services/service_desk_settings/update_service.rb'
- 'app/services/service_ping/submit_service.rb'
- 'app/services/terraform/remote_state_handler.rb'
- 'app/workers/namespaces/schedule_aggregation_worker.rb'
- 'app/workers/project_export_worker.rb'
- 'db/migrate/20200212014653_rename_security_dashboard_feature_flag_to_instance_security_dashboard.rb'
- 'db/post_migrate/20200214034836_remove_security_dashboard_feature_flag.rb'
- 'db/post_migrate/20210824174615_prepare_ci_builds_metadata_and_ci_build_async_indexes.rb'
- 'ee/app/models/ci/minutes/namespace_monthly_usage.rb'
- 'ee/app/models/ci/minutes/project_monthly_usage.rb'
- 'ee/app/models/concerns/deprecated_approvals_before_merge.rb'
- 'ee/app/models/ee/iteration.rb'
- 'ee/app/models/ee/plan.rb'
- 'ee/app/models/elastic/index_setting.rb'
- 'ee/app/models/gitlab_subscription.rb'
- 'ee/app/models/software_license.rb'
- 'ee/app/services/boards/user_preferences/update_service.rb'
- 'ee/app/services/ci/minutes/update_project_and_namespace_usage_service.rb'
- 'ee/app/services/ee/analytics/cycle_analytics/stages/base_service.rb'
- 'ee/app/services/security/store_report_service.rb'
- 'ee/app/services/security/store_scan_service.rb'
- 'ee/app/workers/import_software_licenses_worker.rb'
- 'ee/db/fixtures/production/027_plans.rb'
- 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
- 'ee/lib/gitlab/elastic/indexer.rb'
- 'lib/gitlab/ci/pipeline/seed/environment.rb'
- 'lib/gitlab/ci/pipeline/seed/processable/resource_group.rb'
- 'lib/gitlab/ci/trace/chunked_io.rb'
- 'lib/gitlab/composer/cache.rb'
- 'lib/gitlab/database/async_indexes/migration_helpers.rb'
- 'lib/gitlab/issuables_count_for_state.rb'

View File

@ -259,6 +259,7 @@ export function mountSidebarLabels() {
initiallySelectedLabels: JSON.parse(el.dataset.selectedLabels),
variant: DropdownVariant.Sidebar,
canUpdate: parseBoolean(el.dataset.canEdit),
isClassicSidebar: true,
},
render: (createElement) => createElement(SidebarLabels),
});

View File

@ -1,42 +0,0 @@
<script>
import { GlButton, GlIcon } from '@gitlab/ui';
import { mapActions, mapGetters } from 'vuex';
export default {
components: {
GlButton,
GlIcon,
},
computed: {
...mapGetters([
'dropdownButtonText',
'isDropdownVariantStandalone',
'isDropdownVariantEmbedded',
]),
},
methods: {
...mapActions(['toggleDropdownContents']),
handleButtonClick(e) {
if (this.isDropdownVariantStandalone || this.isDropdownVariantEmbedded) {
this.toggleDropdownContents();
}
if (this.isDropdownVariantStandalone) {
e.stopPropagation();
}
},
},
};
</script>
<template>
<gl-button
class="labels-select-dropdown-button js-dropdown-button w-100 text-left"
@click="handleButtonClick"
>
<span class="dropdown-toggle-text gl-pointer-events-none flex-fill">
{{ dropdownButtonText }}
</span>
<gl-icon name="chevron-down" class="gl-pointer-events-none float-right" />
</gl-button>
</template>

View File

@ -1,5 +1,5 @@
<script>
import { GlButton } from '@gitlab/ui';
import { GlButton, GlDropdown, GlDropdownItem, GlLink } from '@gitlab/ui';
import { mapActions, mapGetters, mapState } from 'vuex';
import DropdownContentsCreateView from './dropdown_contents_create_view.vue';
@ -10,13 +10,12 @@ export default {
DropdownContentsLabelsView,
DropdownContentsCreateView,
GlButton,
GlDropdown,
GlDropdownItem,
GlLink,
},
inject: ['allowLabelCreate', 'labelsManagePath'],
props: {
renderOnTop: {
type: Boolean,
required: false,
default: false,
},
labelsCreateTitle: {
type: String,
required: true,
@ -44,67 +43,90 @@ export default {
},
computed: {
...mapState(['showDropdownContentsCreateView']),
...mapGetters(['isDropdownVariantSidebar', 'isDropdownVariantEmbedded']),
...mapGetters(['dropdownButtonText', 'isDropdownVariantSidebar', 'isDropdownVariantEmbedded']),
dropdownContentsView() {
if (this.showDropdownContentsCreateView) {
return 'dropdown-contents-create-view';
}
return 'dropdown-contents-labels-view';
},
directionStyle() {
const bottom = this.isDropdownVariantSidebar ? '3rem' : '2rem';
return this.renderOnTop ? { bottom } : {};
},
dropdownTitle() {
return this.showDropdownContentsCreateView ? this.labelsCreateTitle : this.labelsListTitle;
},
showDropdownFooter() {
return (
!this.showDropdownContentsCreateView &&
(this.isDropdownVariantSidebar || this.isDropdownVariantEmbedded)
);
},
},
methods: {
...mapActions(['toggleDropdownContentsCreateView']),
showDropdown() {
this.$refs.dropdown.show();
},
toggleDropdownContent() {
this.toggleDropdownContentsCreateView();
// Required to recalculate dropdown position as its size changes
this.$refs.dropdown.$refs.dropdown.$_popper.scheduleUpdate();
},
},
};
</script>
<template>
<div
class="labels-select-dropdown-contents gl-w-full gl-my-2 gl-py-3 gl-rounded-base gl-absolute"
<gl-dropdown
ref="dropdown"
:text="dropdownButtonText"
class="gl-w-full gl-mt-2"
data-qa-selector="labels_dropdown_content"
:style="directionStyle"
>
<div
v-if="isDropdownVariantSidebar || isDropdownVariantEmbedded"
class="dropdown-title gl-display-flex gl-align-items-center gl-pt-0 gl-pb-3!"
data-testid="dropdown-title"
>
<gl-button
v-if="showDropdownContentsCreateView"
:aria-label="__('Go back')"
variant="link"
size="small"
class="js-btn-back dropdown-header-button p-0"
icon="arrow-left"
@click.stop="toggleDropdownContentsCreateView"
/>
<span class="flex-grow-1">{{ dropdownTitle }}</span>
<gl-button
:aria-label="__('Close')"
variant="link"
size="small"
class="dropdown-header-button gl-p-0!"
icon="close"
@click="$emit('closeDropdown')"
/>
</div>
<template #header>
<div
v-if="isDropdownVariantSidebar || isDropdownVariantEmbedded"
class="dropdown-title gl-display-flex gl-align-items-center gl-pt-0 gl-pb-3!"
>
<gl-button
v-if="showDropdownContentsCreateView"
:aria-label="__('Go back')"
variant="link"
size="small"
class="js-btn-back dropdown-header-button gl-p-0"
icon="arrow-left"
data-testid="go-back-button"
@click.stop="toggleDropdownContent"
/>
<span class="gl-flex-grow-1">{{ dropdownTitle }}</span>
<gl-button
:aria-label="__('Close')"
variant="link"
size="small"
class="dropdown-header-button gl-p-0!"
icon="close"
@click="$emit('closeDropdown')"
/>
</div>
</template>
<component
:is="dropdownContentsView"
:selected-labels="selectedLabels"
:allow-multiselect="allowMultiselect"
:labels-list-title="labelsListTitle"
:footer-create-label-title="footerCreateLabelTitle"
:footer-manage-label-title="footerManageLabelTitle"
@hideCreateView="toggleDropdownContentsCreateView"
@setLabels="$emit('setLabels', $event)"
@toggleDropdownContentsCreateView="toggleDropdownContentsCreateView"
/>
</div>
<template #footer>
<div v-if="showDropdownFooter" data-testid="dropdown-footer">
<gl-dropdown-item
v-if="allowLabelCreate"
data-testid="create-label-button"
@click.native.capture.stop="toggleDropdownContent"
>
{{ footerCreateLabelTitle }}
</gl-dropdown-item>
<gl-dropdown-item :href="labelsManagePath">
{{ footerManageLabelTitle }}
</gl-dropdown-item>
</div>
</template>
</gl-dropdown>
</template>

View File

@ -1,24 +1,23 @@
<script>
import { GlLoadingIcon, GlSearchBoxByType, GlLink } from '@gitlab/ui';
import { GlDropdownForm, GlDropdownItem, GlLoadingIcon, GlSearchBoxByType } from '@gitlab/ui';
import fuzzaldrinPlus from 'fuzzaldrin-plus';
import { debounce } from 'lodash';
import createFlash from '~/flash';
import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';
import { UP_KEY_CODE, DOWN_KEY_CODE, ENTER_KEY_CODE, ESC_KEY_CODE } from '~/lib/utils/keycodes';
import { __ } from '~/locale';
import { DropdownVariant } from './constants';
import projectLabelsQuery from './graphql/project_labels.query.graphql';
import LabelItem from './label_item.vue';
export default {
components: {
GlDropdownForm,
GlDropdownItem,
GlLoadingIcon,
GlSearchBoxByType,
GlLink,
LabelItem,
},
inject: ['projectPath', 'allowLabelCreate', 'labelsManagePath', 'variant'],
inject: ['projectPath'],
props: {
selectedLabels: {
type: Array,
@ -28,18 +27,6 @@ export default {
type: Boolean,
required: true,
},
labelsListTitle: {
type: String,
required: true,
},
footerCreateLabelTitle: {
type: String,
required: true,
},
footerManageLabelTitle: {
type: String,
required: true,
},
},
data() {
return {
@ -74,12 +61,6 @@ export default {
},
},
computed: {
isDropdownVariantSidebar() {
return this.variant === DropdownVariant.Sidebar;
},
isDropdownVariantEmbedded() {
return this.variant === DropdownVariant.Embedded;
},
labelsFetchInProgress() {
return this.$apollo.queries.labels.loading;
},
@ -150,37 +131,10 @@ export default {
});
}
},
/**
* This method enables keyboard navigation support for
* the dropdown.
*/
handleKeyDown(e) {
if (e.keyCode === UP_KEY_CODE && this.currentHighlightItem > 0) {
this.currentHighlightItem -= 1;
} else if (
e.keyCode === DOWN_KEY_CODE &&
this.currentHighlightItem < this.visibleLabels.length - 1
) {
this.currentHighlightItem += 1;
} else if (e.keyCode === ENTER_KEY_CODE && this.currentHighlightItem > -1) {
this.updateSelectedLabels(this.visibleLabels[this.currentHighlightItem]);
this.searchKey = '';
} else if (e.keyCode === ESC_KEY_CODE) {
this.$emit('setLabels', this.localSelectedLabels);
}
if (e.keyCode !== ESC_KEY_CODE) {
// Scroll the list only after highlighting
// styles are rendered completely.
this.$nextTick(() => {
this.scrollIntoViewIfNeeded();
});
}
},
handleLabelClick(label) {
this.updateSelectedLabels(label);
if (!this.allowMultiselect) {
this.$emit('setLabels', this.localSelectedLabels);
this.$emit('closeDropdown', this.localSelectedLabels);
}
},
setSearchKey(value) {
@ -191,69 +145,42 @@ export default {
</script>
<template>
<div
class="labels-select-contents-list js-labels-list"
data-testid="dropdown-wrapper"
@keydown="handleKeyDown"
>
<div class="dropdown-input" @click.stop="() => {}">
<gl-search-box-by-type
ref="searchInput"
:value="searchKey"
:disabled="labelsFetchInProgress"
data-qa-selector="dropdown_input_field"
data-testid="dropdown-input-field"
@input="debouncedSearchKeyUpdate"
/>
</div>
<div ref="labelsListContainer" class="dropdown-content" data-testid="dropdown-content">
<gl-dropdown-form class="labels-select-contents-list js-labels-list">
<gl-search-box-by-type
ref="searchInput"
:value="searchKey"
:disabled="labelsFetchInProgress"
data-qa-selector="dropdown_input_field"
data-testid="dropdown-input-field"
@input="debouncedSearchKeyUpdate"
/>
<div ref="labelsListContainer" data-testid="dropdown-content">
<gl-loading-icon
v-if="labelsFetchInProgress"
class="labels-fetch-loading gl-align-items-center gl-w-full gl-h-full"
size="md"
/>
<ul v-else class="list-unstyled gl-mb-0 gl-word-break-word" data-testid="labels-list">
<label-item
<template v-else>
<gl-dropdown-item
v-for="(label, index) in visibleLabels"
:key="label.id"
:label="label"
:is-label-set="isLabelSelected(label)"
:highlight="index === currentHighlightItem"
@clickLabel="handleLabelClick(label)"
/>
<li
data-testid="labels-list"
@click.native.capture.stop="handleLabelClick(label)"
>
<label-item
:label="label"
:is-label-set="isLabelSelected(label)"
:highlight="index === currentHighlightItem"
/>
</gl-dropdown-item>
<gl-dropdown-item
v-show="showNoMatchingResultsMessage"
class="gl-p-3 gl-text-center"
data-testid="no-results"
>
{{ __('No matching results') }}
</li>
</ul>
</gl-dropdown-item>
</template>
</div>
<div
v-if="isDropdownVariantSidebar || isDropdownVariantEmbedded"
class="dropdown-footer"
data-testid="dropdown-footer"
>
<ul class="list-unstyled">
<li v-if="allowLabelCreate">
<gl-link
class="gl-display-flex gl-flex-direction-row gl-w-full gl-overflow-break-word label-item"
data-testid="create-label-button"
@click.stop="$emit('toggleDropdownContentsCreateView')"
>
{{ footerCreateLabelTitle }}
</gl-link>
</li>
<li>
<gl-link
:href="labelsManagePath"
class="gl-display-flex gl-flex-direction-row gl-w-full gl-overflow-break-word label-item"
>
{{ footerManageLabelTitle }}
</gl-link>
</li>
</ul>
</div>
</div>
</gl-dropdown-form>
</template>

View File

@ -18,7 +18,7 @@ export default {
default: false,
},
},
render(h, { props, listeners }) {
render(h, { props }) {
const { label, highlight, isLabelSet } = props;
const labelColorBox = h('span', {
@ -53,18 +53,7 @@ export default {
const labelTitle = h('span', label.title);
const labelLink = h(
GlLink,
{
class: 'gl-display-flex gl-align-items-center label-item gl-text-black-normal',
on: {
click: () => {
listeners.clickLabel(label);
},
},
},
[noIcon, checkedIcon, labelColorBox, labelTitle],
);
const labelLink = h(GlLink, [noIcon, checkedIcon, labelColorBox, labelTitle]);
return h(
'li',

View File

@ -1,11 +1,9 @@
<script>
import Vue from 'vue';
import Vuex, { mapState, mapActions, mapGetters } from 'vuex';
import { isInViewport } from '~/lib/utils/common_utils';
import Vuex, { mapActions, mapGetters } from 'vuex';
import { __ } from '~/locale';
import SidebarEditableItem from '~/sidebar/components/sidebar_editable_item.vue';
import { DropdownVariant } from './constants';
import DropdownButton from './dropdown_button.vue';
import DropdownContents from './dropdown_contents.vue';
import DropdownValue from './dropdown_value.vue';
import DropdownValueCollapsed from './dropdown_value_collapsed.vue';
@ -18,7 +16,6 @@ export default {
store: new Vuex.Store(labelsSelectModule()),
components: {
DropdownValue,
DropdownButton,
DropdownContents,
DropdownValueCollapsed,
SidebarEditableItem,
@ -137,7 +134,6 @@ export default {
},
},
computed: {
...mapState(['showDropdownContents']),
...mapGetters([
'isDropdownVariantSidebar',
'isDropdownVariantStandalone',
@ -150,9 +146,6 @@ export default {
selectedLabels,
});
},
showDropdownContents(showDropdownContents) {
this.setContentIsOnViewport(showDropdownContents);
},
isEditing(newVal) {
if (newVal) {
this.toggleDropdownContents();
@ -190,11 +183,9 @@ export default {
handleCollapsedValueClick() {
this.$emit('toggleCollapse');
},
setContentIsOnViewport() {
showDropdown() {
this.$nextTick(() => {
if (this.$refs.dropdownContents) {
this.contentIsOnViewport = isInViewport(this.$refs.dropdownContents.$el);
}
this.$refs.dropdownContents.showDropdown();
});
},
},
@ -219,8 +210,7 @@ export default {
ref="editable"
:title="__('Labels')"
:loading="labelsSelectInProgress"
@open="setContentIsOnViewport"
@close="contentIsOnViewport = true"
@open="showDropdown"
>
<template #collapsed>
<dropdown-value
@ -248,7 +238,6 @@ export default {
>
<slot></slot>
</dropdown-value>
<dropdown-button />
<dropdown-contents
v-if="edit"
ref="dropdownContents"
@ -256,7 +245,6 @@ export default {
:labels-list-title="labelsListTitle"
:footer-create-label-title="footerCreateLabelTitle"
:footer-manage-label-title="footerManageLabelTitle"
:render-on-top="!contentIsOnViewport"
:labels-create-title="labelsCreateTitle"
:selected-labels="selectedLabels"
@closeDropdown="collapseDropdown"

View File

@ -38,7 +38,7 @@ class Clusters::ClustersController < Clusters::BaseController
def new
if params[:provider] == 'aws'
@aws_role = Aws::Role.create_or_find_by!(user: current_user) # rubocop:disable Performance/ActiveRecordSubtransactionMethods
@aws_role = Aws::Role.create_or_find_by!(user: current_user)
@instance_types = load_instance_types.to_json
elsif params[:provider] == 'gcp'

View File

@ -51,7 +51,7 @@ module ErrorTracking
end
def integrated_client?
integrated && ::Feature.enabled?(:integrated_error_tracking, project)
integrated
end
def api_url=(value)

View File

@ -89,7 +89,7 @@ class ExternalPullRequest < ApplicationRecord
end
def self.safe_find_or_initialize_and_update(find:, update:)
safe_ensure_unique(retries: 1) do # rubocop:disable Performance/ActiveRecordSubtransactionMethods
safe_ensure_unique(retries: 1) do
model = find_or_initialize_by(find)
if model.update(update)

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
module Namespaces
class ProjectNamespace < Namespace
has_one :project, foreign_key: :project_namespace_id, inverse_of: :project_namespace
end
end

View File

@ -162,6 +162,7 @@ class Project < ApplicationRecord
belongs_to :creator, class_name: 'User'
belongs_to :group, -> { where(type: 'Group') }, foreign_key: 'namespace_id'
belongs_to :namespace
belongs_to :project_namespace, class_name: 'Namespaces::ProjectNamespace', foreign_key: 'project_namespace_id', inverse_of: :project
alias_method :parent, :namespace
alias_attribute :parent_id, :namespace_id
@ -1790,7 +1791,9 @@ class Project < ApplicationRecord
end
def any_online_runners?(&block)
online_runners_with_tags.any?(&block)
::Gitlab::Database.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/339937') do
online_runners_with_tags.any?(&block)
end
end
def valid_runners_token?(token)
@ -2896,12 +2899,8 @@ class Project < ApplicationRecord
update_column(:has_external_issue_tracker, integrations.external_issue_trackers.any?) if Gitlab::Database.read_write?
end
def active_runners_with_tags
@active_runners_with_tags ||= active_runners.with_tags
end
def online_runners_with_tags
@online_runners_with_tags ||= active_runners_with_tags.online
@online_runners_with_tags ||= active_runners.with_tags.online
end
end

View File

@ -35,7 +35,7 @@ module MergeRequests
end
def save_approval(approval)
Approval.safe_ensure_unique do # rubocop:disable Performance/ActiveRecordSubtransactionMethods
Approval.safe_ensure_unique do
approval.save
end
end

View File

@ -70,7 +70,7 @@ module Terraform
return find_state!(find_params) if find_only
state = Terraform::State.create_or_find_by(find_params) # rubocop:disable Performance/ActiveRecordSubtransactionMethods
state = Terraform::State.create_or_find_by(find_params)
# https://github.com/rails/rails/issues/36027
return state unless state.errors.of_kind? :name, :taken

View File

@ -2,6 +2,7 @@
- breadcrumb_title @application.name
- page_title _("Edit"), @application.name, _("Applications")
%h3.page-title Edit application
%h3.page-title
= _('Edit application')
- @url = admin_application_path(@application)
= render 'form', application: @application

View File

@ -9,7 +9,7 @@
.gl-alert-body
= @error
%h3.page-title
New Branch
= _('New Branch')
%hr
= form_tag namespace_project_branches_path, method: :post, id: "new-branch-form", class: "js-create-branch-form js-requires-input" do

View File

@ -1,6 +1,6 @@
- page_title _("Import repository")
%h3.page-title
Import repository
= _('Import repository')
%hr

View File

@ -3,6 +3,6 @@
- page_title _("Edit"), @label.name, _("Labels")
%h3.page-title
Edit Label
= _('Edit Label')
%hr
= render 'shared/labels/form', url: project_label_path(@project, @label), back_path: project_labels_path(@project)

View File

@ -3,6 +3,6 @@
- page_title _("New Label")
%h3.page-title
New Label
= _('New Label')
%hr
= render 'shared/labels/form', url: project_labels_path(@project), back_path: project_labels_path(@project)

View File

@ -1,5 +1,5 @@
%h3.page-title
New merge request
= _('New merge request')
= form_for [@project, @merge_request], url: project_new_merge_request_path(@project), method: :get, html: { class: "merge-request-form js-requires-input" } do |f|
- if params[:nav_source].present?

View File

@ -1,5 +1,5 @@
%h3.page-title
New merge request
= _('New merge request')
= form_for [@project, @merge_request], html: { class: 'merge-request-form common-note-form js-requires-input js-quick-submit' } do |f|
= render 'shared/issuable/form', f: f, issuable: @merge_request, commits: @commits, presenter: @mr_presenter
= f.hidden_field :source_project_id

View File

@ -1,3 +1,8 @@
#!/usr/bin/env ruby
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
require 'bundler'
ENV['BUNDLE_GEMFILE'] ||=
Bundler.settings[:gemfile] || File.expand_path('../Gemfile', __dir__)
load Gem.bin_path('bundler', 'bundle')

View File

@ -5,5 +5,5 @@ begin
rescue LoadError => e
raise unless e.message.include?('spring')
end
require 'bundler/setup'
require_relative '../config/bundler_setup'
load Gem.bin_path('rspec-core', 'rspec')

View File

@ -1,6 +1,6 @@
#!/usr/bin/env ruby
require 'bundler/setup'
require_relative '../config/bundler_setup'
require 'stackprof'
$:.unshift 'spec'
require 'spec_helper'

View File

@ -1,6 +1,9 @@
# frozen_string_literal: true
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
require 'bundler'
ENV['BUNDLE_GEMFILE'] ||=
Bundler.settings[:gemfile] || File.expand_path('../Gemfile', __dir__)
# Set up gems listed in the Gemfile.
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])

5
config/bundler_setup.rb Normal file
View File

@ -0,0 +1,5 @@
# frozen_string_literal: true
require 'bundler'
ENV['BUNDLE_GEMFILE'] ||= Bundler.settings[:gemfile]
require 'bundler/setup'

View File

@ -1,8 +0,0 @@
---
name: integrated_error_tracking
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/65767
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/335846
milestone: '14.1'
type: development
group: group::monitor
default_enabled: false

View File

@ -5,11 +5,11 @@ description: Unique visitors to any analytics feature by month
product_section: dev
product_stage: manage
product_group: group::optimize
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
tier:
@ -19,3 +19,4 @@ performance_indicator_type:
- smau
- gmau
- paid_gmau
milestone: "<13.9"

View File

@ -5,7 +5,7 @@ description: Unique visitors to /groups/:group/-/analytics/ci_cd by month
product_section: dev
product_stage: manage
product_group: group::optimize
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
@ -13,10 +13,11 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- p_analytics_pipelines
- p_analytics_pipelines
distribution:
- ce
tier:
- free
skip_validation: true
performance_indicator_type: []
milestone: "<13.9"

View File

@ -5,7 +5,7 @@ description: Unique visitors to /:group/:project/-/value_stream_analytics by mon
product_section: dev
product_stage: manage
product_group: group::optimize
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
@ -13,10 +13,11 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- p_analytics_valuestream
- p_analytics_valuestream
distribution:
- ce
tier:
- free
skip_validation: true
performance_indicator_type: []
milestone: "<13.9"

View File

@ -1,11 +1,11 @@
---
data_category: optional
key_path: redis_hll_counters.analytics.i_analytics_cohorts_monthly
description:
description:
product_section: fulfillment
product_stage: fulfillment
product_group: group::utilization
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
@ -13,10 +13,11 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_analytics_cohorts
- i_analytics_cohorts
distribution:
- ce
tier:
- free
skip_validation: true
performance_indicator_type: []
milestone: "<13.9"

View File

@ -5,7 +5,7 @@ description: Unique visitors to /admin/dev_ops_report by month
product_section: dev
product_stage: manage
product_group: group::optimize
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
@ -13,10 +13,11 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_analytics_dev_ops_score
- i_analytics_dev_ops_score
distribution:
- ce
tier:
- free
skip_validation: true
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,10 +13,11 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- g_analytics_merge_request
- g_analytics_merge_request
distribution:
- ce
tier:
- free
skip_validation: true
performance_indicator_type: []
milestone: "<13.9"

View File

@ -5,7 +5,7 @@ description: Unique visitors to /admin/usage_trends by month
product_section: dev
product_stage: manage
product_group: group::optimize
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
@ -13,10 +13,11 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_analytics_instance_statistics
- i_analytics_instance_statistics
distribution:
- ce
tier:
- free
skip_validation: true
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,26 +13,27 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- users_viewing_analytics_group_devops_adoption
- i_analytics_dev_ops_adoption
- i_analytics_dev_ops_score
- p_analytics_merge_request
- i_analytics_instance_statistics
- g_analytics_contribution
- g_analytics_insights
- g_analytics_issues
- g_analytics_productivity
- g_analytics_valuestream
- p_analytics_pipelines
- p_analytics_code_reviews
- p_analytics_valuestream
- p_analytics_insights
- p_analytics_issues
- p_analytics_repo
- i_analytics_cohorts
- users_viewing_analytics_group_devops_adoption
- i_analytics_dev_ops_adoption
- i_analytics_dev_ops_score
- p_analytics_merge_request
- i_analytics_instance_statistics
- g_analytics_contribution
- g_analytics_insights
- g_analytics_issues
- g_analytics_productivity
- g_analytics_valuestream
- p_analytics_pipelines
- p_analytics_code_reviews
- p_analytics_valuestream
- p_analytics_insights
- p_analytics_issues
- p_analytics_repo
- i_analytics_cohorts
distribution:
- ce
tier:
- free
skip_validation: true
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -1,7 +1,8 @@
---
data_category: optional
key_path: usage_activity_by_stage_monthly.create.projects_with_disable_overriding_approvers_per_merge_request
description: Count of the number of projects with setting to disable overriding approvers per merge request
description: Count of the number of projects with setting to disable overriding approvers
per merge request
product_section: dev
product_stage: create
product_group: group::source code
@ -18,3 +19,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -1,7 +1,8 @@
---
data_category: optional
key_path: usage_activity_by_stage_monthly.create.projects_without_disable_overriding_approvers_per_merge_request
description: Count of the number of projects without setting to disable overriding approvers per merge request
description: Count of the number of projects without setting to disable overriding
approvers per merge request
product_section: dev
product_stage: create
product_group: group::source code
@ -18,3 +19,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -20,3 +20,4 @@ tier:
performance_indicator_type:
- gmau
- paid_gmau
milestone: "<13.9"

View File

@ -1,7 +1,8 @@
---
data_category: optional
key_path: usage_activity_by_stage_monthly.create.suggestions
description: Count of unique users per month who create suggestions in merge request comments
description: Count of unique users per month who create suggestions in merge request
comments
product_section: dev
product_stage: create
product_group: group::code review
@ -18,3 +19,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_mr_diffs
- i_code_review_mr_diffs
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_single_file_diffs
- i_code_review_user_single_file_diffs
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_mr_single_file_diffs
- i_code_review_mr_single_file_diffs
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_create_mr
- i_code_review_user_create_mr
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_close_mr
- i_code_review_user_close_mr
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_reopen_mr
- i_code_review_user_reopen_mr
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_merge_mr
- i_code_review_user_merge_mr
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_create_mr_comment
- i_code_review_user_create_mr_comment
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_edit_mr_comment
- i_code_review_user_edit_mr_comment
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_remove_mr_comment
- i_code_review_user_remove_mr_comment
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -13,11 +13,12 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_add_suggestion
- i_code_review_user_add_suggestion
distribution:
- ce
- ee
tier:
- free
- premium
- ultimate
- free
- premium
- ultimate
milestone: "<13.9"

View File

@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- i_code_review_user_apply_suggestion
- i_code_review_user_apply_suggestion
distribution:
- ce
- ee
@ -21,3 +21,4 @@ tier:
- free
- premium
- ultimate
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,8 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters_applications_cert_managers.status IN (3, 5))'>_clusters_<with>_<adjective describing: '(clusters_applications_cert_managers.status IN (3, 5))'>_clusters_applications_cert_managers"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters_applications_cert_managers.status
IN (3, 5))''>_clusters_<with>_<adjective describing: ''(clusters_applications_cert_managers.status
IN (3, 5))''>_clusters_applications_cert_managers'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,8 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters_applications_helm.status IN (3, 5))'>_clusters_<with>_<adjective describing: '(clusters_applications_helm.status IN (3, 5))'>_clusters_applications_helm"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters_applications_helm.status
IN (3, 5))''>_clusters_<with>_<adjective describing: ''(clusters_applications_helm.status
IN (3, 5))''>_clusters_applications_helm'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,8 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters_applications_ingress.status IN (3, 5))'>_clusters_<with>_<adjective describing: '(clusters_applications_ingress.status IN (3, 5))'>_clusters_applications_ingress"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters_applications_ingress.status
IN (3, 5))''>_clusters_<with>_<adjective describing: ''(clusters_applications_ingress.status
IN (3, 5))''>_clusters_applications_ingress'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,8 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters_applications_knative.status IN (3, 5))'>_clusters_<with>_<adjective describing: '(clusters_applications_knative.status IN (3, 5))'>_clusters_applications_knative"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters_applications_knative.status
IN (3, 5))''>_clusters_<with>_<adjective describing: ''(clusters_applications_knative.status
IN (3, 5))''>_clusters_applications_knative'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -1,8 +1,9 @@
---
data_category: optional
key_path: usage_activity_by_stage_monthly.configure.clusters_management_project
name: "count_distinct_user_id_from_management_project_clusters"
description: Number of Kubernetes clusters with clusters management project being set
name: count_distinct_user_id_from_management_project_clusters
description: Number of Kubernetes clusters with clusters management project being
set
product_section: ops
product_stage: configure
product_group: group::configure
@ -19,3 +20,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,6 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.enabled = FALSE)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.enabled = FALSE)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,6 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.enabled = TRUE)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.enabled = TRUE)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,9 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.provider_type = 1 AND (cluster_providers_gcp.status IN (3)) AND clusters.enabled = TRUE)'>_clusters_<with>_<adjective describing: '(clusters.provider_type = 1 AND (cluster_providers_gcp.status IN (3)) AND clusters.enabled = TRUE)'>_cluster_providers_gcp"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.provider_type
= 1 AND (cluster_providers_gcp.status IN (3)) AND clusters.enabled = TRUE)''>_clusters_<with>_<adjective
describing: ''(clusters.provider_type = 1 AND (cluster_providers_gcp.status IN (3))
AND clusters.enabled = TRUE)''>_cluster_providers_gcp'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,9 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.provider_type = 2 AND (cluster_providers_aws.status IN (3)) AND clusters.enabled = TRUE)'>_clusters_<with>_<adjective describing: '(clusters.provider_type = 2 AND (cluster_providers_aws.status IN (3)) AND clusters.enabled = TRUE)'>_cluster_providers_aws"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.provider_type
= 2 AND (cluster_providers_aws.status IN (3)) AND clusters.enabled = TRUE)''>_clusters_<with>_<adjective
describing: ''(clusters.provider_type = 2 AND (cluster_providers_aws.status IN (3))
AND clusters.enabled = TRUE)''>_cluster_providers_aws'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,7 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.provider_type = 0 AND clusters.enabled = TRUE)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.provider_type
= 0 AND clusters.enabled = TRUE)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,7 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.enabled = FALSE AND clusters.cluster_type = 1)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.enabled = FALSE
AND clusters.cluster_type = 1)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,7 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.enabled = TRUE AND clusters.cluster_type = 1)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.enabled = TRUE
AND clusters.cluster_type = 1)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,7 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.enabled = FALSE AND clusters.cluster_type = 2)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.enabled = FALSE
AND clusters.cluster_type = 2)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,7 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.enabled = TRUE AND clusters.cluster_type = 2)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.enabled = TRUE
AND clusters.cluster_type = 2)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,7 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.enabled = FALSE AND clusters.cluster_type = 3)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.enabled = FALSE
AND clusters.cluster_type = 3)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -9,7 +9,7 @@ product_category: kubernetes_management
value_type: number
status: data_available
time_frame: 28d
data_source:
data_source:
distribution:
- ce
- ee
@ -18,5 +18,7 @@ tier:
- premium
- ultimate
skip_validation: true
name: "count_distinct_user_id_from_<adjective describing: '(clusters.enabled = TRUE AND clusters.cluster_type = 3)'>_clusters"
name: 'count_distinct_user_id_from_<adjective describing: ''(clusters.enabled = TRUE
AND clusters.cluster_type = 3)''>_clusters'
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -1,7 +1,7 @@
---
data_category: optional
key_path: usage_activity_by_stage_monthly.verify.ci_pipelines
description: "Distinct users triggering pipelines in a month"
description: Distinct users triggering pipelines in a month
product_section: ops
product_stage: verify
product_group: group::pipeline execution
@ -22,3 +22,4 @@ performance_indicator_type:
- smau
- gmau
- paid_gmau
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -19,3 +19,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -20,3 +20,4 @@ tier:
performance_indicator_type:
- gmau
- paid_gmau
milestone: "<13.9"

View File

@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -25,3 +25,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -1,7 +1,10 @@
---
data_category: optional
key_path: redis_hll_counters.search.search_total_unique_counts_monthly
description: Total unique users for i_search_total, i_search_advanced, i_search_paid for recent 28 days. This metric is redundant because advanced will be a subset of paid and paid will be a subset of total. i_search_total is more appropriate if you just want the total
description: Total unique users for i_search_total, i_search_advanced, i_search_paid
for recent 28 days. This metric is redundant because advanced will be a subset of
paid and paid will be a subset of total. i_search_total is more appropriate if you
just want the total
product_section: enablement
product_stage: enablement
product_group: group::global search
@ -25,3 +28,4 @@ tier:
- ultimate
performance_indicator_type:
- gmau
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -1,7 +1,7 @@
---
data_category: optional
key_path: usage_activity_by_stage_monthly.monitor.projects_with_incidents
description: 'Count of unique projects with an incident created in the last month'
description: Count of unique projects with an incident created in the last month
product_section: ops
product_stage: monitor
product_group: group::monitor
@ -18,3 +18,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -1,8 +1,8 @@
---
data_category: optional
key_path: usage_activity_by_stage_monthly.monitor.projects_with_alert_incidents
description: 'Count of unique projects with an incident from an alert created in the
last month'
description: Count of unique projects with an incident from an alert created in the
last month
product_section: ops
product_stage: monitor
product_group: group::monitor
@ -19,3 +19,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -5,7 +5,7 @@ description: Count of unique users changing alert's status changes per month
product_section: ops
product_stage: monitor
product_group: group::monitor
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- incident_management_alert_status_changed
- incident_management_alert_status_changed
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -5,7 +5,7 @@ description: Count of unique users assigning an alert per month
product_section: ops
product_stage: monitor
product_group: group::monitor
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- incident_management_alert_assigned
- incident_management_alert_assigned
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

View File

@ -5,7 +5,7 @@ description: Count of unique users adding alerts to the TODO list per month
product_section: ops
product_stage: monitor
product_group: group::monitor
product_category:
product_category:
value_type: number
status: data_available
time_frame: 28d
@ -13,7 +13,7 @@ data_source: redis_hll
instrumentation_class: RedisHLLMetric
options:
events:
- incident_management_alert_todo
- incident_management_alert_todo
distribution:
- ce
- ee
@ -22,3 +22,4 @@ tier:
- premium
- ultimate
performance_indicator_type: []
milestone: "<13.9"

Some files were not shown because too many files have changed in this diff Show More