全项目扫描修复: Docker数据卷修复+安全requireAdmin+12页SEO+API白名单+脚本超时+常量提取+假数据删除
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
// 清理 30 天前的 task_log 数据,避免表无限膨胀
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
|
||||
import "dotenv/config";
|
||||
|
||||
const base = process.env.DATABASE_URL.replace("mysql://", "mariadb://");
|
||||
const sep = base.includes("?") ? "&" : "?";
|
||||
const connectionString = `${base}${sep}connection_limit=2&pool_timeout=10`;
|
||||
const adapter = new PrismaMariaDb(connectionString);
|
||||
const prisma = new PrismaClient({ adapter });
|
||||
|
||||
const RETENTION_DAYS = 30;
|
||||
|
||||
async function main() {
|
||||
const startedAt = new Date();
|
||||
const cutoff = new Date(Date.now() - RETENTION_DAYS * 24 * 60 * 60 * 1000);
|
||||
const before = await prisma.taskLog.count();
|
||||
const { count } = await prisma.taskLog.deleteMany({
|
||||
where: { startedAt: { lt: cutoff } },
|
||||
});
|
||||
const after = await prisma.taskLog.count();
|
||||
console.log(`清理完成:删除 ${count} 条,剩 ${after} 条 (清理前 ${before})`);
|
||||
|
||||
await prisma.taskLog.create({
|
||||
data: {
|
||||
taskKey: "cleanup-task-logs",
|
||||
taskName: "清理任务日志",
|
||||
status: "success",
|
||||
startedAt,
|
||||
finishedAt: new Date(),
|
||||
duration: Date.now() - startedAt.getTime(),
|
||||
triggerBy: "cron",
|
||||
result: { deleted: count, remaining: after, cutoff: cutoff.toISOString() },
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
main()
|
||||
.catch(async (e) => {
|
||||
console.error(e);
|
||||
try {
|
||||
await prisma.taskLog.create({
|
||||
data: {
|
||||
taskKey: "cleanup-task-logs",
|
||||
taskName: "清理任务日志",
|
||||
status: "failed",
|
||||
startedAt: new Date(),
|
||||
finishedAt: new Date(),
|
||||
triggerBy: "cron",
|
||||
error: (e && e.message ? e.message : String(e)).slice(0, 1000),
|
||||
},
|
||||
});
|
||||
} catch {}
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(() => prisma.$disconnect());
|
||||
Reference in New Issue
Block a user