103 lines
2.9 KiB
TypeScript
103 lines
2.9 KiB
TypeScript
/**
|
||
* 清理模拟数据脚本
|
||
* 删除所有 claws 数据(以及关联的 heartbeats, tasks, token_usage)
|
||
*
|
||
* 使用方法: npx tsx scripts/clear-mock-data.ts
|
||
*/
|
||
|
||
import { db } from "@/lib/db";
|
||
import { claws, heartbeats, tasks, tokenUsage, geoCache } from "@/lib/db/schema";
|
||
import { sql } from "drizzle-orm";
|
||
import { redis, redisSubscriber } from "@/lib/redis";
|
||
|
||
async function clearMockData() {
|
||
console.log("🧹 开始清理数据...\n");
|
||
|
||
try {
|
||
// 1. 清理 token_usage
|
||
console.log("🗑️ 清理 token_usage...");
|
||
const tokenResult = await db.delete(tokenUsage);
|
||
console.log(` ✅ 已删除所有 token_usage 记录\n`);
|
||
|
||
// 2. 清理 tasks
|
||
console.log("🗑️ 清理 tasks...");
|
||
await db.delete(tasks);
|
||
console.log(` ✅ 已删除所有 tasks 记录\n`);
|
||
|
||
// 3. 清理 heartbeats
|
||
console.log("🗑️ 清理 heartbeats...");
|
||
await db.delete(heartbeats);
|
||
console.log(` ✅ 已删除所有 heartbeats 记录\n`);
|
||
|
||
// 4. 清理 claws
|
||
console.log("🗑️ 清理 claws...");
|
||
await db.delete(claws);
|
||
console.log(` ✅ 已删除所有 claws 记录\n`);
|
||
|
||
// 5. 清理 geo_cache(可选)
|
||
console.log("🗑️ 清理 geo_cache...");
|
||
await db.delete(geoCache);
|
||
console.log(` ✅ 已删除所有 geo_cache 记录\n`);
|
||
|
||
// 6. 清理 Redis 数据
|
||
console.log("🗑️ 清理 Redis 数据...");
|
||
|
||
// 获取所有相关的 Redis keys
|
||
const keysToDelete: string[] = [];
|
||
|
||
// 在线状态
|
||
const onlineKeys = await redis.keys("claw:online:*");
|
||
keysToDelete.push(...onlineKeys);
|
||
|
||
// 活跃 claws
|
||
const activeKeys = await redis.keys("active_claws*");
|
||
keysToDelete.push(...activeKeys);
|
||
|
||
// 地区统计
|
||
const regionKeys = await redis.keys("region:*");
|
||
keysToDelete.push(...regionKeys);
|
||
|
||
// 全局统计
|
||
const globalKeys = await redis.keys("global:*");
|
||
keysToDelete.push(...globalKeys);
|
||
|
||
// 每小时活动
|
||
const hourlyKeys = await redis.keys("hourly:*");
|
||
keysToDelete.push(...hourlyKeys);
|
||
|
||
// 热力图缓存
|
||
const heatmapKeys = await redis.keys("heatmap:*");
|
||
keysToDelete.push(...heatmapKeys);
|
||
|
||
// Token 排行榜缓存
|
||
const leaderboardKeys = await redis.keys("token_leaderboard:*");
|
||
keysToDelete.push(...leaderboardKeys);
|
||
|
||
// Token 统计缓存
|
||
const tokenStatsKeys = await redis.keys("token_stats:*");
|
||
keysToDelete.push(...tokenStatsKeys);
|
||
|
||
if (keysToDelete.length > 0) {
|
||
await redis.del(...keysToDelete);
|
||
console.log(` ✅ 已删除 ${keysToDelete.length} 个 Redis keys\n`);
|
||
} else {
|
||
console.log(` ℹ️ 没有 Redis keys 需要删除\n`);
|
||
}
|
||
|
||
console.log("=" .repeat(50));
|
||
console.log("✨ 数据清理完成!\n");
|
||
|
||
} catch (error) {
|
||
console.error("❌ 清理失败:", error);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
// 运行
|
||
clearMockData()
|
||
.then(() => process.exit(0))
|
||
.catch((err) => {
|
||
console.error("❌ 错误:", err);
|
||
process.exit(1);
|
||
});
|