| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- import { useParams } from 'common'
- import Link from 'next/link'
- import {
- Badge,
- Button,
- Input,
- InputGroup,
- InputGroupAddon,
- InputGroupInput,
- Tooltip,
- TooltipContent,
- TooltipTrigger,
- } from 'ui'
- import { Admonition } from 'ui-patterns/admonition'
- import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
- import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
- import { ProjectUpgradeAlert } from '../General/Infrastructure/ProjectUpgradeAlert'
- import {
- ReadReplicasWarning,
- ValidationErrorsWarning,
- ValidationWarningsAdmonition,
- } from './UpgradeWarnings'
- import { NoticeBar } from '@/components/interfaces/DiskManagement/ui/NoticeBar'
- import {
- ScaffoldContainer,
- ScaffoldDivider,
- ScaffoldSection,
- ScaffoldSectionContent,
- ScaffoldSectionDetail,
- } from '@/components/layouts/Scaffold'
- import AlertError from '@/components/ui/AlertError'
- import { useProjectUpgradeEligibilityQuery } from '@/data/config/project-upgrade-eligibility-query'
- import { useProjectServiceVersionsQuery } from '@/data/projects/project-service-versions'
- import { useReadReplicasQuery } from '@/data/read-replicas/replicas-query'
- import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
- import { useIsOrioleDb, useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
- export const InfrastructureInfo = () => {
- const { ref } = useParams()
- const { data: project } = useSelectedProjectQuery()
- const {
- projectAuthAll: authEnabled,
- projectSettingsDatabaseUpgrades: showDatabaseUpgrades,
- databaseReplication: showReplication,
- } = useIsFeatureEnabled([
- 'project_auth:all',
- 'project_settings:database_upgrades',
- 'database:replication',
- ])
- const {
- data,
- error,
- isPending: isLoadingUpgradeEligibility,
- isError: isErrorUpgradeEligibility,
- isSuccess: isSuccessUpgradeEligibility,
- } = useProjectUpgradeEligibilityQuery({
- projectRef: ref,
- })
- const {
- data: serviceVersions,
- error: serviceVersionsError,
- isPending: isLoadingServiceVersions,
- isError: isErrorServiceVersions,
- isSuccess: isSuccessServiceVersions,
- } = useProjectServiceVersionsQuery({ projectRef: ref })
- const { data: databases } = useReadReplicasQuery({ projectRef: ref })
- const { current_app_version, current_app_version_release_channel, latest_app_version } =
- data || {}
- const isOnLatestVersion = current_app_version === latest_app_version
- const currentPgVersion = (current_app_version ?? '')
- .split('briven-postgres-')[1]
- ?.replace('-orioledb', '')
- const isVisibleReleaseChannel =
- current_app_version_release_channel &&
- !['ga', 'withdrawn'].includes(current_app_version_release_channel)
- ? current_app_version_release_channel
- : undefined
- const isOrioleDb = useIsOrioleDb()
- const latestPgVersion = (latest_app_version ?? '').split('briven-postgres-')[1]
- const isInactive = project?.status === 'INACTIVE'
- const hasReadReplicas = (databases ?? []).length > 1
- return (
- <>
- <ScaffoldDivider />
- {project?.cloud_provider !== 'FLY' && showReplication && (
- <ScaffoldContainer>
- <ScaffoldSection isFullWidth>
- <NoticeBar
- visible={true}
- type="default"
- title="Management of read replicas has moved"
- description="Read replicas is now managed under Replication in the Database section."
- actions={
- <Button type="default" asChild>
- <Link href={`/project/${ref}/database/replication`} className="no-underline!">
- Go to Replication
- </Link>
- </Button>
- }
- />
- </ScaffoldSection>
- </ScaffoldContainer>
- )}
- <ScaffoldContainer>
- <ScaffoldSection>
- <ScaffoldSectionDetail>
- <h4 className="text-base capitalize m-0">Service versions</h4>
- <p className="text-foreground-light text-sm pr-8 mt-1">
- Service versions and upgrade eligibility for your provisioned instance.
- </p>
- </ScaffoldSectionDetail>
- <ScaffoldSectionContent>
- {isInactive ? (
- <Admonition
- type="note"
- showIcon={false}
- title="Service versions cannot be retrieved while project is paused"
- description="Restoring the project will update Postgres to the newest version"
- />
- ) : (
- <>
- {/* [Joshen] Double check why we need this waterfall loading behaviour here */}
- {isLoadingUpgradeEligibility && <GenericSkeletonLoader />}
- {isErrorUpgradeEligibility && (
- <AlertError error={error} subject="Failed to retrieve Postgres version" />
- )}
- {isSuccessUpgradeEligibility && (
- <>
- {isLoadingServiceVersions && <GenericSkeletonLoader />}
- {isErrorServiceVersions && (
- <AlertError
- error={serviceVersionsError}
- subject="Failed to retrieve versions"
- />
- )}
- {isSuccessServiceVersions && (
- <>
- {authEnabled && (
- <FormItemLayout
- label="Auth version"
- layout="vertical"
- isReactForm={false}
- >
- <Input readOnly disabled value={serviceVersions?.gotrue ?? ''} />
- </FormItemLayout>
- )}
- <FormItemLayout
- label="PostgREST version"
- layout="vertical"
- isReactForm={false}
- >
- <Input readOnly disabled value={serviceVersions?.postgrest ?? ''} />
- </FormItemLayout>
- <FormItemLayout
- label="Postgres version"
- layout="vertical"
- isReactForm={false}
- >
- <InputGroup>
- <InputGroupInput
- readOnly
- disabled
- value={
- currentPgVersion || serviceVersions?.['briven-postgres'] || ''
- }
- />
- <InputGroupAddon align="inline-end">
- {[
- isVisibleReleaseChannel && (
- <Tooltip key="release-channel">
- <TooltipTrigger>
- <Badge variant="warning" className="mr-1">
- {isVisibleReleaseChannel}
- </Badge>
- </TooltipTrigger>
- <TooltipContent side="bottom" className="w-44 text-center">
- This project uses a {isVisibleReleaseChannel} database version
- release
- </TooltipContent>
- </Tooltip>
- ),
- isOrioleDb && (
- <Tooltip key="orioledb">
- <TooltipTrigger>
- <Badge variant="default" className="mr-1">
- OrioleDB
- </Badge>
- </TooltipTrigger>
- <TooltipContent side="bottom" className="w-44 text-center">
- This project uses OrioleDB
- </TooltipContent>
- </Tooltip>
- ),
- isOnLatestVersion && (
- <Tooltip key="latest-version">
- <TooltipTrigger>
- <Badge variant="success" className="mr-1">
- Latest
- </Badge>
- </TooltipTrigger>
- <TooltipContent side="bottom" className="w-52 text-center">
- Project is on the latest version of Postgres that Briven
- supports
- </TooltipContent>
- </Tooltip>
- ),
- ]}
- </InputGroupAddon>
- </InputGroup>
- </FormItemLayout>
- </>
- )}
- {showDatabaseUpgrades && data && data.eligible ? (
- hasReadReplicas ? (
- <ReadReplicasWarning latestPgVersion={latestPgVersion} />
- ) : (
- <ProjectUpgradeAlert />
- )
- ) : null}
- {showDatabaseUpgrades && data && !data.eligible && (
- <ValidationErrorsWarning validationErrors={data.validation_errors} />
- )}
- {showDatabaseUpgrades && data && data.warnings && (
- <ValidationWarningsAdmonition warnings={data.warnings} />
- )}
- </>
- )}
- </>
- )}
- </ScaffoldSectionContent>
- </ScaffoldSection>
- </ScaffoldContainer>
- </>
- )
- }
|