Skip to content

Commit b0dec4a

Browse files
author
pengyu
committed
revert route
1 parent ac64d52 commit b0dec4a

File tree

3 files changed

+62
-80
lines changed

3 files changed

+62
-80
lines changed

frontend/src/app/api/runProject/route.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -517,12 +517,10 @@ export async function GET(req: Request) {
517517
existingContainer.containerId
518518
);
519519
if (isRunning) {
520-
logger.info(`Using existing container with port: ${existingContainer.port}`);
521520
return NextResponse.json({
522521
message: 'Docker container already running',
523522
domain: existingContainer.domain,
524523
containerId: existingContainer.containerId,
525-
port: existingContainer.port,
526524
});
527525
} else {
528526
// Remove non-running container from state
@@ -549,14 +547,12 @@ export async function GET(req: Request) {
549547
processingRequests.add(projectPath);
550548

551549
try {
552-
const { domain, containerId, port } = await runDockerContainer(projectPath);
553-
logger.info(`Successfully started container on port: ${port}`);
550+
const { domain, containerId } = await runDockerContainer(projectPath);
554551

555552
return NextResponse.json({
556553
message: 'Docker container started',
557554
domain,
558555
containerId,
559-
port,
560556
});
561557
} catch (error: any) {
562558
logger.error(`Failed to start Docker container:`, error);
@@ -567,4 +563,4 @@ export async function GET(req: Request) {
567563
} finally {
568564
processingRequests.delete(projectPath);
569565
}
570-
}
566+
}

frontend/src/app/api/screenshot/route.ts

Lines changed: 44 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ export async function GET(req: Request) {
2222
const { searchParams } = new URL(req.url);
2323
const url = searchParams.get('url');
2424
let page = null;
25-
const MAX_RETRIES = 3;
2625

2726
if (!url) {
2827
return NextResponse.json(
@@ -31,15 +30,12 @@ export async function GET(req: Request) {
3130
);
3231
}
3332

34-
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
35-
try {
36-
logger.info(`Screenshot attempt ${attempt + 1} for ${url}`);
37-
38-
// Get browser instance
39-
const browser = await getBrowser();
33+
try {
34+
// Get browser instance
35+
const browser = await getBrowser();
4036

41-
// Create a new page
42-
page = await browser.newPage();
37+
// Create a new page
38+
page = await browser.newPage();
4339

4440
// Set viewport to a reasonable size
4541
await page.setViewport({
@@ -77,66 +73,51 @@ export async function GET(req: Request) {
7773
fullPage: true,
7874
});
7975

80-
// Always close the page when done
81-
if (page) {
82-
await page.close();
83-
}
76+
// Always close the page when done
77+
if (page) {
78+
await page.close();
79+
}
8480

85-
// Return the screenshot as a PNG image
86-
return new Response(screenshot, {
87-
headers: {
88-
'Content-Type': 'image/png',
89-
'Cache-Control': 's-maxage=3600',
90-
},
91-
});
92-
} catch (error: any) {
93-
logger.error(`Screenshot error on attempt ${attempt + 1}:`, error);
94-
95-
// Ensure page is closed even if an error occurs
96-
if (page) {
97-
try {
98-
await page.close();
99-
} catch (closeError) {
100-
logger.error('Error closing page:', closeError);
101-
}
102-
}
81+
// Return the screenshot as a PNG image
82+
return new Response(screenshot, {
83+
headers: {
84+
'Content-Type': 'image/png',
85+
'Cache-Control': 's-maxage=3600',
86+
},
87+
});
88+
} catch (error: any) {
89+
logger.error('Screenshot error:', error);
10390

104-
// If browser seems to be in a bad state, recreate it
105-
if (
106-
error.message.includes('Target closed') ||
107-
error.message.includes('Protocol error') ||
108-
error.message.includes('Target.createTarget')
109-
) {
110-
try {
111-
if (browserInstance) {
112-
await browserInstance.close();
113-
browserInstance = null;
114-
}
115-
} catch (closeBrowserError) {
116-
logger.error('Error closing browser:', closeBrowserError);
117-
}
91+
// Ensure page is closed even if an error occurs
92+
if (page) {
93+
try {
94+
await page.close();
95+
} catch (closeError) {
96+
logger.error('Error closing page:', closeError);
11897
}
98+
}
11999

120-
// 如果这不是最后一次尝试,则继续
121-
if (attempt < MAX_RETRIES - 1) {
122-
// 等待一会儿再重试
123-
await new Promise(resolve => setTimeout(resolve, 3000));
124-
continue;
100+
// If browser seems to be in a bad state, recreate it
101+
if (
102+
error.message.includes('Target closed') ||
103+
error.message.includes('Protocol error') ||
104+
error.message.includes('Target.createTarget')
105+
) {
106+
try {
107+
if (browserInstance) {
108+
await browserInstance.close();
109+
browserInstance = null;
110+
}
111+
} catch (closeBrowserError) {
112+
logger.error('Error closing browser:', closeBrowserError);
125113
}
126-
127-
// 最后一次尝试失败
128-
return NextResponse.json(
129-
{ error: error.message || 'Failed to capture screenshot after multiple attempts' },
130-
{ status: 500 }
131-
);
132114
}
133-
}
134115

135-
// 如果重试都失败
136-
return NextResponse.json(
137-
{ error: 'Failed to capture screenshot after exhausting all retries' },
138-
{ status: 500 }
139-
);
116+
return NextResponse.json(
117+
{ error: error.message || 'Failed to capture screenshot' },
118+
{ status: 500 }
119+
);
120+
}
140121
}
141122

142123
// Handle process termination to close browser
@@ -147,4 +128,4 @@ process.on('SIGINT', async () => {
147128
browserInstance = null;
148129
}
149130
process.exit(0);
150-
});
131+
});

frontend/src/components/chat/code-engine/project-context.tsx

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -603,33 +603,36 @@ export function ProjectProvider({ children }: { children: ReactNode }) {
603603

604604
const takeProjectScreenshot = useCallback(
605605
async (projectId: string, url: string): Promise<void> => {
606-
// Check if this screenshot operation is already in progress
607606
const operationKey = `screenshot_${projectId}`;
608607
if (pendingOperations.current.get(operationKey)) {
608+
logger.debug(`[screenshot] Project ${projectId} is already being processed`);
609609
return;
610610
}
611-
611+
612612
pendingOperations.current.set(operationKey, true);
613-
613+
logger.debug(`[screenshot] Start for Project ${projectId}, URL: ${url}`);
614+
614615
try {
615-
// Check if the URL is accessible
616+
logger.debug(`[screenshot] Checking accessibility for ${url}`);
616617
const isUrlAccessible = await checkUrlStatus(url);
617618
if (!isUrlAccessible) {
618-
logger.warn(`URL ${url} is not accessible after multiple retries`);
619+
logger.warn(`[screenshot] URL ${url} is not accessible after retries`);
619620
return;
620621
}
621-
622-
// Add a cache buster to avoid previous screenshot caching
622+
623623
const screenshotUrl = `/api/screenshot?url=${encodeURIComponent(url)}&t=${Date.now()}`;
624+
logger.debug(`[screenshot] Sending request to ${screenshotUrl}`);
624625
const screenshotResponse = await fetch(screenshotUrl);
625-
626+
626627
if (!screenshotResponse.ok) {
627628
throw new Error(
628-
`Failed to capture screenshot: ${screenshotResponse.status} ${screenshotResponse.statusText}`
629+
`[screenshot] Failed to capture: ${screenshotResponse.status} ${screenshotResponse.statusText}`
629630
);
630631
}
631-
632+
632633
const arrayBuffer = await screenshotResponse.arrayBuffer();
634+
logger.debug(`[screenshot] Screenshot captured for Project ${projectId}, uploading...`);
635+
633636
const blob = new Blob([arrayBuffer], { type: 'image/png' });
634637
const file = new File([blob], 'screenshot.png', { type: 'image/png' });
635638

@@ -642,13 +645,15 @@ export function ProjectProvider({ children }: { children: ReactNode }) {
642645
},
643646
});
644647
} catch (error) {
645-
logger.error('Error taking screenshot:', error);
648+
logger.error(`[screenshot] Error for Project ${projectId}:`, error);
646649
} finally {
650+
logger.debug(`[screenshot] Finished process for Project ${projectId}`);
647651
pendingOperations.current.delete(operationKey);
648652
}
649653
},
650654
[updateProjectPhotoMutation]
651655
);
656+
652657

653658
const getWebUrl = useCallback(
654659
async (

0 commit comments

Comments
 (0)