diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/engine-contract-subscription.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/engine-contract-subscription.tsx index 7a9a820aaa5..4aae1cdca5b 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/engine-contract-subscription.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/engine-contract-subscription.tsx @@ -27,9 +27,9 @@ export function EngineContractSubscriptions({ return (
{/* Header */} -
+
-

+

Contract Subscriptions

diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx index f2a508ffc08..f6e1e42e011 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx @@ -1,10 +1,8 @@ "use client"; -import { Card } from "chakra/card"; -import { Heading } from "chakra/heading"; -import { Text } from "chakra/text"; -import { ChartAreaIcon, InfoIcon } from "lucide-react"; -import { Spinner } from "@/components/ui/Spinner/Spinner"; +import { CircleAlertIcon } from "lucide-react"; +import { GenericLoadingPage } from "@/components/blocks/skeletons/GenericLoadingPage"; +import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { type EngineInstance, @@ -15,19 +13,17 @@ import { ErrorRate } from "./ErrorRate"; import { Healthcheck } from "./Healthcheck"; import { StatusCodes } from "./StatusCodes"; -interface EngineStatusProps { - instance: EngineInstance; - teamSlug: string; - projectSlug: string; - authToken: string; -} - -export const EngineSystemMetrics: React.FC = ({ +export function EngineSystemMetrics({ instance, teamSlug, projectSlug, authToken, -}) => { +}: { + instance: EngineInstance; + teamSlug: string; + projectSlug: string; + authToken: string; +}) { const systemMetricsQuery = useEngineSystemMetrics( instance.id, teamSlug, @@ -39,58 +35,54 @@ export const EngineSystemMetrics: React.FC = ({ pollInterval: 10_000, }); - let systemMetricsPanel = ; + let systemMetricsPanel = ; if (!systemMetricsQuery.data || systemMetricsQuery.isError) { systemMetricsPanel = ( - -

-
- - - System metrics are unavailable for self-hosted Engine. - -
- +
+

+ System Metrics +

+ + + + + System metrics are not available for self-hosted Engine + + Upgrade to a{" "} Engine instance managed by thirdweb {" "} - to view these metrics. - -
- + to view system metrics + + +
); } else { systemMetricsPanel = ( - -
-
- - System Metrics -
+
+
+

+ System Metrics +

+ +
-
- -
+
- +
); } - let queueMetricsPanel = ( -
- -
- ); + let queueMetricsPanel = ; if ( !queueMetricsQuery.isPending && @@ -108,43 +100,39 @@ export const EngineSystemMetrics: React.FC = ({ const msToMine = queueMetricsQuery.data.result.latency?.msToMine; queueMetricsPanel = ( - -
-
- Queue Metrics -
+
+

+ Queue Metrics +

-
-
-

Queued

-

{numQueued}

-
-
-

Pending

-

{numPending}

-
+
+ + - {msToSend && ( -
-

Time to send

-

+ {msToSend && ( + p50 {(msToSend.p50 / 1000).toFixed(2)}s, p90{" "} {(msToSend.p90 / 1000).toFixed(2)}s -

-
- )} - {msToMine && ( -
-

Time to mine

-

+ + } + /> + )} + {msToMine && ( + p50 {(msToMine.p50 / 1000).toFixed(2)}s, p90{" "} {(msToMine.p90 / 1000).toFixed(2)}s -

-
- )} -
+ + } + /> + )}
- +
); } @@ -154,4 +142,19 @@ export const EngineSystemMetrics: React.FC = ({ {queueMetricsPanel}
); -}; +} + +function MetricRow({ + label, + value, +}: { + label: string; + value: React.ReactNode; +}) { + return ( +
+

{label}

+

{value}

+
+ ); +} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/Healthcheck.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/Healthcheck.tsx index ff2a21a765a..4056fe2e06e 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/Healthcheck.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/Healthcheck.tsx @@ -1,6 +1,5 @@ "use client"; -import { PrimaryInfoItem } from "app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/primary-info-item"; import { Skeleton } from "@/components/ui/skeleton"; import { ToolTipLabel } from "@/components/ui/tooltip"; import { type EngineInstance, useEngineSystemHealth } from "@/hooks/useEngine"; @@ -9,35 +8,25 @@ export function Healthcheck({ instance }: { instance: EngineInstance }) { const query = useEngineSystemHealth(instance.url, 5_000); return ( - <> - {/* Engine Reachability */} - }> -
- {query.isSuccess ? ( - -
Reachable
-
- ) : query.isError ? ( - -
Not Reachable
-
- ) : ( -
- -
- )} -
-
- +
+ + {query.isSuccess ? ( +
Reachable
+ ) : query.isError ? ( +
Not Reachable
+ ) : ( + + )} +
); } function PulseDot() { return ( - + - + );