feat: 生成脚本

This commit is contained in:
richarjiang
2026-03-16 08:52:44 +08:00
parent 8e9af19c88
commit a230122faf
8 changed files with 1345 additions and 5 deletions

122
scripts/README.md Normal file
View File

@@ -0,0 +1,122 @@
# 模拟数据脚本
本目录包含用于生成和管理 OpenClaw Market 模拟数据的脚本。
## 快速开始
```bash
# 一键生成模拟数据(清理 + 生成 + 同步 Redis
pnpm seed:mock
```
## 单独脚本
### 1. 清理数据 (`clear-mock-data.ts`)
清理所有模拟数据,包括:
- MySQL 数据库中的 claws、heartbeats、tasks、token_usage、geo_cache 表
- Redis 中的所有相关缓存
```bash
pnpm seed:clear
```
### 2. 生成模拟数据 (`generate-mock-data.ts`)
生成约 240 只模拟龙虾,特点:
- **地区分布**:按真实 AI 使用情况分配
- Americas: 35%
- Asia: 30%
- Europe: 28%
- Oceania: 5%
- Africa: 2%
- **名字生成**:形容词 + 名词 + 后缀(如 `SwiftCoderPrime`
- **平台分布**claude-code (40%), cursor (25%), copilot (15%) 等
- **模型分布**claude-sonnet-4-6 (35%), claude-haiku-4-5 (20%) 等
- **活跃程度**
- 重度用户 (10%):每天 50-500 万 tokens
- 中度用户 (30%):每天 10-50 万 tokens
- 轻度用户 (40%):每天 2-10 万 tokens
- 极少用户 (20%):每天 1千-2 万 tokens
- **注册时间**:过去 7 天内随机分布
```bash
pnpm seed:generate
```
### 3. 同步 Redis 统计 (`sync-redis-stats.ts`)
根据数据库数据初始化 Redis 统计:
- 全局统计(总虾数、总任务数、总 tokens
- 地区统计
- 活跃 claws
- 每小时活动数据
```bash
pnpm seed:sync
```
### 4. 模拟实时活动 (`simulate-live-activity.ts`)
持续模拟心跳、任务和 token 上报,让数据看起来是"活"的。
```bash
pnpm seed:live
```
`Ctrl+C` 停止。
## 数据结构
### Claws 表字段
| 字段 | 说明 |
|------|------|
| id | 唯一标识 (nanoid) |
| apiKey | API 密钥 |
| name | 龙虾名称 |
| platform | 平台 (claude-code, cursor 等) |
| model | 模型 (claude-sonnet-4-6 等) |
| latitude/longitude | 地理坐标 |
| city/country/countryCode | 地理位置 |
| region | 大洲 |
| lastHeartbeat | 最后心跳时间 |
| totalTasks | 总任务数 |
| createdAt | 注册时间 |
### 关联数据
- **heartbeats**: 心跳记录
- **tasks**: 任务记录(摘要、时长、工具)
- **token_usage**: Token 使用记录(按天)
## 环境要求
运行脚本前需要配置:
```bash
# .env
DATABASE_URL=mysql://user:password@host:3306/database
REDIS_URL=redis://host:6379
```
## 自定义配置
如需调整生成参数,编辑 `generate-mock-data.ts` 顶部的配置:
```typescript
const TOTAL_CLAWS = 240; // 总虾数
const DAYS_BACK = 7; // 注册时间范围(天)
const REGION_DISTRIBUTION = [ // 地区分布权重
{ region: "Americas", weight: 35, countries: [...] },
// ...
];
```
## 数据量参考
生成 240 只虾大约产生:
- 240 条 claws 记录
- 5,000-10,000 条 heartbeats 记录
- 2,000-5,000 条 tasks 记录
- 1,000-1,500 条 token_usage 记录
- 总计约 50-200M tokens