novel-doomsday-resurgence/scripts/inkos_quality_monitor.sh

259 lines
6.5 KiB
Bash
Raw Normal View History

#!/bin/bash
# inkos质量监控和服务脚本
# 在inkos启动前检查配置启动后监控输出质量
set -e
INKOS_DIR="/root/.openclaw/workspace/tomato-novel"
BOOKS_DIR="$INKOS_DIR/books"
CONFIG_FILE="$INKOS_DIR/inkos_format_config.json"
MONITOR_SCRIPT="$INKOS_DIR/scripts/format_check_fix.py"
LOG_DIR="$INKOS_DIR/logs"
# 创建日志目录
mkdir -p "$LOG_DIR"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查inkos是否已安装
check_inkos_installation() {
if command -v inkos &> /dev/null; then
print_success "inkos已安装"
inkos --version
return 0
else
print_error "inkos未安装"
exit 1
fi
}
# 检查配置
check_configuration() {
print_info "检查配置..."
if [ -f "$CONFIG_FILE" ]; then
print_success "格式配置文件存在: $CONFIG_FILE"
# 验证配置文件格式
if python3 -m json.tool "$CONFIG_FILE" > /dev/null 2>&1; then
print_success "配置文件格式正确"
else
print_error "配置文件格式错误"
exit 1
fi
else
print_error "配置文件不存在: $CONFIG_FILE"
exit 1
fi
if [ -f "$MONITOR_SCRIPT" ]; then
print_success "监控脚本存在: $MONITOR_SCRIPT"
else
print_error "监控脚本不存在: $MONITOR_SCRIPT"
exit 1
fi
}
# 检查项目目录
check_project_directories() {
print_info "检查项目目录..."
if [ -d "$INKOS_DIR" ]; then
print_success "inkos项目目录存在: $INKOS_DIR"
else
print_error "inkos项目目录不存在: $INKOS_DIR"
exit 1
fi
if [ -d "$BOOKS_DIR" ]; then
print_success "书籍目录存在: $BOOKS_DIR"
else
print_error "书籍目录不存在: $BOOKS_DIR"
exit 1
fi
}
# 修复现有章节
fix_existing_chapters() {
print_info "修复现有章节格式..."
# 为每个书籍目录执行修复
for book_dir in "$BOOKS_DIR"/*; do
if [ -d "$book_dir" ] && [ -d "$book_dir/chapters" ]; then
book_name=$(basename "$book_dir")
print_info "修复书籍: $book_name"
# 检查当前书籍是否有第2-14章
chapters_dir="$book_dir/chapters"
if [ -d "$chapters_dir" ]; then
python3 "$MONITOR_SCRIPT" fix --directory "$chapters_dir" 2>&1 | tee -a "$LOG_DIR/fix_${book_name}_$(date +%Y%m%d).log"
fi
fi
done
print_success "现有章节修复完成"
}
# 启动质量监控
start_quality_monitor() {
print_info "启动质量监控服务..."
# 启动监控进程
python3 "$MONITOR_SCRIPT" monitor --directory "$BOOKS_DIR" > "$LOG_DIR/monitor_$(date +%Y%m%d_%H%M%S).log" 2>&1 &
MONITOR_PID=$!
echo $MONITOR_PID > "$LOG_DIR/quality_monitor.pid"
print_success "质量监控服务已启动 (PID: $MONITOR_PID)"
# 输出监控信息
print_info "监控服务日志: $LOG_DIR/monitor_*.log"
print_info "监控PID文件: $LOG_DIR/quality_monitor.pid"
}
# 启动inkos
start_inkos() {
print_info "启动inkos..."
# 切换到项目目录
cd "$INKOS_DIR"
# 启动inkos
print_info "正在启动inkos守护进程..."
inkos up 2>&1 | tee -a "$LOG_DIR/inkos_startup_$(date +%Y%m%d_%H%M%S).log" &
INKOS_PID=$!
echo $INKOS_PID > "$LOG_DIR/inkos.pid"
print_success "inkos守护进程已启动 (PID: $INKOS_PID)"
# 等待inkos启动完成
sleep 10
# 检查inkos状态
inkos status
}
# 显示状态
show_status() {
print_info "系统状态:"
# 检查监控服务
if [ -f "$LOG_DIR/quality_monitor.pid" ] && ps -p $(cat "$LOG_DIR/quality_monitor.pid") > /dev/null 2>&1; then
print_success "质量监控服务运行中 (PID: $(cat $LOG_DIR/quality_monitor.pid))"
else
print_warning "质量监控服务未运行"
fi
# 检查inkos进程
if [ -f "$LOG_DIR/inkos.pid" ] && ps -p $(cat "$LOG_DIR/inkos.pid") > /dev/null 2>&1; then
print_success "inkos守护进程运行中 (PID: $(cat $LOG_DIR/inkos.pid)"
inkos status
else
print_warning "inkos守护进程未运行"
fi
# 显示最近日志
print_info "最近日志文件:"
ls -la "$LOG_DIR"/*.log | head -5
}
# 停止服务
stop_services() {
print_info "停止服务..."
# 停止inkos
if [ -f "$LOG_DIR/inkos.pid" ]; then
pid=$(cat "$LOG_DIR/inkos.pid")
if ps -p "$pid" > /dev/null 2>&1; then
kill "$pid"
print_success "inkos守护进程已停止PID$pid"
fi
rm -f "$LOG_DIR/inkos.pid"
fi
# 停止质量监控
if [ -f "$LOG_DIR/quality_monitor.pid" ]; then
pid=$(cat "$LOG_DIR/quality_monitor.pid")
if ps -p "$pid" > /dev/null 2>&1; then
kill "$pid"
print_success "质量监控服务已停止PID$pid"
fi
rm -f "$LOG_DIR/quality_monitor.pid"
fi
print_success "所有服务已停止"
}
# 主函数
main() {
print_info "inkos质量监控系统启动..."
echo "=============================================="
case "${1:-start}" in
start)
check_inkos_installation
check_configuration
check_project_directories
fix_existing_chapters
start_quality_monitor
start_inkos
print_success"系统启动完成"
show_status
;;
stop)
stop_services
;;
restart)
stop_services
sleep 2
check_inkos_installation
check_configuration
check_project_directories
start_quality_monitor
start_inkos
print_success"系统重启完成"
show_status
;;
status)
show_status
;;
fix)
fix_existing_chapters
;;
*)
echo "用法:$0 {start|stop|restart|status|fix}"
exit 1
;;
esac
echo"=============================================="
}
# 运行主函数
main"$@"