27 lines
918 B
TypeScript
27 lines
918 B
TypeScript
import { NextResponse } from 'next/server';
|
|
import { exec } from 'child_process';
|
|
import util from 'util';
|
|
|
|
const execPromise = util.promisify(exec);
|
|
|
|
export async function POST(_req: Request) {
|
|
try {
|
|
// Ideally we should verify JWT role: admin here, but for demonstration of the architecture:
|
|
|
|
// Command to scale up by 1 instance
|
|
const { stdout, stderr } = await execPromise('pm2 scale jumpa-chat +1');
|
|
|
|
console.log('[CLUSTER SCALE] stdout:', stdout);
|
|
if (stderr) console.error('[CLUSTER SCALE] stderr:', stderr);
|
|
|
|
// Give it 1 second to warm up
|
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
|
|
return NextResponse.json({ success: true, message: 'Node scaled successfully', stdout }, { status: 200 });
|
|
|
|
} catch (error) {
|
|
console.error('[CLUSTER SCALE ERROR]', error);
|
|
return NextResponse.json({ error: 'Failed to scale cluster' }, { status: 500 });
|
|
}
|
|
}
|