useQueuesByTransactionQuery.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {decodeScalar} from 'sentry/utils/queryString';
  2. import {MutableSearch} from 'sentry/utils/tokenizeSearch';
  3. import {useLocation} from 'sentry/utils/useLocation';
  4. import {DEFAULT_QUERY_FILTER} from 'sentry/views/performance/queues/settings';
  5. import {useSpanMetrics} from 'sentry/views/starfish/queries/useSpanMetrics';
  6. import {QueryParameterNames} from 'sentry/views/starfish/views/queryParameters';
  7. type Props = {
  8. destination?: string;
  9. enabled?: boolean;
  10. };
  11. export function useQueuesByTransactionQuery({destination, enabled}: Props) {
  12. const location = useLocation();
  13. const cursor = decodeScalar(location.query?.[QueryParameterNames.TRANSACTIONS_CURSOR]);
  14. const mutableSearch = new MutableSearch(DEFAULT_QUERY_FILTER);
  15. if (destination) {
  16. // TODO: This should filter by destination, not transaction.
  17. // We are using transaction for now as a proxy to demo some functionality until destination becomes a filterable tag.
  18. mutableSearch.addFilterValue('transaction', destination);
  19. }
  20. const response = useSpanMetrics({
  21. search: mutableSearch,
  22. fields: [
  23. 'transaction',
  24. 'count()',
  25. 'count_op(queue.submit.celery)',
  26. 'count_op(queue.task.celery)',
  27. 'sum(span.self_time)',
  28. 'avg(span.self_time)',
  29. 'avg_if(span.self_time,span.op,queue.submit.celery)',
  30. 'avg_if(span.self_time,span.op,queue.task.celery)',
  31. ],
  32. enabled,
  33. sorts: [],
  34. limit: 10,
  35. cursor,
  36. referrer: 'api.performance.queues.destination-summary',
  37. });
  38. return response;
  39. }