feat(logging): add comprehensive logging to all API routes (Phase 4)
Applied withLogging() wrapper to all 24 API routes for consistent logging: Process Control Routes: - Start/stop/restart individual processes - Start-all/stop-all/restart-all batch operations Signal Routes: - Signal individual processes - Signal all processes - Signal process groups Group Management Routes: - Start/stop/restart process groups - Signal operations for groups Configuration Routes: - Get all configs (GET) - Reload configuration (POST) - Add/remove process groups (POST/DELETE) Log Routes: - Read main supervisord log - Read process stdout/stderr logs - Clear process logs (individual and all) System Routes: - Get system info - Get all processes info - Get individual process info - Send stdin to process All routes now include: - Request/response logging with timing - Automatic error handling and correlation IDs - X-Request-ID header propagation - Consistent metadata in responses Also fixed Next.js 16 deprecation: - Moved experimental.serverComponentsExternalPackages to serverExternalPackages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,35 +1,29 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { createSupervisorClient } from '@/lib/supervisor/client';
|
||||
import { withLogging } from '@/lib/utils/api-logger';
|
||||
|
||||
interface RouteParams {
|
||||
params: Promise<{ name: string }>;
|
||||
}
|
||||
|
||||
// POST - Restart all processes in a group (stop then start)
|
||||
export async function POST(request: NextRequest, { params }: RouteParams) {
|
||||
try {
|
||||
const { name } = await params;
|
||||
const body = await request.json().catch(() => ({}));
|
||||
const wait = body.wait ?? true;
|
||||
export const POST = withLogging(async (request: NextRequest, { params }: RouteParams) => {
|
||||
const { name } = await params;
|
||||
const body = await request.json().catch(() => ({}));
|
||||
const wait = body.wait ?? true;
|
||||
|
||||
const client = createSupervisorClient();
|
||||
const client = createSupervisorClient();
|
||||
|
||||
// Stop all processes in the group first
|
||||
await client.stopProcessGroup(name, wait);
|
||||
// Stop all processes in the group first
|
||||
await client.stopProcessGroup(name, wait);
|
||||
|
||||
// Then start them
|
||||
const results = await client.startProcessGroup(name, wait);
|
||||
// Then start them
|
||||
const results = await client.startProcessGroup(name, wait);
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: `Restarted process group: ${name}`,
|
||||
results,
|
||||
});
|
||||
} catch (error: any) {
|
||||
console.error('Supervisor restart process group error:', error);
|
||||
return NextResponse.json(
|
||||
{ error: error.message || 'Failed to restart process group' },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: `Restarted process group: ${name}`,
|
||||
results,
|
||||
groupName: name,
|
||||
wait,
|
||||
});
|
||||
}, 'restartProcessGroup');
|
||||
|
||||
@@ -1,37 +1,31 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { createSupervisorClient } from '@/lib/supervisor/client';
|
||||
import { withLogging } from '@/lib/utils/api-logger';
|
||||
|
||||
interface RouteParams {
|
||||
params: Promise<{ name: string }>;
|
||||
}
|
||||
|
||||
// POST - Send signal to all processes in a group
|
||||
export async function POST(request: NextRequest, { params }: RouteParams) {
|
||||
try {
|
||||
const { name } = await params;
|
||||
const body = await request.json();
|
||||
const { signal } = body;
|
||||
export const POST = withLogging(async (request: NextRequest, { params }: RouteParams) => {
|
||||
const { name } = await params;
|
||||
const body = await request.json();
|
||||
const { signal } = body;
|
||||
|
||||
if (!signal) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Signal is required' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
const client = createSupervisorClient();
|
||||
const results = await client.signalProcessGroup(name, signal);
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: `Signal ${signal} sent to group ${name}`,
|
||||
results,
|
||||
});
|
||||
} catch (error: any) {
|
||||
console.error('Supervisor signal process group error:', error);
|
||||
if (!signal) {
|
||||
return NextResponse.json(
|
||||
{ error: error.message || 'Failed to send signal to process group' },
|
||||
{ status: 500 }
|
||||
{ error: 'Signal is required' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const client = createSupervisorClient();
|
||||
const results = await client.signalProcessGroup(name, signal);
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: `Signal ${signal} sent to group ${name}`,
|
||||
results,
|
||||
groupName: name,
|
||||
signal,
|
||||
});
|
||||
}, 'signalProcessGroup');
|
||||
|
||||
@@ -1,30 +1,24 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { createSupervisorClient } from '@/lib/supervisor/client';
|
||||
import { withLogging } from '@/lib/utils/api-logger';
|
||||
|
||||
interface RouteParams {
|
||||
params: Promise<{ name: string }>;
|
||||
}
|
||||
|
||||
// POST - Start all processes in a group
|
||||
export async function POST(request: NextRequest, { params }: RouteParams) {
|
||||
try {
|
||||
const { name } = await params;
|
||||
const body = await request.json().catch(() => ({}));
|
||||
const wait = body.wait ?? true;
|
||||
export const POST = withLogging(async (request: NextRequest, { params }: RouteParams) => {
|
||||
const { name } = await params;
|
||||
const body = await request.json().catch(() => ({}));
|
||||
const wait = body.wait ?? true;
|
||||
|
||||
const client = createSupervisorClient();
|
||||
const results = await client.startProcessGroup(name, wait);
|
||||
const client = createSupervisorClient();
|
||||
const results = await client.startProcessGroup(name, wait);
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: `Started process group: ${name}`,
|
||||
results,
|
||||
});
|
||||
} catch (error: any) {
|
||||
console.error('Supervisor start process group error:', error);
|
||||
return NextResponse.json(
|
||||
{ error: error.message || 'Failed to start process group' },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: `Started process group: ${name}`,
|
||||
results,
|
||||
groupName: name,
|
||||
wait,
|
||||
});
|
||||
}, 'startProcessGroup');
|
||||
|
||||
@@ -1,30 +1,24 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { createSupervisorClient } from '@/lib/supervisor/client';
|
||||
import { withLogging } from '@/lib/utils/api-logger';
|
||||
|
||||
interface RouteParams {
|
||||
params: Promise<{ name: string }>;
|
||||
}
|
||||
|
||||
// POST - Stop all processes in a group
|
||||
export async function POST(request: NextRequest, { params }: RouteParams) {
|
||||
try {
|
||||
const { name } = await params;
|
||||
const body = await request.json().catch(() => ({}));
|
||||
const wait = body.wait ?? true;
|
||||
export const POST = withLogging(async (request: NextRequest, { params }: RouteParams) => {
|
||||
const { name } = await params;
|
||||
const body = await request.json().catch(() => ({}));
|
||||
const wait = body.wait ?? true;
|
||||
|
||||
const client = createSupervisorClient();
|
||||
const results = await client.stopProcessGroup(name, wait);
|
||||
const client = createSupervisorClient();
|
||||
const results = await client.stopProcessGroup(name, wait);
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: `Stopped process group: ${name}`,
|
||||
results,
|
||||
});
|
||||
} catch (error: any) {
|
||||
console.error('Supervisor stop process group error:', error);
|
||||
return NextResponse.json(
|
||||
{ error: error.message || 'Failed to stop process group' },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: `Stopped process group: ${name}`,
|
||||
results,
|
||||
groupName: name,
|
||||
wait,
|
||||
});
|
||||
}, 'stopProcessGroup');
|
||||
|
||||
Reference in New Issue
Block a user