#!/usr/bin/env bash # 仅检查:战损、基地、地图战区 三块数据 # 用法: ./scripts/debug-panels-focus.sh set -e API_URL="${API_URL:-http://localhost:3001}" PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)" DB_PATH="${DB_PATH:-$PROJECT_ROOT/server/data.db}" echo "==========================================" echo "战损 / 基地 / 地图战区 — 数据检查" echo "API: $API_URL | DB: $DB_PATH" echo "==========================================" echo "" # ---------- API 连通 ---------- if ! curl -sf "$API_URL/api/health" >/dev/null 2>&1; then echo "✗ API 无响应,请先运行: npm run api" exit 1 fi echo "✓ API 正常" echo "" SIT=$(curl -sf "$API_URL/api/situation" 2>/dev/null || echo "{}") # ---------- 1. 战损 ---------- echo "[1] 战损 (combat_losses)" if command -v jq &>/dev/null; then us_k=$(echo "$SIT" | jq -r '.usForces.combatLosses.personnelCasualties.killed // "?"') us_w=$(echo "$SIT" | jq -r '.usForces.combatLosses.personnelCasualties.wounded // "?"') ir_k=$(echo "$SIT" | jq -r '.iranForces.combatLosses.personnelCasualties.killed // "?"') ir_w=$(echo "$SIT" | jq -r '.iranForces.combatLosses.personnelCasualties.wounded // "?"') echo " 美军 阵亡=$us_k 受伤=$us_w | 伊朗 阵亡=$ir_k 受伤=$ir_w" echo " conflictStats: $(echo "$SIT" | jq -c '.conflictStats')" else echo " (安装 jq 可显示详细数字)" fi if [[ -f "$DB_PATH" ]] && command -v sqlite3 &>/dev/null; then echo " 表 combat_losses:" sqlite3 "$DB_PATH" "SELECT side, personnel_killed, personnel_wounded, bases_destroyed, bases_damaged FROM combat_losses" 2>/dev/null | while read -r line; do echo " $line"; done fi echo " 数据来源: seed 初始;爬虫从新闻提取 combat_losses_delta 后 db_merge 增量叠加。不更新→检查是否跑 gdelt、提取器是否输出、新闻是否含伤亡数字。" echo "" # ---------- 2. 基地 ---------- echo "[2] 基地 (key_location)" if command -v jq &>/dev/null; then us_loc=$(echo "$SIT" | jq -r '.usForces.keyLocations | length') ir_loc=$(echo "$SIT" | jq -r '.iranForces.keyLocations | length') us_attacked=$(echo "$SIT" | jq -r '[.usForces.keyLocations[] | select(.status == "attacked")] | length') ir_attacked=$(echo "$SIT" | jq -r '[.iranForces.keyLocations[] | select(.status == "attacked")] | length') echo " 美军 据点=$us_loc 遭袭=$us_attacked | 伊朗 据点=$ir_loc 遭袭=$ir_attacked" fi if [[ -f "$DB_PATH" ]] && command -v sqlite3 &>/dev/null; then echo " 表 key_location 遭袭/有损伤的:" sqlite3 "$DB_PATH" "SELECT side, name, status, damage_level FROM key_location WHERE status != 'operational' OR damage_level IS NOT NULL LIMIT 10" 2>/dev/null | while read -r line; do echo " $line"; done fi echo " 数据来源: seed 写入全部据点;爬虫只更新 status/damage_level,需 name_keywords 与 name LIKE 匹配。不更新→检查新闻是否提基地遭袭、关键词与 seed name 是否一致。" echo "" # ---------- 3. 地图战区 ---------- echo "[3] 地图战区 (gdelt_events + conflict_stats)" if command -v jq &>/dev/null; then ev_cnt=$(echo "$SIT" | jq -r '.conflictEvents | length') echo " conflictEvents 条数: $ev_cnt" echo " conflictStats: $(echo "$SIT" | jq -c '.conflictStats')" fi if [[ -f "$DB_PATH" ]] && command -v sqlite3 &>/dev/null; then n_ev=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM gdelt_events" 2>/dev/null || echo "0") echo " 表 gdelt_events 行数: $n_ev" sqlite3 "$DB_PATH" "SELECT total_events, high_impact_events, estimated_casualties, estimated_strike_count FROM conflict_stats WHERE id = 1" 2>/dev/null | while read -r line; do echo " conflict_stats: $line"; done fi echo " 数据来源: GDELT API 写入;或 GDELT_DISABLED=1 时由 situation_update 回填。无点→跑 gdelt 或开启 RSS 回填。" echo "" echo "==========================================" echo "详细说明与排查顺序见: docs/DEBUG_战损_基地_地图.md" echo "=========================================="