Files
Nas-Notification/server/api/notifications/queue/retry/stats.get.js

73 lines
1.7 KiB
JavaScript

import prisma from "~/server/utils/prisma";
export default defineEventHandler(async (event) => {
try {
// Get current date and set to start of day
const today = new Date();
today.setHours(0, 0, 0, 0);
// Get yesterday
const yesterday = new Date(today);
yesterday.setDate(yesterday.getDate() - 1);
// Query counts for different job statuses
const [failed, retrying, recovered, deadLetter] = await Promise.all([
// Failed jobs count
prisma.notification_queue.count({
where: {
status: "failed",
},
}),
// Jobs currently being retried (if your system tracks this state)
prisma.notification_queue.count({
where: {
status: "processing",
attempts: {
gt: 1,
},
},
}),
// Recovered jobs (failed but then succeeded)
prisma.notification_queue.count({
where: {
status: "completed",
attempts: {
gt: 1,
},
updated_at: {
gte: yesterday,
},
},
}),
// Dead letter queue (failed and max attempts reached)
prisma.notification_queue.count({
where: {
status: "failed",
attempts: {
equals: prisma.notification_queue.fields.max_attempts,
},
},
}),
]);
return {
success: true,
data: {
failed,
retrying,
recovered,
deadLetter,
},
};
} catch (error) {
console.error("Error fetching retry stats:", error);
throw createError({
statusCode: 500,
statusMessage: "Failed to fetch retry statistics",
data: {
error: error.message,
},
});
} finally {
}
});