"use client"; import useSWR from "swr"; import { BasicTable } from "@/components/admin/connectors/BasicTable"; import { LoadingAnimation } from "@/components/Loading"; import { timeAgo } from "@/lib/time"; import { NotebookIcon, QuestionIcon, XSquareIcon, } from "@/components/icons/icons"; import { fetcher } from "@/lib/fetcher"; import { getSourceMetadata } from "@/components/source"; import { CheckCircle } from "@phosphor-icons/react"; import { HealthCheckBanner } from "@/components/health/healthcheck"; import { ConnectorIndexingStatus } from "@/lib/types"; import { useState } from "react"; import { getDocsProcessedPerMinute } from "@/lib/indexAttempt"; import { ConnectorTitle } from "@/components/admin/connectors/ConnectorTitle"; const ErrorDisplay = ({ message }: { message: string }) => { const [isHovered, setIsHovered] = useState(false); return (
{ setIsHovered(true); }} onMouseLeave={() => setIsHovered(false)} className="relative" > {isHovered && (
Error Message:
{message}
)}
Error
); }; function Main() { const { data: indexAttemptData, isLoading: indexAttemptIsLoading, error: indexAttemptIsError, } = useSWR[]>( "/api/manage/admin/connector/indexing-status", fetcher, { refreshInterval: 30000 } // 30 seconds ); if (indexAttemptIsLoading) { return ; } if (indexAttemptIsError || !indexAttemptData) { return
Error loading indexing history.
; } // sort by source name indexAttemptData.sort((a, b) => { if (a.connector.source < b.connector.source) { return -1; } else if (a.connector.source > b.connector.source) { return 1; } else { return 0; } }); return ( { const sourceMetadata = getSourceMetadata( connectorIndexingStatus.connector.source ); let statusDisplay = (
Initializing...
); if (connectorIndexingStatus.connector.disabled) { statusDisplay = (
Disabled
); } else if (connectorIndexingStatus.last_status === "success") { statusDisplay = (
Enabled
); } else if (connectorIndexingStatus.last_status === "failed") { statusDisplay = ( ); } else if (connectorIndexingStatus.last_status === "not_started") { statusDisplay =
Scheduled
; } else if (connectorIndexingStatus.last_status === "in_progress") { const docsPerMinute = getDocsProcessedPerMinute( connectorIndexingStatus.latest_index_attempt )?.toFixed(2); statusDisplay = (
In Progress{" "} {connectorIndexingStatus?.latest_index_attempt ?.num_docs_indexed ? (
Current Run:{" "} { connectorIndexingStatus.latest_index_attempt .num_docs_indexed }{" "} docs indexed
Speed:{" "} {docsPerMinute ? ( <>~{docsPerMinute} docs / min ) : ( "calculating rate..." )}
) : null}
); } return { indexed_at: timeAgo(connectorIndexingStatus?.last_success) || "-", docs_indexed: connectorIndexingStatus?.docs_indexed ? `${connectorIndexingStatus?.docs_indexed} documents` : "-", connector: ( ), status: statusDisplay, // TODO: add the below back in after this is supported in the backend // reindex: ( // // ), }; })} /> ); } export default function Status() { return (

Indexing Status

); }