releases.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import omit from 'lodash/omit';
  2. import {MetricsApiResponse, SessionApiResponse} from 'sentry/types';
  3. import {Series} from 'sentry/types/echarts';
  4. import {TableData} from 'sentry/utils/discover/discoverQuery';
  5. import {getFieldRenderer} from 'sentry/utils/discover/fieldRenderers';
  6. import {WidgetQuery} from '../types';
  7. import {resolveDerivedStatusFields} from '../widgetCard/releaseWidgetQueries';
  8. import {
  9. changeObjectValuesToTypes,
  10. getDerivedMetrics,
  11. mapDerivedMetricsToFields,
  12. } from '../widgetCard/transformSessionsResponseToTable';
  13. import {DatasetConfig} from './base';
  14. export const ReleasesConfig: DatasetConfig<
  15. SessionApiResponse | MetricsApiResponse,
  16. SessionApiResponse | MetricsApiResponse
  17. > = {
  18. getCustomFieldRenderer: (field, meta) => getFieldRenderer(field, meta, false),
  19. transformSeries: (_data: SessionApiResponse | MetricsApiResponse) => {
  20. return [] as Series[];
  21. },
  22. transformTable: transformSessionsResponseToTable,
  23. };
  24. export function transformSessionsResponseToTable(
  25. data: SessionApiResponse | MetricsApiResponse,
  26. widgetQuery: WidgetQuery
  27. ): TableData {
  28. const useSessionAPI = widgetQuery.columns.includes('session.status');
  29. const {derivedStatusFields, injectedFields} = resolveDerivedStatusFields(
  30. widgetQuery.aggregates,
  31. useSessionAPI
  32. );
  33. const rows = data.groups.map((group, index) => ({
  34. id: String(index),
  35. ...mapDerivedMetricsToFields(group.by),
  36. // if `sum(session)` or `count_unique(user)` are not
  37. // requested as a part of the payload for
  38. // derived status metrics through the Sessions API,
  39. // they are injected into the payload and need to be
  40. // stripped.
  41. ...omit(mapDerivedMetricsToFields(group.totals), injectedFields),
  42. // if session.status is a groupby, some post processing
  43. // is needed to calculate the status derived metrics
  44. // from grouped results of `sum(session)` or `count_unique(user)`
  45. ...getDerivedMetrics(group.by, group.totals, derivedStatusFields),
  46. }));
  47. const singleRow = rows[0];
  48. const meta = {
  49. ...changeObjectValuesToTypes(omit(singleRow, 'id')),
  50. };
  51. return {meta, data: rows};
  52. }