YQisme/simulator

根据数据库中已有的数据,分析后持续生成类似的数据

★ 0Forks 0PythonGitHub ↗Compare

README

数据模拟流水线(Python + Vue3 调度)

用于从 MySQL 历史表建模并生成模拟数据,支持前端调度、多配置管理、配置可视化编辑,以及后端常驻任务(前端关闭后任务可继续运行)。

核心能力

  • 从 MySQL 拉取历史数据建模(数值分布 + 分类频率)
  • 按配置执行单轮生成并写回目标表
  • 后端常驻调度任务:前端仅负责发启停指令与查看状态
  • 多配置文件管理:新建、重命名、别名展示
  • 字段可视化编辑:数值/分类字段、关联字段组、固定值键值对
  • 任务数据预览:支持查看最新生成数据及字段类型

目录结构

  • main.py:启动入口(默认 API 模式)
  • simulator_api.py:后端接口(配置管理 + 任务控制 + 数据预览)
  • simulator_pipeline.py:核心模拟引擎
  • config/:配置文件目录
  • frontend/:Vue3 调度前端

环境准备

1) 后端依赖

pip install -r requirements.txt

2) 前端依赖

cd frontend
npm install

开发启动

1) 启动后端(默认 API 模式)

python main.py

默认监听:http://127.0.0.1:8000

可选参数:

python main.py --mode api --host 0.0.0.0 --port 8000

2) 启动前端

cd frontend
npm run dev

默认访问:http://127.0.0.1:5173

命令行直接跑任务(可选)

如果不使用前端调度,可直接跑 pipeline:

python main.py --mode pipeline --config config/config1.yaml
python main.py --mode pipeline --config config
python main.py --mode pipeline --config "config/*.yaml"

Docker 打包与运行

项目已提供 Docker 打包文件:

  • Dockerfile.backend:后端 FastAPI 镜像
  • frontend/Dockerfile:前端 Vue 构建 + Nginx 静态托管镜像
  • frontend/nginx.conf:前端容器内 Nginx 配置(含 /api/ 反向代理)
  • docker-compose.yml:一键编排前后端

1) 构建镜像

docker compose build

2) 启动容器

docker compose up -d

3) 访问地址

  • 前端:http://<服务器IP>:8080
  • 后端 API:http://<服务器IP>:8000

4) 查看日志

docker compose logs -f backend
docker compose logs -f frontend

5) 停止并清理容器

docker compose down

6) 配置目录挂载说明

docker-compose.yml 已将宿主机 ./config 挂载到容器 /app/config,你在宿主机修改配置文件后,容器内会直接生效(重启任务即可读取新配置)。

前端功能说明

  • 配置管理:
    • 配置别名:编辑 meta.alias,列表优先显示别名
    • 新建配置文件:输入文件名/别名即可创建
    • 重命名配置文件:只改文件名,不改内容
  • 可视化字段编辑:
    • numeric_cols、categorical_cols:逐项增删
    • linked_categorical_pairs:成对增删
    • linked_categorical_groups:按组增删
    • fixed_values:键值对增删(自动识别布尔/数字/字符串)
  • 任务调度:
    • 启动/停止任务(后端线程运行)
    • 执行一次(手动触发单轮)
    • 查看数据(展示最近写入记录与字段类型)

后端 API

配置管理

  • GET /api/configs:配置列表(返回 path + alias)
  • GET /api/config-data?config_path=...:读取配置对象
  • POST /api/save-config-data:保存配置对象
  • POST /api/config-create:新建配置文件
  • POST /api/config-rename:重命名配置文件

任务执行与服务控制

  • POST /api/run-once:按配置执行单轮生成并写回
  • POST /api/service-start:启动后端常驻任务
  • POST /api/service-stop:停止后端常驻任务
  • GET /api/service-status:获取全部任务状态

数据预览

  • GET /api/generated-preview?config_path=...&limit=50
    • 返回目标表最新数据(默认 50 行,最大 500 行)
    • 返回字段列表 columns
    • 返回字段类型 column_types

关键配置项说明

  • meta.alias:前端展示别名
  • mysql.url:后端实际连接串
  • tables.source_table:历史表
  • tables.target_table:回写目标表
  • fields.timestamp_col:主时间字段
  • fields.system_fields.event_id_col:自动补 UUID 字段
  • fields.system_fields.receive_time_col:接收时间字段
  • fields.system_fields.event_time_col:事件时间字段
  • fields.numeric_cols:数值建模字段(可为空;为空时跳过数值建模)
  • fields.categorical_cols:分类抽样字段
  • fields.linked_categorical_pairs:字段对关联采样
  • fields.linked_categorical_groups:字段组关联采样
  • fields.fixed_values:固定覆盖字段
  • history.lookback_rows:历史窗口大小
  • generation.rows_per_run:单轮生成行数
  • generation.frequency_minutes:时间步长(分钟)
  • generation.start_time:起始时间(latest / now / 时间字符串)
  • generation.strict_frequency:是否固定步长
  • service.duration_minutes:服务运行时长(0 表示不限时)
  • service.interval_seconds:循环间隔秒数
  • service.randomize_interval:是否随机间隔

生产部署操作

以下为推荐的标准部署方式(前后端分离 + 反向代理)。

一、后端部署(Linux,推荐)

1) 创建虚拟环境并安装依赖

cd /opt/simulator
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

2) 用 systemd 守护 API 进程

新建 /etc/systemd/system/simulator-api.service:

[Unit]
Description=Simulator FastAPI Service
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/simulator
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/simulator/.venv/bin/python main.py --mode api --host 127.0.0.1 --port 8000
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

生效并启动:

sudo systemctl daemon-reload
sudo systemctl enable simulator-api
sudo systemctl start simulator-api
sudo systemctl status simulator-api

查看日志:

journalctl -u simulator-api -f

二、前端部署(Linux,静态文件)

1) 构建

cd /opt/simulator/frontend
npm ci
npm run build

构建产物默认在 frontend/dist/。

2) Nginx 反向代理(示例)

新建站点配置(如 /etc/nginx/conf.d/simulator.conf):

server {
    listen 80;
    server_name your-domain.com;

    root /opt/simulator/frontend/dist;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

校验并重载:

sudo nginx -t
sudo systemctl reload nginx

三、Windows 生产部署(可选)

  • 后端建议使用 NSSM / WinSW 将 python main.py --mode api --host 127.0.0.1 --port 8000 注册为系统服务
  • 前端使用 npm run build 后,将 frontend/dist 托管到 IIS/Nginx
  • 通过 IIS/Nginx 反向代理 /api/ 到 127.0.0.1:8000

四、部署检查清单

  • 后端健康检查:GET /api/configs 返回 200
  • 前端页面可正常加载并显示配置列表
  • 启动任务后关闭前端,任务仍持续执行
  • “查看数据”可返回最近记录与字段类型
  • 重启机器后服务自动拉起(systemd/Windows 服务)

常见注意事项

  • 修改后端代码后需要重启后端进程(开发模式除外)
  • 修改前端代码后需要重新构建 frontend/dist
  • generated-preview 查询依赖目标表可访问,且配置中的表名/时间字段正确
  • 若 fields.numeric_cols 为空,系统不会再自动推断数值列

Contributors

YQisme

Issues