diff --git a/site/src/pages/HealthPage/HealthLayout.tsx b/site/src/pages/HealthPage/HealthLayout.tsx
index 2c566500d892b..33ca8cbe31a17 100644
--- a/site/src/pages/HealthPage/HealthLayout.tsx
+++ b/site/src/pages/HealthPage/HealthLayout.tsx
@@ -7,6 +7,7 @@ import IconButton from "@mui/material/IconButton";
import Tooltip from "@mui/material/Tooltip";
import { health, refreshHealth } from "api/queries/debug";
import type { HealthSeverity } from "api/typesGenerated";
+import { ErrorAlert } from "components/Alert/ErrorAlert";
import { Loader } from "components/Loader/Loader";
import { type ClassName, useClassName } from "hooks/useClassName";
import kebabCase from "lodash/fp/kebabCase";
@@ -22,7 +23,11 @@ import { HealthIcon } from "./Content";
export const HealthLayout: FC = () => {
const theme = useTheme();
const queryClient = useQueryClient();
- const { data: healthStatus } = useQuery({
+ const {
+ data: healthStatus,
+ isLoading,
+ error,
+ } = useQuery({
...health(),
refetchInterval: 30_000,
});
@@ -42,161 +47,171 @@ export const HealthLayout: FC = () => {
const link = useClassName(classNames.link, []);
const activeLink = useClassName(classNames.activeLink, []);
+ if (isLoading || !healthStatus) {
+ return (
+
+
+
+ );
+ }
+
+ if (error) {
+ return (
+
+
+
+ );
+ }
+
return (
<>
{pageTitle("Health")}
- {healthStatus ? (
-
+
+
-
-
-
-
-
-
- {
- forceRefresh();
- }}
- >
- {isRefreshing ? (
-
- ) : (
-
- )}
-
-
-
-
- {healthStatus.healthy ? "Healthy" : "Unhealthy"}
-
-
- {healthStatus.healthy
- ? Object.keys(visibleSections).some((key) => {
- const section =
- healthStatus[key as keyof typeof visibleSections];
- return (
- section.warnings && section.warnings.length > 0
- );
- })
- ? "All systems operational, but performance might be degraded"
- : "All systems operational"
- : "Some issues have been detected"}
-
-
+
+
+
-
- Last check
-
- {createDayString(healthStatus.time)}
-
+
+ {
+ forceRefresh();
+ }}
+ >
+ {isRefreshing ? (
+
+ ) : (
+
+ )}
+
+
-
-
-
Version
-
- {healthStatus.coder_version}
-
+
+ {healthStatus.healthy ? "Healthy" : "Unhealthy"}
+
+
+ {healthStatus.healthy
+ ? Object.keys(visibleSections).some((key) => {
+ const section =
+ healthStatus[key as keyof typeof visibleSections];
+ return section.warnings && section.warnings.length > 0;
+ })
+ ? "All systems operational, but performance might be degraded"
+ : "All systems operational"
+ : "Some issues have been detected"}
-
- {Object.entries(visibleSections)
- .sort()
- .map(([key, label]) => {
- const healthSection =
- healthStatus[key as keyof typeof visibleSections];
-
- return (
-
- cx([link, isActive && activeLink])
- }
- >
-
- {label}
- {healthSection.dismissed && (
-
- )}
-
- );
- })}
-
-
+
+ Last check
+
+ {createDayString(healthStatus.time)}
+
+
-
-
}>
-
-
+
+ Version
+
+ {healthStatus.coder_version}
+
+
+
+
+ {Object.entries(visibleSections)
+ .sort()
+ .map(([key, label]) => {
+ const healthSection =
+ healthStatus[key as keyof typeof visibleSections];
+
+ return (
+
+ cx([link, isActive && activeLink])
+ }
+ >
+
+ {label}
+ {healthSection.dismissed && (
+
+ )}
+
+ );
+ })}
+
-
- ) : (
-
- )}
+
+
+ }>
+
+
+
+
+
>
);
};
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy