12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import {getInterval} from 'sentry/components/charts/utils';
- import type {Series} from 'sentry/types/echarts';
- import type {MetaType} from 'sentry/utils/discover/eventView';
- import EventView from 'sentry/utils/discover/eventView';
- import type {DiscoverQueryProps} from 'sentry/utils/discover/genericDiscoverQuery';
- import {useGenericDiscoverQuery} from 'sentry/utils/discover/genericDiscoverQuery';
- import {DiscoverDatasets} from 'sentry/utils/discover/types';
- import {MutableSearch} from 'sentry/utils/tokenizeSearch';
- import {useLocation} from 'sentry/utils/useLocation';
- import useOrganization from 'sentry/utils/useOrganization';
- import usePageFilters from 'sentry/utils/usePageFilters';
- type Props = {
- element: string;
- operation: string;
- page: string;
- };
- export const useInteractionBreakdownTimeseriesQuery = ({
- operation,
- element,
- page,
- }: Props): {data: Series[]; isLoading: boolean} => {
- const pageFilters = usePageFilters();
- const location = useLocation();
- const organization = useOrganization();
- const search = new MutableSearch(
- `transaction.op:${operation} transaction:${page} interactionElement:${element}`
- );
- const projectTimeSeriesEventView = EventView.fromNewQueryWithPageFilters(
- {
- yAxis: [`p75(transaction.duration)`],
- name: 'Interaction Duration',
- query: search.formatString(),
- version: 2,
- fields: [],
- interval: getInterval(pageFilters.selection.datetime, 'low'),
- dataset: DiscoverDatasets.DISCOVER,
- },
- pageFilters.selection
- );
- const result = useGenericDiscoverQuery<
- {
- data: any[];
- meta: MetaType;
- },
- DiscoverQueryProps
- >({
- route: 'events-stats',
- eventView: projectTimeSeriesEventView,
- location,
- orgSlug: organization.slug,
- getRequestPayload: () => ({
- ...projectTimeSeriesEventView.getEventsAPIPayload(location),
- yAxis: projectTimeSeriesEventView.yAxis,
- topEvents: projectTimeSeriesEventView.topEvents,
- excludeOther: 0,
- partial: 1,
- orderby: undefined,
- interval: projectTimeSeriesEventView.interval,
- }),
- options: {
- enabled: pageFilters.isReady,
- refetchOnWindowFocus: false,
- },
- });
- const seriesData: Series = {
- seriesName: 'p75(duration)',
- data: [],
- };
- const transformedData = result?.data?.data.map(data => ({
- name: data[0] as string,
- value: data[1][0].count,
- }));
- seriesData.data = transformedData ?? [];
- return {data: [seriesData], isLoading: result.isLoading};
- };
|