"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
);
};
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 (
);
}