metricRulePresets.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import type {LinkProps} from 'sentry/components/links/link';
  2. import {t} from 'sentry/locale';
  3. import type {Organization} from 'sentry/types/organization';
  4. import type {Project} from 'sentry/types/project';
  5. import type {DiscoverDatasets, SavedQueryDatasets} from 'sentry/utils/discover/types';
  6. import {DisplayModes} from 'sentry/utils/discover/types';
  7. import type {TimePeriodType} from 'sentry/views/alerts/rules/metric/details/constants';
  8. import {Dataset, type MetricRule} from 'sentry/views/alerts/rules/metric/types';
  9. import {getAlertRuleExploreUrl} from 'sentry/views/alerts/rules/utils';
  10. import {getMetricRuleDiscoverUrl} from 'sentry/views/alerts/utils/getMetricRuleDiscoverUrl';
  11. interface PresetCta {
  12. /**
  13. * The CTA text
  14. */
  15. buttonText: string;
  16. /**
  17. * The location to direct to upon clicking the CTA.
  18. */
  19. to: LinkProps['to'];
  20. }
  21. interface PresetCtaOpts {
  22. organization: Organization;
  23. projects: Project[];
  24. timePeriod: TimePeriodType;
  25. dataset?: DiscoverDatasets;
  26. openInDiscoverDataset?: SavedQueryDatasets;
  27. query?: string;
  28. rule?: MetricRule;
  29. }
  30. /**
  31. * Get the CTA used for alert rules that do not have a preset
  32. */
  33. export function makeDefaultCta({
  34. organization,
  35. projects,
  36. rule,
  37. timePeriod,
  38. query,
  39. dataset,
  40. openInDiscoverDataset,
  41. }: PresetCtaOpts): PresetCta {
  42. if (!rule) {
  43. return {
  44. buttonText: t('Open in Discover'),
  45. to: '',
  46. };
  47. }
  48. if (rule.dataset === Dataset.EVENTS_ANALYTICS_PLATFORM) {
  49. return {
  50. buttonText: t('Open in Explore'),
  51. to: getAlertRuleExploreUrl({
  52. rule,
  53. organization,
  54. period: timePeriod.period,
  55. projectId: projects[0]!.id,
  56. }),
  57. };
  58. }
  59. const extraQueryParams = {
  60. display: DisplayModes.DEFAULT,
  61. dataset,
  62. };
  63. return {
  64. buttonText: t('Open in Discover'),
  65. to: getMetricRuleDiscoverUrl({
  66. organization,
  67. projects,
  68. rule,
  69. timePeriod,
  70. query,
  71. extraQueryParams,
  72. openInDiscoverDataset,
  73. }),
  74. };
  75. }