useTransactionDurationSeries.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import keyBy from 'lodash/keyBy';
  2. import type {Series} from 'sentry/types/echarts';
  3. import {DiscoverDatasets} from 'sentry/utils/discover/types';
  4. import {MutableSearch} from 'sentry/utils/tokenizeSearch';
  5. import usePageFilters from 'sentry/utils/usePageFilters';
  6. import {getSeriesEventView} from 'sentry/views/starfish/queries/getSeriesEventView';
  7. import type {MetricTimeseriesRow} from 'sentry/views/starfish/queries/useSpanMetricsSeries';
  8. import {useWrappedDiscoverTimeseriesQuery} from 'sentry/views/starfish/utils/useSpansQuery';
  9. // TODO - this is pretty much the same as `useSpanMetricsSeries`, we should probably consider making useMetricsSeries later on
  10. export const useTransactionDurationSeries = (options: {
  11. referrer: string;
  12. transactionName: string;
  13. enabled?: boolean;
  14. }) => {
  15. const pageFilters = usePageFilters();
  16. const {transactionName, referrer} = options;
  17. const filters = {
  18. transaction: transactionName,
  19. };
  20. const yAxis = ['avg(transaction.duration)'];
  21. const eventView = getSeriesEventView(
  22. MutableSearch.fromQueryObject(filters),
  23. undefined,
  24. pageFilters.selection,
  25. yAxis,
  26. undefined,
  27. DiscoverDatasets.METRICS
  28. );
  29. const result = useWrappedDiscoverTimeseriesQuery<MetricTimeseriesRow[]>({
  30. eventView,
  31. initialData: [],
  32. referrer,
  33. enabled: options.enabled,
  34. });
  35. const parsedData = keyBy(
  36. yAxis.map(seriesName => {
  37. const series: Series = {
  38. seriesName,
  39. data: (result?.data ?? []).map(datum => ({
  40. value: datum[seriesName],
  41. name: datum?.interval,
  42. })),
  43. };
  44. return series;
  45. }),
  46. 'seriesName'
  47. ) as Record<'avg(transaction.duration)', Series>;
  48. return {...result, data: parsedData};
  49. };