🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import client from 'prom-client';
|
|
|
|
// Create a Registry to register the metrics
|
|
const register = new client.Registry();
|
|
|
|
// Add default metrics (CPU, memory, etc.)
|
|
client.collectDefaultMetrics({ register });
|
|
|
|
// Custom metrics
|
|
const httpRequestsTotal = new client.Counter({
|
|
name: 'http_requests_total',
|
|
help: 'Total number of HTTP requests',
|
|
labelNames: ['method', 'path', 'status'],
|
|
registers: [register],
|
|
});
|
|
|
|
const httpRequestDuration = new client.Histogram({
|
|
name: 'http_request_duration_seconds',
|
|
help: 'Duration of HTTP requests in seconds',
|
|
labelNames: ['method', 'path'],
|
|
buckets: [0.1, 0.3, 0.5, 0.7, 1, 3, 5, 7, 10],
|
|
registers: [register],
|
|
});
|
|
|
|
export async function GET() {
|
|
try {
|
|
const metrics = await register.metrics();
|
|
return new NextResponse(metrics, {
|
|
status: 200,
|
|
headers: {
|
|
'Content-Type': register.contentType,
|
|
},
|
|
});
|
|
} catch (error) {
|
|
return NextResponse.json({ error: 'Failed to get metrics' }, { status: 500 });
|
|
}
|
|
}
|