Skip to content

Repository files navigation

CS2 饰品价格监控 Web 仪表盘 (cs-monitor)

Python 3.12+ Vue 3 FastAPI License: MIT

一个轻量级、可自托管的 CS2 饰品价格监控平台,基于 SteamDT 开放平台 API,支持 CLI 后台监控Web 仪表盘 双模式。用户可通过浏览器完成所有监控操作:查看价格、管理清单、分析趋势、接收告警,无需登录,无需修改任何配置文件

本项目采用 AI Agent 驱动开发,核心开发规范定义在 CLAUDE.md 中。你可以在此基础上自由改造和扩展。


核心功能

1. Web 仪表盘(v2.0 新增,v3.0 重设计)

打开浏览器 http://localhost:8080 即可管理所有监控操作,无需登录

  • Dashboard 首页:终端概览大卡片 + 柱状图动画 + 核心功能快捷按钮 + 实时统计卡片
  • 饰品搜索:本地 39,000+ 饰品数据库,支持中英文、无分隔符匹配(如输入 ak47 匹配 AK-47),实时价格查询
  • 监控清单管理:极客玻璃拟态卡片视图、Sparkline 迷你走势图、平台比价标签、饰品图片展示
  • 饰品详情页:ECharts K 线图(OHLC + MA 均线 + 成交量)、平台多维度对比、历史告警关联
  • 极致追踪管理:雷达强度进度条 + shimmer 动画、内存快照实时数据、卡片网格布局
  • 告警历史:极客表格风格、类型标签(红涨/绿跌/琥珀量)、按天统计
  • 数据分析:市场趋势分析占位页,扫描线动画(建设中)
  • 系统设置:三段式纵向布局、紫色圆形开关滑块、通知渠道状态灯、主题切换
  • 极客终端风格:深黑底色 + Indigo 品牌紫 (#6366f1) + 玻璃拟态,参考 Gemini 设计的 React 前端
  • 深色模式:完整 light / dark 浅色主题适配
  • 全局搜索Cmd/Ctrl + K 唤起,快速跳转页面

2. 普通监控模式

批量巡检多个饰品,默认每 30 分钟自动采集一次价格,对比 7 天均价检测波动:

  • 涨幅 ≥ 阈值% → 触发 price_surge 涨价告警
  • 跌幅 ≤ -阈值% → 触发 price_drop 跌价告警
  • 同一饰品同一方向 4 小时内只告警 1 次(冷却机制)

3. 极致追踪模式

单品高频狙击,自定义秒级轮询,追踪指定平台的价格在售数量变动:

  • 支持 any(任何变动通知)和 percent(超百分比通知)双模式
  • 429 限流时自动降频(间隔翻倍,最大 1 小时),连续成功 10 次后逐步恢复
  • 支持免打扰时段 (quiet_hours) 和自定义冷却期
  • 价格 & 数量同时变动时合并为一条通知

4. 多渠道通知

  • 企业微信机器人 Webhook(P0 已完整实现)
  • Telegram Bot(P1,支持代理访问,中国大陆可用)
  • Server 酱(P1)

Telegram 需要代理才能在中国大陆使用。在 .env 中配置 TELEGRAM_PROXY=http://127.0.0.1:7890 即可。

5. SQLite 持久化

零配置本地数据库,自动记录价格历史和告警日志。v2.0 新增监控清单和极致追踪配置持久化到数据库。


项目架构

cs-monitor/
├── main.py                 # 主程序入口(调度器 + FastAPI Web 服务)
├── config.py               # 配置类(dataclass,默认值兜底)
├── requirements.txt        # Python 依赖
├── .env.example            # 环境变量模板
├── .gitignore
├── CLAUDE.md               # AI Agent 开发工作流规范
├── architecture.md         # 架构设计文档
├── PRD.md                  # 产品需求文档
├── task.json               # 开发任务清单
├── progress.txt            # 开发进度日志
├── api/
│   └── steamdt.py          # SteamDT API 封装(重试、延迟、异常处理)
├── core/
│   ├── monitor.py          # 普通监控:价格采集
│   ├── analyzer.py         # 波动分析 + 告警检测
│   ├── scheduler.py        # APScheduler 定时任务管理
│   └── extreme_tracker.py  # 极致追踪:高频单品狙击
├── web/                    # 🆕 FastAPI Web 层
│   ├── app.py              # FastAPI 应用入口
│   ├── schemas.py          # Pydantic 模型
│   ├── ws_manager.py       # WebSocket 管理
│   └── routers/            # RESTful API 路由
├── frontend/               # 🆕 Vue 3 前端
│   ├── package.json
│   ├── vite.config.ts
│   └── src/
│       ├── views/          # 页面(Dashboard/Watchlist/Alerts/...)
│       ├── components/     # 组件(StatCard/PriceTable/PriceChart/...)
│       ├── stores/         # Pinia 状态管理
│       └── api/            # axios 封装
├── notify/
│   ├── base.py             # 通知渠道抽象基类
│   ├── manager.py          # 通知管理器(格式化 + 路由)
│   ├── wecom.py            # 企业微信机器人
│   ├── telegram.py         # Telegram Bot
│   └── serverchan.py       # Server 酱
├── storage/
│   ├── models.py           # 数据库表结构定义
│   └── database.py         # SQLite 连接与 CRUD 封装
├── utils/
│   └── logger.py           # loguru 日志配置
├── data/
│   └── logs/               # 日志文件输出目录
└── tests/
    ├── test_api.py
    ├── test_monitor.py
    ├── test_analyzer.py
    ├── test_extreme_tracker.py
    ├── test_notify.py
    ├── test_storage.py
    └── test_web_api.py     # 🆕 Web API 测试

快速开始

1. 环境准备

需要 Python 3.12+Node.js 18+(用于前端开发)。

cd cs-monitor
./init.sh

init.sh 会创建 .venv 虚拟环境、安装 Python 依赖,并自动安装前端 npm 依赖。

2. 配置环境变量

cp .env.example .env
# 编辑 .env,填写以下内容:
# - STEAMDT_API_KEY(从 https://doc.steamdt.com/ 获取)
# - 至少一种通知渠道(WECOM_WEBHOOK_URL / TELEGRAM_BOT_TOKEN / SERVERCHAN_SENDKEY)

3. 运行主程序

# 先构建前端(仅需执行一次,或前端代码更新后重新构建)
cd frontend && npm run build && cd ..

# 启动主程序
python main.py

首次启动会立即执行一次价格采集,随后:

  • 后台调度器按设定间隔运行 CLI 监控
  • FastAPI Web 服务http://localhost:8080 提供 Web 仪表盘

构建完成后,直接在浏览器打开 http://localhost:8080 即可访问 Web 仪表盘,无需额外启动前端服务器。

Ctrl+C 可优雅退出。

4. Docker 一键部署(推荐生产环境)

# 1. 确保 .env 已配置好
cp .env.example .env
# 编辑 .env 填写 STEAMDT_API_KEY 和通知渠道

# 2. 构建并启动
docker-compose up -d --build

# 3. 查看日志
docker-compose logs -f

# 4. 访问仪表盘
open http://localhost:8080

数据持久化docker-compose.yml 已将 ./data 目录挂载到容器,SQLite 数据库和日志不会随容器销毁而丢失。

健康检查:容器内置 healthcheck,每 30 秒检测 /api/health,连续 3 次失败自动重启。

停止服务

docker-compose down

5. 开发模式(前端热更新)

如需修改前端代码并实时预览:

# 终端 1:启动后端
python main.py

# 终端 2:启动前端开发服务器
cd frontend
npm run dev

前端开发服务器运行在 http://localhost:5173,通过 Vite 代理访问后端 API。开发完成后记得运行 npm run build 重新构建,使生产环境生效。

6. 运行测试

# Python 后端测试
python -m pytest tests/ -v

# 前端构建检查
cd frontend && npm run build

配置说明

监控清单

v2.0 后监控清单已迁移到数据库,可通过 Web 仪表盘API 管理,无需修改配置文件。

如需查看/修改默认值,参考 config.py 中的 watchlist

watchlist = [
    {"name": "AK-47 | Redline (Field-Tested)", "threshold": 5.0},
    {"name": "AWP | Asiimov (Field-Tested)", "threshold": 5.0},
]

首次启动时,如果数据库中的 watchlist 表为空,系统会自动从 config.py 导入默认值。

极致追踪

同样已迁移到数据库。参考 config.py 中的 extreme_track_list 查看默认配置格式。


改造指引

如果你想在此基础上继续开发,建议从以下几个方面入手:

  1. 更多通知渠道:钉钉、Discord、Bark 等
  2. 多用户支持:重新启用 JWT 认证为多用户模式(代码已封存,可随时恢复)
  3. 桌面端打包:Tauri 2.x 封装为 Windows/macOS/Linux 原生应用
  4. 数据归档优化:更精细的历史数据管理和清理策略

已完成的功能:套利价差提醒、K 线趋势分析、Docker 部署、数据归档、极客终端 Glass-card 玻璃拟态设计系统、本地饰品搜索(39K+)、饰品图片自动获取


技术栈

层级 技术 说明
后端语言 Python 3.12+ 类型提示、dataclass
Web 框架 FastAPI 异步高性能、OpenAPI 文档
HTTP 客户端 httpx 同步请求 + 重试机制
调度 APScheduler BackgroundScheduler 定时任务
数据库 SQLite (WAL) 零配置,支持并发读写
前端框架 Vue 3 + Vite + TypeScript 组件化、响应式
UI 组件库 Naive UI 中文文档完善
图标库 lucide-vue-next 与 React 参考项目一致的图标系统
图表库 ECharts 5 K线/折线/柱状图全覆盖
状态管理 Pinia 轻量替代 Vuex
CSS UnoCSS 原子化 CSS
日志 loguru 彩色控制台 + 文件日志
配置 python-dotenv .env 环境变量管理
测试 pytest 86+ 个单元测试

开发规范

本项目由 AI Agent 按 CLAUDE.md 中的规范逐步开发完成。如果你想用同样的方式继续迭代:

  1. 阅读 CLAUDE.md 了解工作流
  2. 查看 task.json 了解已完成的任务(共 30 个,全部 passes: true
  3. task.json 中按顺序完成下一个 passes: false 的任务
  4. 遵循"一个 task 一个 commit"的原则

License

MIT License - 可自由修改和商用。

About

CS2 饰品价格监控平台 — 基于 SteamDT API,支持 Web 仪表盘、实时告警(企微/Telegram)、K 线分析、极致追踪,Trading Terminal Pro 设计风格

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages