metrics.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import type {Client, ResponseMeta} from 'sentry/api';
  2. import {getInterval} from 'sentry/components/charts/utils';
  3. import {normalizeDateTimeParams} from 'sentry/components/organizations/pageFilters/parse';
  4. import type {DateString} from 'sentry/types/core';
  5. import type {Organization, SessionApiResponse} from 'sentry/types/organization';
  6. import {defined} from 'sentry/utils';
  7. export type DoReleaseHealthRequestOptions = {
  8. field: string[];
  9. orgSlug: Organization['slug'];
  10. cursor?: string;
  11. end?: DateString;
  12. environment?: readonly string[];
  13. groupBy?: string[];
  14. includeAllArgs?: boolean;
  15. includeSeries?: number;
  16. includeTotals?: number;
  17. interval?: string;
  18. limit?: number;
  19. orderBy?: string;
  20. project?: readonly number[];
  21. query?: string;
  22. start?: DateString;
  23. statsPeriod?: string | null;
  24. statsPeriodEnd?: string;
  25. statsPeriodStart?: string;
  26. };
  27. export const doReleaseHealthRequest = (
  28. api: Client,
  29. {
  30. field,
  31. orgSlug,
  32. cursor,
  33. environment,
  34. groupBy,
  35. includeSeries,
  36. includeTotals,
  37. interval,
  38. limit,
  39. orderBy,
  40. project,
  41. query,
  42. includeAllArgs = false,
  43. statsPeriodStart,
  44. statsPeriodEnd,
  45. ...dateTime
  46. }: DoReleaseHealthRequestOptions
  47. ): Promise<SessionApiResponse | [SessionApiResponse, string, ResponseMeta]> => {
  48. const {start, end, statsPeriod} = normalizeDateTimeParams(dateTime, {
  49. allowEmptyPeriod: true,
  50. });
  51. const urlQuery = Object.fromEntries(
  52. Object.entries({
  53. field: field.filter(f => !!f),
  54. cursor,
  55. end,
  56. environment,
  57. groupBy: groupBy?.filter(g => !!g),
  58. includeSeries,
  59. includeTotals,
  60. interval: interval || getInterval({start, end, period: statsPeriod}),
  61. query: query || undefined,
  62. per_page: limit,
  63. project,
  64. orderBy,
  65. start,
  66. statsPeriod,
  67. statsPeriodStart,
  68. statsPeriodEnd,
  69. }).filter(([, value]) => defined(value) && value !== '')
  70. );
  71. const pathname = `/organizations/${orgSlug}/metrics/data/`;
  72. return api.requestPromise(pathname, {includeAllArgs, query: urlQuery});
  73. };