getAlertsUrl.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import * as qs from 'query-string';
  2. import type {PageFilters} from 'sentry/types/core';
  3. import type {Project} from 'sentry/types/project';
  4. import normalizeUrl from 'sentry/utils/url/normalizeUrl';
  5. import {Dataset} from 'sentry/views/alerts/rules/metric/types';
  6. export function getAlertsUrl({
  7. project,
  8. query,
  9. aggregate,
  10. orgSlug,
  11. pageFilters,
  12. name,
  13. }: {
  14. aggregate: string;
  15. orgSlug: string;
  16. pageFilters: PageFilters;
  17. project: Project;
  18. name?: string;
  19. query?: string;
  20. }) {
  21. const statsPeriod = getStatsPeriod(pageFilters);
  22. const environment = pageFilters.environments;
  23. const queryParams = {
  24. aggregate: aggregate,
  25. dataset: Dataset.GENERIC_METRICS,
  26. project: project.slug,
  27. eventTypes: 'transaction',
  28. query,
  29. statsPeriod,
  30. environment,
  31. name,
  32. };
  33. return normalizeUrl(
  34. `/organizations/${orgSlug}/alerts/new/metric/?${qs.stringify(queryParams)}`
  35. );
  36. }
  37. // Alert rules only support 24h, 3d, 7d, 14d periods
  38. function getStatsPeriod(pageFilters: PageFilters) {
  39. const {period} = pageFilters.datetime;
  40. switch (period) {
  41. case '24h':
  42. case '3d':
  43. case '7d':
  44. case '14d':
  45. return period;
  46. default:
  47. return '7d';
  48. }
  49. }