feat: 生成脚本
This commit is contained in:
102
scripts/clear-mock-data.ts
Normal file
102
scripts/clear-mock-data.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
/**
|
||||
* 清理模拟数据脚本
|
||||
* 删除所有 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);
|
||||
});
|
||||
Reference in New Issue
Block a user