12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import type {TimeWindowConfig} from 'sentry/components/checkInTimeline/types';
- import {useApiQuery} from 'sentry/utils/queryClient';
- import {useLocation} from 'sentry/utils/useLocation';
- import useOrganization from 'sentry/utils/useOrganization';
- import type {MonitorBucket} from '../types';
- interface Options {
- /**
- * The list of monitor IDs to fetch stats for
- */
- monitors: string[];
- /**
- * The window configuration object
- */
- timeWindowConfig: TimeWindowConfig;
- }
- /**
- * Fetches Monitor stats
- */
- export function useMonitorStats({monitors, timeWindowConfig}: Options) {
- const {start, end, elapsedMinutes, timelineWidth} = timeWindowConfig;
- // Minimum rollup is 1 second
- const rollup = Math.floor((elapsedMinutes * 60) / timelineWidth) || 1;
- const selectionQuery = {
- since: Math.floor(start.getTime() / 1000),
- until: Math.floor(end.getTime() / 1000),
- resolution: `${rollup}s`,
- };
- const organization = useOrganization();
- const location = useLocation();
- const monitorStatsQueryKey = `/organizations/${organization.slug}/monitors-stats/`;
- return useApiQuery<Record<string, MonitorBucket[]>>(
- [
- monitorStatsQueryKey,
- {
- query: {
- monitor: monitors,
- ...selectionQuery,
- ...location.query,
- },
- },
- ],
- {
- staleTime: 0,
- enabled: timelineWidth > 0,
- }
- );
- }
|