diff --git a/web/components/stream-health-overview.tsx b/web/components/stream-health-overview.tsx
new file mode 100644
index 000000000..55ad5435d
--- /dev/null
+++ b/web/components/stream-health-overview.tsx
@@ -0,0 +1,65 @@
+import { CheckCircleOutlined, ExclamationCircleOutlined } from '@ant-design/icons';
+import { Alert, Button, Col, Row, Statistic } from 'antd';
+import Link from 'next/link';
+import React, { useContext } from 'react';
+import { ServerStatusContext } from '../utils/server-status-context';
+
+export default function StreamHealthOverview() {
+ const serverStatusData = useContext(ServerStatusContext);
+ const { health } = serverStatusData;
+
+ if (!health) {
+ return null;
+ }
+
+ const { healthy, healthPercentage, message } = health;
+ console.log(healthPercentage);
+ let color = '#3f8600';
+ let icon: 'success' | 'info' | 'warning' | 'error' = 'info';
+ if (healthPercentage < 80) {
+ color = '#cf000f';
+ icon = 'error';
+ } else if (healthPercentage < 30) {
+ color = '#f0ad4e';
+ icon = 'error';
+ }
+
+ return (
+
+
+
+ : }
+ />
+
+
+
+
+
+
+
+
+
+
+ }
+ />
+
+
+
+ );
+}
diff --git a/web/pages/index.tsx b/web/pages/index.tsx
index 18b53a5ef..36014bf14 100644
--- a/web/pages/index.tsx
+++ b/web/pages/index.tsx
@@ -5,6 +5,7 @@ import { formatDistanceToNow, formatRelative } from 'date-fns';
import { ServerStatusContext } from '../utils/server-status-context';
import LogTable from '../components/log-table';
import Offline from '../components/offline-notice';
+import StreamHealthOverview from '../components/stream-health-overview';
import { LOGS_WARN, fetchData, FETCH_INTERVAL } from '../utils/apis';
import { formatIPAddress, isEmptyObject } from '../utils/format';
@@ -132,6 +133,7 @@ export default function Home() {
/>
+
@@ -165,6 +167,7 @@ export default function Home() {
/>
+
diff --git a/web/types/config-section.ts b/web/types/config-section.ts
index 65df5b9bb..7d6efe349 100644
--- a/web/types/config-section.ts
+++ b/web/types/config-section.ts
@@ -125,6 +125,12 @@ export interface NotificationsConfig {
twitter: TwitterNotification;
}
+export interface Health {
+ healthy: boolean;
+ healthyPercentage: number;
+ message: string;
+}
+
export interface ConfigDetails {
externalActions: ExternalAction[];
ffmpegPath: string;
diff --git a/web/utils/server-status-context.tsx b/web/utils/server-status-context.tsx
index 3ae66f36f..77d554c07 100644
--- a/web/utils/server-status-context.tsx
+++ b/web/utils/server-status-context.tsx
@@ -89,6 +89,11 @@ const initialServerStatusState = {
versionNumber: '0.0.0',
streamTitle: '',
chatDisabled: false,
+ health: {
+ healthy: true,
+ healthPercentage: 100,
+ message: '',
+ },
};
export const ServerStatusContext = React.createContext({