ProjectUpgradeFailedBanner.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { SupportCategories } from '@supabase/shared-types/out/constants'
  2. import { DatabaseUpgradeStatus } from '@supabase/shared-types/out/events'
  3. import { useParams } from 'common'
  4. import dayjs from 'dayjs'
  5. import { Button } from 'ui'
  6. import { Admonition } from 'ui-patterns'
  7. import { InlineLink } from './InlineLink'
  8. import { SupportLink } from '@/components/interfaces/Support/SupportLink'
  9. import { useProjectUpgradingStatusQuery } from '@/data/config/project-upgrade-status-query'
  10. import { IS_PLATFORM } from '@/lib/constants'
  11. import { guessLocalTimezone } from '@/lib/dayjs'
  12. // [Joshen] Think twice about the category though - it doesn't correspond
  13. export const ProjectUpgradeFailedBanner = () => {
  14. const { ref } = useParams()
  15. const { data } = useProjectUpgradingStatusQuery({ projectRef: ref }, { enabled: IS_PLATFORM })
  16. const { status, initiated_at, latest_status_at, error } = data?.databaseUpgradeStatus ?? {}
  17. const isFailed = status === DatabaseUpgradeStatus.Failed
  18. const initiatedAt = dayjs
  19. .utc(initiated_at ?? 0)
  20. .tz(guessLocalTimezone())
  21. .format('DD MMM YYYY HH:mm:ss')
  22. const subject = 'Upgrade failed for project'
  23. const message = `Upgrade information:\n• Initiated at: ${initiated_at}\n• Error: ${error}`
  24. const initiatedAtEncoded = encodeURIComponent(
  25. dayjs.utc(initiated_at ?? 0).format('YYYY-MM-DDTHH:mm:ss')
  26. )
  27. const latestStatusAtEncoded = encodeURIComponent(
  28. dayjs
  29. .utc(latest_status_at ?? 0)
  30. .utcOffset(0)
  31. .format('YYYY-MM-DDTHH:mm:ss')
  32. )
  33. const timestampFilter = `its=${initiatedAtEncoded}&ite=${latestStatusAtEncoded}`
  34. if (!isFailed) return null
  35. return (
  36. <div className="max-w-7xl">
  37. <Admonition
  38. type="warning"
  39. title={`Postgres version upgrade was not successful (Initiated at ${initiatedAt})`}
  40. actions={
  41. <Button asChild type="default">
  42. <SupportLink
  43. queryParams={{
  44. category: SupportCategories.DATABASE_UNRESPONSIVE,
  45. projectRef: ref,
  46. subject,
  47. message,
  48. }}
  49. >
  50. Contact support
  51. </SupportLink>
  52. </Button>
  53. }
  54. >
  55. <div>
  56. Your project and its data are not affected. Please reach out to us via our support form
  57. for assistance with the upgrade.
  58. </div>
  59. <div>
  60. You may also view logs related to the failed upgrade in your{' '}
  61. <InlineLink href={`/project/${ref}/logs/pg-upgrade-logs?${timestampFilter}`}>
  62. project's logs
  63. </InlineLink>
  64. .
  65. </div>
  66. </Admonition>
  67. </div>
  68. )
  69. }