transformEventsResponseToSeries.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import type {Series} from 'sentry/types/echarts';
  2. import type {
  3. EventsStats,
  4. GroupedMultiSeriesEventsStats,
  5. MultiSeriesEventsStats,
  6. } from 'sentry/types/organization';
  7. import type {SeriesWithOrdering} from '../datasetConfig/errorsAndTransactions';
  8. import type {WidgetQuery} from '../types';
  9. import {transformSeries} from '../widgetCard/widgetQueries';
  10. import {
  11. isEventsStats,
  12. isGroupedMultiSeriesEventsStats,
  13. isMultiSeriesEventsStats,
  14. } from './isEventsStats';
  15. export function transformEventsResponseToSeries(
  16. data: EventsStats | MultiSeriesEventsStats | GroupedMultiSeriesEventsStats,
  17. widgetQuery: WidgetQuery
  18. ): Series[] {
  19. const seriesWithOrdering: SeriesWithOrdering[] = [];
  20. const queryAlias = widgetQuery.name;
  21. if (isEventsStats(data)) {
  22. const field = widgetQuery.aggregates[0]!;
  23. const prefixedName = queryAlias ? `${queryAlias} : ${field}` : field;
  24. seriesWithOrdering.push([0, transformSeries(data, prefixedName, field)]);
  25. } else if (isMultiSeriesEventsStats(data)) {
  26. Object.keys(data).forEach(seriesName => {
  27. const seriesData = data[seriesName]!;
  28. const prefixedName = queryAlias ? `${queryAlias} : ${seriesName}` : seriesName;
  29. seriesWithOrdering.push([
  30. seriesData.order ?? 0,
  31. transformSeries(seriesData, prefixedName, seriesName),
  32. ]);
  33. });
  34. } else if (isGroupedMultiSeriesEventsStats(data)) {
  35. Object.keys(data).forEach(groupName => {
  36. const groupData = data[groupName] as MultiSeriesEventsStats;
  37. Object.keys(groupData).forEach(seriesName => {
  38. if (seriesName === 'order') {
  39. // `order` is a special key on grouped responses, we can skip over it
  40. return;
  41. }
  42. const seriesData = groupData[seriesName] as EventsStats;
  43. const prefixedName = queryAlias
  44. ? `${queryAlias} > ${groupName} : ${seriesName}`
  45. : `${groupName} : ${seriesName}`;
  46. seriesWithOrdering.push([
  47. (groupData.order as unknown as number) ?? 0,
  48. transformSeries(seriesData, prefixedName, seriesName),
  49. ]);
  50. });
  51. });
  52. }
  53. return seriesWithOrdering
  54. .toSorted((itemA, itemB) => itemA[0] - itemB[0])
  55. .map(item => item[1]);
  56. }