123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import {useState} from 'react';
- import styled from '@emotion/styled';
- import Feature from 'sentry/components/acl/feature';
- import {Alert} from 'sentry/components/alert';
- import * as Layout from 'sentry/components/layouts/thirds';
- import NoProjectMessage from 'sentry/components/noProjectMessage';
- import PageFiltersContainer from 'sentry/components/organizations/pageFilters/container';
- import {t} from 'sentry/locale';
- import {space} from 'sentry/styles/space';
- import useOrganization from 'sentry/utils/useOrganization';
- import AiAnalyticsFilters from 'sentry/views/aiAnalytics/filters';
- import TokenUsageChart from 'sentry/views/aiAnalytics/tokenUsageChart';
- function NoAccessComponent() {
- return (
- <Layout.Page withPadding>
- <Alert type="warning">{t("You don't have access to this feature")}</Alert>
- </Layout.Page>
- );
- }
- function AiAnalyticsContainer() {
- const [search, setSearch] = useState('');
- const organization = useOrganization();
- return (
- <Feature
- features="ai-analytics"
- organization={organization}
- renderDisabled={NoAccessComponent}
- >
- <NoProjectMessage organization={organization}>
- <Layout.Page>
- <StyledBody>
- <StyledMain>
- <PageFiltersContainer>
- <AiAnalyticsFilters onSearch={x => setSearch(x)} query={search} />
- </PageFiltersContainer>
- <TwoColumns>
- <TokenUsageChart metric="ai.prompt_tokens.used" />
- <TokenUsageChart metric="ai.completion_tokens.used" />
- </TwoColumns>
- </StyledMain>
- </StyledBody>
- </Layout.Page>
- </NoProjectMessage>
- </Feature>
- );
- }
- const StyledBody = styled('div')`
- background-color: ${p => p.theme.background};
- flex: 1;
- display: grid;
- gap: 0;
- padding: 0;
- grid-template-rows: 1fr;
- grid-template-columns: minmax(0, 1fr) auto;
- grid-template-areas: 'content saved-searches';
- `;
- const TwoColumns = styled('div')`
- display: flex;
- gap: ${space(2)};
- `;
- const StyledMain = styled('section')`
- grid-area: content;
- padding: ${space(2)};
- @media (min-width: ${p => p.theme.breakpoints.medium}) {
- padding: ${space(3)} ${space(4)};
- }
- `;
- export default AiAnalyticsContainer;
|