From 0f404c07874d5848369f46ca86b47b6bf9a98097 Mon Sep 17 00:00:00 2001 From: oscarz Date: Wed, 25 Jun 2025 18:45:42 +0800 Subject: [PATCH] modify scripts --- tools/grammar_stat.sh | 75 +++++++++++++++++++ tools/monitor.sh | 165 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 240 insertions(+) create mode 100644 tools/grammar_stat.sh create mode 100644 tools/monitor.sh diff --git a/tools/grammar_stat.sh b/tools/grammar_stat.sh new file mode 100644 index 0000000..e8e0b82 --- /dev/null +++ b/tools/grammar_stat.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Configuration +LOG_FILE="/usr/local/aigrammar/log/app.log" +PY_SCRIPT="/home/ubuntu/projects/devops/tools/send_to_wecom.py" +TODAY=$(date +%Y-%m-%d) +YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) +FILTERED_LOG="${LOG_FILE%.log}_${YESTERDAY}.log" + +# Check if log file exists +if [ ! -f "$LOG_FILE" ]; then + echo "Error: Log file not found - $LOG_FILE" >&2 + exit 1 +fi + +# Check if Python script exists and is executable +if [ ! -f "$PY_SCRIPT" ]; then + echo "Error: Python script not found or not executable - $PY_SCRIPT" >&2 + exit 1 +fi + +# Create filtered log file +echo "Filtering yesterday's logs..." +#grep "$TODAY" "$LOG_FILE" > "$FILTERED_LOG" +grep "$YESTERDAY" "$LOG_FILE" > "$FILTERED_LOG" + +# Check if filtered log has content +if [ ! -s "$FILTERED_LOG" ]; then + echo "Warning: No logs found for $YESTERDAY" + content="Date: $YESTERDAY\nNo log records found" + python3 "$PY_SCRIPT" "$content" + exit 0 +fi + +echo "Filtered log created: $FILTERED_LOG" + +# Statistics +echo "Calculating statistics..." +request_total=$(grep -E "\"level\":\"info\"" "$FILTERED_LOG" | grep "\"func\":\"main.parseToken\"" | wc -l) +grammar_total=$(grep -v "\"level\":\"debug\"" "$FILTERED_LOG" | grep "\"func\":\"main.GrammarHandler\"" | wc -l) +translate_total=$(grep -v "\"level\":\"debug\"" "$FILTERED_LOG" | grep "\"func\":\"main.TranslateHandler\"" | wc -l) +words_total=$(grep -v "\"level\":\"debug\"" "$FILTERED_LOG" | grep "\"func\":\"main.WordsHandler\"" | wc -l) +free_limit_total=$(grep -E "\"level\":\"warn\"" "$FILTERED_LOG" | grep "\"func\":\"main.queryUserBenefits\"" | wc -l) +error_total=$(grep "\"level\":\"error\"" "$FILTERED_LOG" | wc -l) + +# Generate content to send +content="Date: $YESTERDAY +Total Requests: $request_total +Grammar Check Requests: $grammar_total +Translation Requests: $translate_total +Words Requests: $words_total +Free Quota Exceeded: $free_limit_total +Total Errors: $error_total" + +# Print statistics +echo "===== Statistics =====" +echo -e "$content" + +# Send to WeCom +echo "Sending to WeChat Work..." +python3 "$PY_SCRIPT" "$content" + +# Check result +if [ $? -eq 0 ]; then + echo "Successfully sent to WeChat Work" +else + echo "Error: Failed to send to WeChat Work" >&2 + exit 1 +fi + +# remove tmp logfile +rm -rf "$FILTERED_LOG" + +echo "Script execution completed" +exit 0 \ No newline at end of file diff --git a/tools/monitor.sh b/tools/monitor.sh new file mode 100644 index 0000000..19810d3 --- /dev/null +++ b/tools/monitor.sh @@ -0,0 +1,165 @@ +#!/bin/bash + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +NC='\033[0m' # 无颜色 + +# 定义命令映射和函数 +declare -A COMMAND_MAP +declare -a COMMAND_ORDER # 记录命令注册顺序,用于帮助信息 + +# 注册命令函数并添加到映射 +register_command() { + local cmd_name=$1 + local cmd_desc=$2 + COMMAND_MAP[$cmd_name]=$cmd_desc + COMMAND_ORDER+=($cmd_name) +} + +# 执行远程命令的通用函数 +execute_remote() { + local server=$1 + local user=$2 + local ssh_opts=$3 + local cmd=$4 + local desc=$5 + + echo -e "${YELLOW}执行命令: ${desc}${NC}" + echo "----------------------------------------" + echo -e "${YELLOW}服务器: ${user}@${server}${NC}" + + # 执行远程命令 + RESULT=$(ssh $ssh_opts $user@$server "$cmd") + EXIT_CODE=$? + + # 输出结果 + if [ $EXIT_CODE -eq 0 ]; then + echo -e "${GREEN}命令执行成功${NC}" + echo "$RESULT" + + # 执行本地脚本并将远程命令结果作为输入 + python3 ./send_to_wecom.py "$RESULT" + return 0 + else + echo -e "${RED}命令执行失败,退出代码: $EXIT_CODE${NC}" + return $EXIT_CODE + fi +} + + +# 定义具体命令函数 +cmd_javbus() { + local SERVER="170.106.191.35" + local USER="root" + local SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10" + + execute_remote "$SERVER" "$USER" "$SSH_OPTS" \ + "cd /root/projects/resources && python3 -m src.monitor.check_javbus" \ + "检查服务状态" +} + +# 定义具体命令函数 +cmd_check_status() { + local SERVER="170.106.191.35" + local USER="root" + local SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10" + + execute_remote "$SERVER" "$USER" "$SSH_OPTS" \ + "cd ~/resources/aabook/src/ && python3 ./check_status.py" \ + "检查服务状态" +} + +cmd_restart_service() { + local SERVER="170.106.191.35" + local USER="root" + local SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10" + + execute_remote "$SERVER" "$USER" "$SSH_OPTS" \ + "cd ~/resources/aabook/src/ && python3 ./restart_service.py" \ + "重启服务" +} + +cmd_fetch_data() { + local SERVER="170.106.191.36" # 示例:使用不同的服务器 + local USER="admin" # 示例:使用不同的用户 + local SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10" + + execute_remote "$SERVER" "$USER" "$SSH_OPTS" \ + "cd ~/resources/aabook/src/ && python3 ./fetch_data.py" \ + "获取最新数据" +} + +cmd_backup_db() { + local SERVER="170.106.191.35" + local USER="root" + local SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10" + + execute_remote "$SERVER" "$USER" "$SSH_OPTS" \ + "cd ~/resources/aabook/db/ && ./backup_db.sh" \ + "备份数据库" +} + +# 注册命令 +register_command "check" "检查服务状态" +register_command "restart" "重启服务" +register_command "fetch" "获取最新数据" +register_command "backup" "备份数据库" +register_command "javbus" "检查服务状态" + +# 显示帮助信息 +show_help() { + echo "用法: $0 [命令1] [命令2] [...]" + echo "可用命令:" + + for cmd in "${COMMAND_ORDER[@]}"; do + printf " %-10s %s\n" "$cmd" "${COMMAND_MAP[$cmd]}" + done + + echo + echo "示例:" + echo " $0 check fetch" + echo " $0 backup" +} + +# 主函数 +main() { + # 检查是否提供了命令参数 + if [ $# -eq 0 ]; then + show_help + exit 1 + fi + + local success=true + + # 处理每个命令参数 + for cmd in "$@"; do + # 检查命令是否存在 + if [[ -z "${COMMAND_MAP[$cmd]}" ]]; then + echo -e "${RED}错误: 未知命令 '$cmd'${NC}" + show_help + exit 1 + fi + + # 执行对应的命令函数 + cmd_${cmd} + if [ $? -ne 0 ]; then + success=false + fi + + echo + done + + # 输出总体执行结果 + if [ "$success" = true ]; then + echo -e "${GREEN}所有命令执行成功${NC}" + exit 0 + else + echo -e "${RED}部分命令执行失败${NC}" + exit 1 + fi +} + +# 执行主函数 +main "$@" \ No newline at end of file