import React, {Fragment} from 'react'; import {browserHistory} from 'react-router'; import styled from '@emotion/styled'; import Alert from 'sentry/components/alert'; import Breadcrumbs from 'sentry/components/breadcrumbs'; import FloatingFeedbackWidget from 'sentry/components/feedback/widget/floatingFeedbackWidget'; import * as Layout from 'sentry/components/layouts/thirds'; import {DatePageFilter} from 'sentry/components/organizations/datePageFilter'; import {EnvironmentPageFilter} from 'sentry/components/organizations/environmentPageFilter'; import PageFilterBar from 'sentry/components/organizations/pageFilterBar'; import {ProjectPageFilter} from 'sentry/components/organizations/projectPageFilter'; import SearchBar from 'sentry/components/searchBar'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import {decodeScalar} from 'sentry/utils/queryString'; import {useLocation} from 'sentry/utils/useLocation'; import useOrganization from 'sentry/utils/useOrganization'; import {normalizeUrl} from 'sentry/utils/withDomainRequired'; import {useOnboardingProject} from 'sentry/views/performance/browser/webVitals/utils/useOnboardingProject'; import {DurationChart} from 'sentry/views/performance/database/durationChart'; import {ModulePageProviders} from 'sentry/views/performance/database/modulePageProviders'; import {NoDataMessage} from 'sentry/views/performance/database/noDataMessage'; import {ThroughputChart} from 'sentry/views/performance/database/throughputChart'; import {useSelectedDurationAggregate} from 'sentry/views/performance/database/useSelectedDurationAggregate'; import Onboarding from 'sentry/views/performance/onboarding'; import {useSynchronizeCharts} from 'sentry/views/starfish/components/chart'; import {useSpanMetricsSeries} from 'sentry/views/starfish/queries/useSpanMetricsSeries'; import {ModuleName, SpanMetricsField} from 'sentry/views/starfish/types'; import {QueryParameterNames} from 'sentry/views/starfish/views/queryParameters'; import {ActionSelector} from 'sentry/views/starfish/views/spans/selectors/actionSelector'; import {DomainSelector} from 'sentry/views/starfish/views/spans/selectors/domainSelector'; import SpansTable from 'sentry/views/starfish/views/spans/spansTable'; import {useModuleFilters} from 'sentry/views/starfish/views/spans/useModuleFilters'; import {useModuleSort} from 'sentry/views/starfish/views/spans/useModuleSort'; export function DatabaseLandingPage() { const organization = useOrganization(); const moduleName = ModuleName.DB; const location = useLocation(); const onboardingProject = useOnboardingProject(); const [selectedAggregate] = useSelectedDurationAggregate(); const spanDescription = decodeScalar(location.query?.['span.description'], ''); const moduleFilters = useModuleFilters(); const sort = useModuleSort(QueryParameterNames.SPANS_SORT); const handleSearch = (newQuery: string) => { browserHistory.push({ ...location, query: { ...location.query, 'span.description': newQuery === '' ? undefined : newQuery, [QueryParameterNames.SPANS_CURSOR]: undefined, }, }); }; const filters = { 'span.module': ModuleName.DB, }; const {isLoading: isThroughputDataLoading, data: throughputData} = useSpanMetricsSeries( filters, ['spm()'], 'api.starfish.span-landing-page-metrics-chart' ); const {isLoading: isDurationDataLoading, data: durationData} = useSpanMetricsSeries( filters, [`${selectedAggregate}(${SpanMetricsField.SPAN_SELF_TIME})`], 'api.starfish.span-landing-page-metrics-chart' ); useSynchronizeCharts([!isThroughputDataLoading && !isDurationDataLoading]); return ( {t('Queries')} {!onboardingProject && } {onboardingProject && ( )} {!onboardingProject && ( )} ); } const PaddedContainer = styled('div')` margin-bottom: ${space(2)}; `; const ChartContainer = styled('div')` display: grid; gap: ${space(2)}; grid-template-columns: 1fr 1fr; `; function AlertBanner(props) { return ; } const FilterOptionsContainer = styled('div')` display: grid; grid-template-columns: repeat(3, 1fr); gap: ${space(2)}; margin-bottom: ${space(2)}; max-width: 800px; `; const SearchBarContainer = styled('div')` margin-bottom: ${space(2)}; `; const LIMIT: number = 25; function LandingPageWithProviders() { return ( ); } export default LandingPageWithProviders;