first-update
This commit is contained in:
107
easy-dataset-main/app/api/monitoring/logs/route.js
Normal file
107
easy-dataset-main/app/api/monitoring/logs/route.js
Normal file
@@ -0,0 +1,107 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { db } from '@/lib/db';
|
||||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
export async function GET(request) {
|
||||
try {
|
||||
const { searchParams } = new URL(request.url);
|
||||
const timeRange = searchParams.get('timeRange') || '7d';
|
||||
const projectId = searchParams.get('projectId');
|
||||
const provider = searchParams.get('provider');
|
||||
const status = searchParams.get('status');
|
||||
const page = parseInt(searchParams.get('page') || '1', 10);
|
||||
const pageSize = parseInt(searchParams.get('pageSize') || '10', 10);
|
||||
const searchTerm = searchParams.get('search') || '';
|
||||
|
||||
let startDate = new Date();
|
||||
|
||||
if (timeRange === '24h') {
|
||||
startDate.setHours(startDate.getHours() - 24);
|
||||
} else if (timeRange === '30d') {
|
||||
startDate.setDate(startDate.getDate() - 30);
|
||||
} else {
|
||||
startDate.setDate(startDate.getDate() - 7);
|
||||
}
|
||||
|
||||
const where = {
|
||||
createAt: {
|
||||
gte: startDate
|
||||
}
|
||||
};
|
||||
|
||||
if (projectId && projectId !== 'all') {
|
||||
where.projectId = projectId;
|
||||
}
|
||||
if (provider && provider !== 'all') {
|
||||
where.provider = provider;
|
||||
}
|
||||
if (status && status !== 'all') {
|
||||
where.status = status;
|
||||
}
|
||||
|
||||
if (searchTerm) {
|
||||
where.OR = [{ model: { contains: searchTerm } }, { errorMessage: { contains: searchTerm } }];
|
||||
}
|
||||
|
||||
const total = await db.llmUsageLogs.count({ where });
|
||||
const logs = await db.llmUsageLogs.findMany({
|
||||
where,
|
||||
select: {
|
||||
id: true,
|
||||
projectId: true,
|
||||
provider: true,
|
||||
model: true,
|
||||
inputTokens: true,
|
||||
outputTokens: true,
|
||||
totalTokens: true,
|
||||
latency: true,
|
||||
status: true,
|
||||
errorMessage: true,
|
||||
createAt: true
|
||||
},
|
||||
orderBy: {
|
||||
createAt: 'desc'
|
||||
},
|
||||
skip: (page - 1) * pageSize,
|
||||
take: pageSize
|
||||
});
|
||||
|
||||
const projectIds = [...new Set(logs.map(log => log.projectId))];
|
||||
const projects = await db.projects.findMany({
|
||||
where: { id: { in: projectIds } },
|
||||
select: { id: true, name: true }
|
||||
});
|
||||
const projectMap = projects.reduce((acc, p) => {
|
||||
acc[p.id] = p.name;
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
const details = logs.map(log => ({
|
||||
id: log.id,
|
||||
projectId: log.projectId,
|
||||
projectName: projectMap[log.projectId] || 'Unknown Project',
|
||||
provider: log.provider,
|
||||
model: log.model,
|
||||
status: log.status,
|
||||
failureReason: log.errorMessage,
|
||||
inputTokens: log.inputTokens,
|
||||
outputTokens: log.outputTokens,
|
||||
totalTokens: log.totalTokens,
|
||||
calls: 1, // Single record
|
||||
avgLatency: log.status === 'SUCCESS' ? (log.latency / 1000).toFixed(2) + 's' : '-',
|
||||
createAt: log.createAt
|
||||
}));
|
||||
|
||||
return NextResponse.json({
|
||||
details,
|
||||
total,
|
||||
page,
|
||||
pageSize,
|
||||
totalPages: Math.ceil(total / pageSize)
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Failed to fetch monitoring logs:', error);
|
||||
return NextResponse.json({ error: error.message }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user