按产线规范将 FOMS 单体拆分为 4 部分: 【foms 核心(保留在本仓库)】主备切换本身 表:clusters、nodes、switchover_logs、node_commands(新增) 功能:集群/节点 CRUD、Agent 心跳、故障切换/切回、仪表盘、远程命令 远程命令改用专用 node_commands 表(原借用 node_logs 的 MVP 方案,顺手修 P1 隐患) 仪表盘跨模块只读聚合(同库松耦合 SQL) 【dbbackup 模块(独立仓库)】数据库全量备份 + 日志同步(binlog复制)管理 表 dbbackup_replications(原 sync_databases)/jobs(备份任务)/records(备份记录) 新建备份执行/记录/清理逻辑 【filesync 模块(独立仓库)】运行文件同步(rsync) 表 filesync_directories(原 sync_directories) 【hostwatch 模块(独立仓库)】日志监控+日志分析+主机指标 表 hostwatch_logs(原 node_logs)/metrics(原 node_metrics)/rules/events 新建日志归类、规则匹配告警、聚合分析逻辑 设计(松耦合方案 A): · 拆出模块表加模块名前缀,cluster_id/node_id 仅存字符串不建外键 · 拆出模块不 import foms 核心代码,可独立部署测试 · 单 Agent 多端点:心跳→foms、指标日志→hostwatch、复制→dbbackup、rsync→filesync · 模块 wwwroot 软链到主 wwwroot/<模块名>(URL 前缀隔离) Agent 端点拆分:report_health 拆为 report_db_health/report_dir_health, metrics 上报改 /hostwatch/api/,_api_post/_api_get 支持完整路径。
79 lines
2.2 KiB
Bash
Executable File
79 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -e
|
||
cdir=$(pwd)
|
||
echo "=== FOMS Build ==="
|
||
|
||
# 1. Create venv
|
||
[ ! -d py3 ] && python3 -m venv py3
|
||
source py3/bin/activate
|
||
|
||
# 2. Install foundation packages
|
||
mkdir -p pkgs
|
||
for m in apppublic sqlor ahserver bricks-for-python xls2ddl; do
|
||
cd $cdir/pkgs
|
||
[ ! -d "$m" ] && git clone https://git.opencomputing.cn/yumoqing/$m
|
||
cd $m && $cdir/py3/bin/pip install -e .
|
||
done
|
||
|
||
# 3. Build bricks frontend
|
||
cd $cdir/pkgs
|
||
[ ! -d "bricks" ] && git clone https://git.opencomputing.cn/yumoqing/bricks
|
||
cd bricks/bricks && ./build.sh
|
||
ln -sf $cdir/pkgs/bricks/dist $cdir/bricks
|
||
|
||
# 4. Install auth modules
|
||
for m in appbase rbac; do
|
||
cd $cdir/pkgs
|
||
[ ! -d "$m" ] && git clone https://git.opencomputing.cn/yumoqing/$m
|
||
cd $m && $cdir/py3/bin/pip install -e .
|
||
done
|
||
|
||
# 5. Install FOMS 核心
|
||
cd $cdir && $cdir/py3/bin/pip install -e .
|
||
|
||
# 5.5 Install 业务模块(dbbackup / filesync / hostwatch)
|
||
for m in dbbackup filesync hostwatch; do
|
||
cd $cdir/pkgs
|
||
[ ! -d "$m" ] && git clone https://git.opencomputing.cn/yumoqing/$m
|
||
cd $m && $cdir/py3/bin/pip install -e .
|
||
# 生成模块 DDL
|
||
if [ -d models ]; then
|
||
json2ddl mysql models/ > models/mysql.ddl.sql 2>/dev/null || echo " skip ddl($m)"
|
||
fi
|
||
done
|
||
|
||
# 6. Generate FOMS 核心 DDL
|
||
cd $cdir
|
||
[ -d models ] && json2ddl mysql models/ > $cdir/models/mysql.ddl.sql 2>/dev/null || echo " skip ddl"
|
||
|
||
# 7. Generate FOMS 核心 CRUD UI (xls2ui for json/)
|
||
cd $cdir
|
||
if [ -d json ]; then
|
||
cd json
|
||
for f in *.json; do
|
||
echo " xls2ui foms $f"
|
||
xls2ui -m ../models -o ../wwwroot foms "$f" 2>/dev/null || echo " skipped"
|
||
done
|
||
fi
|
||
|
||
# 7.5 生成模块 CRUD + 软链模块 wwwroot → 主 wwwroot/<模块名>
|
||
cd $cdir
|
||
for m in dbbackup filesync hostwatch; do
|
||
md=$cdir/pkgs/$m
|
||
# 生成模块 CRUD 页面
|
||
if [ -d "$md/json" ]; then
|
||
cd "$md/json"
|
||
for f in *.json; do
|
||
echo " xls2ui $m $f"
|
||
xls2ui -m ../models -o ../wwwroot "$m" "$f" 2>/dev/null || echo " skipped"
|
||
done
|
||
fi
|
||
# 软链模块 wwwroot → 主 wwwroot/<模块名>(URL 前缀 /dbbackup/ 等)
|
||
ln -sfn "$md/wwwroot" "$cdir/wwwroot/$m"
|
||
done
|
||
|
||
# 8. Create runtime dirs
|
||
mkdir -p $cdir/logs $cdir/files
|
||
|
||
echo "=== FOMS Build Complete ==="
|