useQueuesByTransactionQuery.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import type {Sort} from 'sentry/utils/discover/fields';
  2. import {decodeScalar} from 'sentry/utils/queryString';
  3. import {MutableSearch} from 'sentry/utils/tokenizeSearch';
  4. import {useLocation} from 'sentry/utils/useLocation';
  5. import {DEFAULT_QUERY_FILTER} from 'sentry/views/performance/queues/settings';
  6. import {useSpanMetrics} from 'sentry/views/starfish/queries/useDiscover';
  7. import {QueryParameterNames} from 'sentry/views/starfish/views/queryParameters';
  8. type Props = {
  9. destination?: string;
  10. enabled?: boolean;
  11. sort?: Sort;
  12. };
  13. export function useQueuesByTransactionQuery({destination, enabled, sort}: Props) {
  14. const location = useLocation();
  15. const cursor = decodeScalar(location.query?.[QueryParameterNames.TRANSACTIONS_CURSOR]);
  16. const mutableSearch = new MutableSearch(DEFAULT_QUERY_FILTER);
  17. if (destination) {
  18. mutableSearch.addFilterValue('messaging.destination.name', destination);
  19. }
  20. const response = useSpanMetrics(
  21. {
  22. search: mutableSearch,
  23. fields: [
  24. 'transaction',
  25. 'span.op',
  26. 'count()',
  27. 'count_op(queue.publish)',
  28. 'count_op(queue.process)',
  29. 'sum(span.duration)',
  30. 'avg(span.duration)',
  31. 'avg_if(span.duration,span.op,queue.publish)',
  32. 'avg_if(span.duration,span.op,queue.process)',
  33. 'avg(messaging.message.receive.latency)',
  34. 'trace_status_rate(ok)',
  35. 'time_spent_percentage(app,span.duration)',
  36. ],
  37. enabled,
  38. sorts: sort ? [sort] : [],
  39. limit: 10,
  40. cursor,
  41. },
  42. 'api.performance.queues.destination-summary'
  43. );
  44. return response;
  45. }