Files
cloudlense/frontend/src/app/api/debug/crawl-queue/[websiteId]/route.ts
T
Dennis 50e25e3ee8 refactor: flatten monorepo structure to backend/ frontend/ devops/
Rename subdirectories for a cleaner single-repo layout:
- website-monitoring-backend/  → backend/
- website-monitoring-frontend/ → frontend/
- website-monitoring-devops/   → devops/

Update all references in package.json scripts, CI workflows,
docker-compose, pre-commit hooks, and documentation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-07 00:25:29 +01:00

87 lines
2.8 KiB
TypeScript

import { NextResponse } from "next/server";
import { getSupabaseAdmin } from "@/lib/admin";
export async function GET(
request: Request,
{ params }: { params: Promise<{ websiteId: string }> },
) {
try {
const { websiteId } = await params;
// Get crawl queue items
const { data: queueItems, error: queueError } = await getSupabaseAdmin()
.from("crawl_queue")
.select("*")
.eq("website_id", websiteId)
.order("created_at", { ascending: false });
if (queueError) throw queueError;
// Get crawl sessions
const { data: sessions, error: sessionsError } = await getSupabaseAdmin()
.from("crawl_sessions")
.select("*")
.eq("website_id", websiteId)
.order("created_at", { ascending: false });
if (sessionsError) throw sessionsError;
// Get pages discovered
const { data: pages, error: pagesError } = await getSupabaseAdmin()
.from("pages")
.select("id, url, title, is_active, depth, created_at, metadata")
.eq("website_id", websiteId)
.order("created_at", { ascending: false });
if (pagesError) throw pagesError;
// Get website info
const { data: website, error: websiteError } = await getSupabaseAdmin()
.from("websites")
.select("*")
.eq("id", websiteId)
.single();
if (websiteError) throw websiteError;
// Statistics
const queueStats = {
total: queueItems?.length || 0,
pending: queueItems?.filter(item => item.status === 'pending').length || 0,
processing: queueItems?.filter(item => item.status === 'processing').length || 0,
completed: queueItems?.filter(item => item.status === 'completed').length || 0,
failed: queueItems?.filter(item => item.status === 'failed').length || 0,
skipped: queueItems?.filter(item => item.status === 'skipped').length || 0,
};
const sessionStats = {
total: sessions?.length || 0,
running: sessions?.filter(s => s.status === 'running').length || 0,
completed: sessions?.filter(s => s.status === 'completed').length || 0,
failed: sessions?.filter(s => s.status === 'failed').length || 0,
};
const pageStats = {
total: pages?.length || 0,
active: pages?.filter(p => p.is_active).length || 0,
inactive: pages?.filter(p => !p.is_active).length || 0,
};
return NextResponse.json({
website,
queueStats,
sessionStats,
pageStats,
queueItems: queueItems?.slice(0, 20), // Last 20 queue items
sessions: sessions?.slice(0, 5), // Last 5 sessions
pages: pages?.slice(0, 20), // Last 20 pages
});
} catch (error) {
console.error("Error fetching crawl debug info:", error);
return NextResponse.json(
{ error: "Failed to fetch crawl debug info" },
{ status: 500 },
);
}
}