throughputChart.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import {DEFAULT_RELATIVE_PERIODS} from 'sentry/constants';
  2. import {CHART_PALETTE} from 'sentry/constants/chartPalette';
  3. import {t} from 'sentry/locale';
  4. import {decodeScalar} from 'sentry/utils/queryString';
  5. import {useLocation} from 'sentry/utils/useLocation';
  6. import usePageFilters from 'sentry/utils/usePageFilters';
  7. import {CHART_HEIGHT} from 'sentry/views/performance/database/settings';
  8. import {useQueuesTimeSeriesQuery} from 'sentry/views/performance/queues/queries/useQueuesTimeSeriesQuery';
  9. import Chart, {ChartType} from 'sentry/views/starfish/components/chart';
  10. import ChartPanel from 'sentry/views/starfish/components/chartPanel';
  11. interface Props {
  12. error?: Error | null;
  13. }
  14. export function ThroughputChart({error}: Props) {
  15. const {query} = useLocation();
  16. const destination = decodeScalar(query.destination);
  17. const pageFilters = usePageFilters();
  18. const period = pageFilters.selection.datetime.period;
  19. const chartSubtext = (period && DEFAULT_RELATIVE_PERIODS[period]) ?? '';
  20. const {data, isLoading} = useQueuesTimeSeriesQuery({destination});
  21. return (
  22. <ChartPanel title={t('Published vs Processed')} subtitle={chartSubtext}>
  23. <Chart
  24. height={CHART_HEIGHT}
  25. grid={{
  26. left: '0',
  27. right: '0',
  28. top: '12px',
  29. bottom: '0',
  30. }}
  31. data={
  32. [
  33. {
  34. seriesName: t('Published'),
  35. data: data['count_op(queue.submit.celery)'].data,
  36. },
  37. {
  38. seriesName: t('Processed'),
  39. data: data['count_op(queue.task.celery)'].data,
  40. },
  41. ] ?? []
  42. }
  43. loading={isLoading}
  44. error={error}
  45. chartColors={CHART_PALETTE[2].slice(1, 3)}
  46. type={ChartType.LINE}
  47. />
  48. </ChartPanel>
  49. );
  50. }