Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
764ff99273
commit
53ea1228be
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ module ErrorTracking
|
|||
end
|
||||
|
||||
def integrated_client?
|
||||
integrated && ::Feature.enabled?(:integrated_error_tracking, project)
|
||||
integrated
|
||||
end
|
||||
|
||||
def api_url=(value)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- page_title _("Import repository")
|
||||
%h3.page-title
|
||||
Import repository
|
||||
= _('Import repository')
|
||||
|
||||
%hr
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
require 'bundler/setup'
|
||||
require_relative '../config/bundler_setup'
|
||||
require 'stackprof'
|
||||
$:.unshift 'spec'
|
||||
require 'spec_helper'
|
||||
|
|
|
|||
|
|
@ -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'])
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'bundler'
|
||||
ENV['BUNDLE_GEMFILE'] ||= Bundler.settings[:gemfile]
|
||||
require 'bundler/setup'
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -20,3 +20,4 @@ tier:
|
|||
performance_indicator_type:
|
||||
- gmau
|
||||
- paid_gmau
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -22,3 +22,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -22,3 +22,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -19,3 +19,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -20,3 +20,4 @@ tier:
|
|||
performance_indicator_type:
|
||||
- gmau
|
||||
- paid_gmau
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -22,3 +22,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -22,3 +22,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -22,3 +22,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -25,3 +25,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -22,3 +22,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -18,3 +18,4 @@ tier:
|
|||
- premium
|
||||
- ultimate
|
||||
performance_indicator_type: []
|
||||
milestone: "<13.9"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in New Issue