1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import styled from '@emotion/styled';
- import Access from 'sentry/components/acl/access';
- import NumberField from 'sentry/components/forms/fields/numberField';
- import Form from 'sentry/components/forms/form';
- import Panel from 'sentry/components/panels/panel';
- import PanelBody from 'sentry/components/panels/panelBody';
- import PanelHeader from 'sentry/components/panels/panelHeader';
- import {t} from 'sentry/locale';
- import type {Project} from 'sentry/types/project';
- import useOrganization from 'sentry/utils/useOrganization';
- type Props = {
- project: Project;
- };
- const DEFAULT_LIMIT = '5000';
- function transformData(data) {
- const limit = data.relayCustomMetricCardinalityLimit;
- return {
- relayCustomMetricCardinalityLimit:
- limit === '' || limit === DEFAULT_LIMIT ? null : limit,
- };
- }
- export function CardinalityLimit({project}: Props) {
- const organization = useOrganization();
- const endpoint = `/projects/${organization.slug}/${project.slug}/`;
- return (
- <Form
- apiEndpoint={endpoint}
- apiMethod="PUT"
- saveOnBlur
- initialData={{
- relayCustomMetricCardinalityLimit:
- project.relayCustomMetricCardinalityLimit ?? DEFAULT_LIMIT,
- }}
- >
- <Panel>
- <PanelHeader>{t('Limits')}</PanelHeader>
- <PanelBody>
- <Access access={['project:write']} project={project}>
- {({hasAccess}) => (
- <StyledNumberField
- disabledReason={
- !hasAccess
- ? t('You do not have permission to edit the cardinality limit')
- : undefined
- }
- disabled={!hasAccess}
- name="relayCustomMetricCardinalityLimit"
- label={t('Cardinality Limit')}
- help={t(
- 'The cardinality limit defines the maximum number of unique tag combinations allowed for a metric (measured per hour). If the cardinality limit is exceeded, the metric will be blocked.'
- )}
- saveOnBlur
- placeholder={t('Enter a value')}
- flexibleControlStateSize
- multiple
- getData={transformData}
- />
- )}
- </Access>
- </PanelBody>
- </Panel>
- </Form>
- );
- }
- const StyledNumberField = styled(NumberField)`
- ${p => p.disabled && `cursor: not-allowed`}
- `;
|