1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import styled from '@emotion/styled';
- import {t} from 'sentry/locale';
- import type {DataCategoryInfo, Organization} from 'sentry/types';
- import {Outcome} from 'sentry/types';
- import {useApiQuery} from 'sentry/utils/queryClient';
- import type {UsageSeries} from './types';
- import {formatUsageWithUnits, getFormatUsageOptions} from './utils';
- type Props = {
- dataCategory: DataCategoryInfo['plural'];
- organization: Organization;
- projectIds: number[];
- };
- function UsageStatsPerMin({dataCategory, organization, projectIds}: Props) {
- const {
- data: orgStats,
- isLoading,
- isError,
- } = useApiQuery<UsageSeries>(
- [
- `/organizations/${organization.slug}/stats_v2/`,
- {
- query: {
- statsPeriod: '5m',
- interval: '1m',
- groupBy: ['category', 'outcome'],
- project: projectIds,
- field: ['sum(quantity)'],
- },
- },
- ],
- {
- staleTime: 0,
- }
- );
- if (isLoading || isError || !orgStats || orgStats.intervals.length === 0) {
- return null;
- }
- const minuteData = (): string | undefined => {
-
-
- const {intervals, groups} = orgStats;
- const lastMin = Math.max(intervals.length - 2, 0);
- const eventsLastMin = groups.reduce((count, group) => {
- const {outcome, category} = group.by;
-
- if (!dataCategory.includes(`${category}`) || outcome !== Outcome.ACCEPTED) {
- return count;
- }
- count += group.series['sum(quantity)'][lastMin];
- return count;
- }, 0);
- return formatUsageWithUnits(
- eventsLastMin,
- dataCategory,
- getFormatUsageOptions(dataCategory)
- );
- };
- return (
- <Wrapper>
- {minuteData()} {t('in last min')}
- </Wrapper>
- );
- }
- export default UsageStatsPerMin;
- const Wrapper = styled('div')`
- display: inline-block;
- color: ${p => p.theme.success};
- font-size: ${p => p.theme.fontSizeMedium};
- `;
|