pPowerMangerHost:反馈数据 SQLite 落库,新增历史查询 API 与曲线绘图
- 新增 FeedbackStore(sqlite3 封装),fb_log 表按消息落盘,环形时间保留 - HostSim 每次收到反馈即批量写库,支持 DB_FILE/FB_LOG_KEEP_SECONDS 等配置 - 新增 /api/history、/api/rawlog 接口;曲线页新增历史数据加载 - 数据库目录不存在时自动创建;新增板卡原生编译脚本 scripts/build-board.sh
This commit is contained in:
Executable
+164
@@ -0,0 +1,164 @@
|
||||
#!/bin/bash
|
||||
#=======================================================================
|
||||
# FILE: scripts/build-board.sh
|
||||
# DESC: 把源码同步到目标板卡 (RK3588 / Ubuntu 22.04),在板卡原生编译
|
||||
# (aarch64 直编,比本地 QEMU 模拟快约 10 倍),并把产物部署到
|
||||
# /root/work/h100/bin/,可选重启 systemd 服务。
|
||||
#
|
||||
# 用法:
|
||||
# ./scripts/build-board.sh # 同步+编译+部署(不重启)
|
||||
# ./scripts/build-board.sh --start # 编译后重启 3 个服务
|
||||
# ./scripts/build-board.sh --clean # 板卡上重新 cmake 再编译
|
||||
# ./scripts/build-board.sh --jobs 4 # 指定并行度(默认板卡 nproc)
|
||||
#
|
||||
# 参数:
|
||||
# --host <ip> 目标主机(默认 192.168.0.223)
|
||||
# --user <user> 登录用户(默认 root)
|
||||
# --board-src <dir> 板卡源码目录(默认 /root/work/h100/src)
|
||||
# --board-bin <dir> 板卡部署目录(默认 /root/work/h100/bin)
|
||||
# --jobs <n> 编译并行度(默认板卡 nproc)
|
||||
# --start 编译部署后重启服务
|
||||
# --clean 先重新 cmake(配置变更时用)
|
||||
# -h, --help 显示帮助
|
||||
#
|
||||
# 前置: 板卡已配免密 SSH,且有编译环境(cmake/g++/MOOS/jsoncpp),
|
||||
# 源码已能本地编译(本脚本只负责同步+板卡编译)。
|
||||
#=======================================================================
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
|
||||
|
||||
HOST="192.168.0.223"
|
||||
USER="root"
|
||||
BOARD_SRC="/root/work/h100/src"
|
||||
BOARD_BIN="/root/work/h100/bin"
|
||||
JOBS=""
|
||||
DO_START=0
|
||||
DO_CLEAN=0
|
||||
|
||||
SERVICES=(moosdb pPowerManger pPowerMangerHost)
|
||||
|
||||
info() { printf '\033[1;36m[build-board]\033[0m %s\n' "$*"; }
|
||||
ok() { printf '\033[1;32m[build-board]\033[0m %s\n' "$*"; }
|
||||
warn() { printf '\033[1;33m[build-board]\033[0m %s\n' "$*"; }
|
||||
err() { printf '\033[1;31m[build-board]\033[0m %s\n' "$*"; }
|
||||
|
||||
usage() {
|
||||
sed -n '2,29p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
|
||||
exit 0
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# 参数解析
|
||||
#-------------------------------------------------------------------
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--host) [ $# -ge 2 ] || { err "--host 需要参数"; exit 1; }; HOST="$2"; shift 2 ;;
|
||||
--user) [ $# -ge 2 ] || { err "--user 需要参数"; exit 1; }; USER="$2"; shift 2 ;;
|
||||
--board-src) [ $# -ge 2 ] || { err "--board-src 需要参数"; exit 1; }; BOARD_SRC="$2"; shift 2 ;;
|
||||
--board-bin) [ $# -ge 2 ] || { err "--board-bin 需要参数"; exit 1; }; BOARD_BIN="$2"; shift 2 ;;
|
||||
--jobs) [ $# -ge 2 ] || { err "--jobs 需要参数"; exit 1; }; JOBS="$2"; shift 2 ;;
|
||||
--start) DO_START=1; shift ;;
|
||||
--clean) DO_CLEAN=1; shift ;;
|
||||
-h|--help) usage ;;
|
||||
*) err "未知参数: $1(见 --help)"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
SSH_TARGET="${USER}@${HOST}"
|
||||
SSH="ssh -o BatchMode=yes -o ConnectTimeout=5"
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# 1. 前置检查
|
||||
#-------------------------------------------------------------------
|
||||
if ! ${SSH} "${SSH_TARGET}" 'true' 2>/dev/null; then
|
||||
err "无法免密 SSH 到 ${SSH_TARGET}"
|
||||
err "请先配置免密登录: ssh-copy-id ${SSH_TARGET}"
|
||||
exit 1
|
||||
fi
|
||||
ok "SSH 连接正常: ${SSH_TARGET}"
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# 2. 同步源码到板卡(排除构建产物 / git / 数据)
|
||||
#-------------------------------------------------------------------
|
||||
info "同步源码到板卡 ${BOARD_SRC} ..."
|
||||
rsync -az --delete \
|
||||
--exclude='build/' \
|
||||
--exclude='build-arm64/' \
|
||||
--exclude='build-native/' \
|
||||
--exclude='build-nosa-test/' \
|
||||
--exclude='bin/' \
|
||||
--exclude='.git/' \
|
||||
--exclude='.cache/' \
|
||||
--exclude='reports/' \
|
||||
--exclude='*.log' \
|
||||
--exclude='*.db' \
|
||||
--exclude='CMakeCache.txt' \
|
||||
"${PROJECT_ROOT}/" "${SSH_TARGET}:${BOARD_SRC}/" || { err "rsync 源码失败"; exit 1; }
|
||||
ok "源码已同步"
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# 3. 板卡原生编译
|
||||
#-------------------------------------------------------------------
|
||||
if [ "${DO_CLEAN}" = "1" ]; then
|
||||
info "重新 cmake(--clean)..."
|
||||
${SSH} "${SSH_TARGET}" "rm -rf ${BOARD_SRC}/build-native && mkdir -p ${BOARD_SRC}/build-native && \
|
||||
cd ${BOARD_SRC}/build-native && cmake -DCMAKE_BUILD_TYPE=Release .." \
|
||||
|| { err "cmake 失败"; exit 1; }
|
||||
ok "cmake 完成"
|
||||
else
|
||||
${SSH} "${SSH_TARGET}" "mkdir -p ${BOARD_SRC}/build-native"
|
||||
# 若首次未配置过则先 cmake
|
||||
if ! ${SSH} "${SSH_TARGET}" "[ -f ${BOARD_SRC}/build-native/Makefile ]"; then
|
||||
info "首次编译,先 cmake ..."
|
||||
${SSH} "${SSH_TARGET}" "cd ${BOARD_SRC}/build-native && cmake -DCMAKE_BUILD_TYPE=Release .." \
|
||||
|| { err "cmake 失败"; exit 1; }
|
||||
ok "cmake 完成"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "${JOBS}" ]; then
|
||||
JOBS="$(${SSH} "${SSH_TARGET}" nproc)"
|
||||
fi
|
||||
|
||||
info "板卡编译 (make -j${JOBS}) ..."
|
||||
if ! ${SSH} "${SSH_TARGET}" "cd ${BOARD_SRC}/build-native && make -j${JOBS}"; then
|
||||
err "板卡编译失败(见上方输出)"
|
||||
exit 1
|
||||
fi
|
||||
ok "板卡编译完成"
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# 4. 部署产物到板卡运行目录
|
||||
#-------------------------------------------------------------------
|
||||
info "部署产物到 ${BOARD_BIN}/ ..."
|
||||
${SSH} "${SSH_TARGET}" "mkdir -p ${BOARD_BIN} && \
|
||||
cp -f ${BOARD_SRC}/bin/pPowerManger ${BOARD_BIN}/pPowerManger && \
|
||||
cp -f ${BOARD_SRC}/bin/pPowerMangerHost ${BOARD_BIN}/pPowerMangerHost && \
|
||||
chmod +x ${BOARD_BIN}/pPowerManger ${BOARD_BIN}/pPowerMangerHost" \
|
||||
|| { err "部署产物失败"; exit 1; }
|
||||
ok "产物已部署"
|
||||
|
||||
echo ""
|
||||
ok "产物: ${BOARD_BIN}/pPowerManger (aarch64)"
|
||||
${SSH} "${SSH_TARGET}" "file ${BOARD_BIN}/pPowerManger | cut -c1-60"
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
# 5. 可选重启服务
|
||||
#-------------------------------------------------------------------
|
||||
if [ "${DO_START}" = "1" ]; then
|
||||
info "重启服务 ..."
|
||||
${SSH} "${SSH_TARGET}" "systemctl restart ${SERVICES[*]}" \
|
||||
|| { err "重启服务失败"; exit 1; }
|
||||
sleep 3
|
||||
ok "服务状态: $(${SSH} "${SSH_TARGET}" "systemctl is-active ${SERVICES[*]}")"
|
||||
else
|
||||
echo ""
|
||||
info "未重启服务。需要重启请加 --start 或手动:"
|
||||
echo " systemctl restart ${SERVICES[*]}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
ok "完成。"
|
||||
Reference in New Issue
Block a user