diff --git a/deploy/profile-scripts/sync_profile_scripts.sh b/deploy/profile-scripts/sync_profile_scripts.sh index a62832a4..96d81d44 100644 --- a/deploy/profile-scripts/sync_profile_scripts.sh +++ b/deploy/profile-scripts/sync_profile_scripts.sh @@ -10,4 +10,7 @@ for f in "$SRC"/*.py; do ln -f "$f" "$DST/$name" count=$((count+1)) done -echo "synced $count scripts (hardlink)" \ No newline at end of file +ln -f "$SRC/sync_profile_scripts.sh" "$DST/sync_profile_scripts.sh" 2>/dev/null || true +echo "synced $count scripts (hardlink)" +mkdir -p /home/hmo/MoFin/gateway/logs +echo "$(date '+%F %T') synced $count scripts" >> /home/hmo/MoFin/gateway/logs/link_sync.log \ No newline at end of file diff --git a/static/mofin_health.json b/static/mofin_health.json index ed79a413..eb0c4893 100644 --- a/static/mofin_health.json +++ b/static/mofin_health.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-07-20 19:38:45", + "generated_at": "2026-07-20 20:18:37", "feature_tree": { "label": "MoFin 系统", "status": "ok", @@ -536,8 +536,8 @@ "name": "健康监控数据采集-每15分", "script": "mofin_health.py", "schedule": "*/15 9-16,20-22 * * 1-5", - "status": "error", - "last_run": "2026-07-20T16:45", + "status": "ok", + "last_run": "2026-07-20T20:15", "type": "no_agent", "profile": "position-analyst" } @@ -624,7 +624,7 @@ "script": "self_todo_executor.py", "schedule": "*/10 8-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T19:30", + "last_run": "2026-07-20T20:10", "type": "no_agent", "profile": "position-analyst" } @@ -711,7 +711,7 @@ "script": "strategy_review.py", "schedule": "0 20 * * 1-5", "status": "ok", - "last_run": "2026-07-17T20:00", + "last_run": "2026-07-20T20:00", "type": "no_agent", "profile": "position-analyst" } @@ -878,14 +878,14 @@ { "label": "Gateway看门狗-知微 (fix_gateway_port.py)", "desc": "", - "status": "error", + "status": "ok", "pipes": [ { "name": "Gateway看门狗-知微", "script": "fix_gateway_port.py", "schedule": "every 10m", - "status": "error", - "last_run": "2026-07-20T19:31", + "status": "ok", + "last_run": "2026-07-20T20:14", "type": "no_agent", "profile": "position-analyst" } @@ -942,14 +942,14 @@ { "label": "元监控-自检系统的自检-L4 (meta_watchdog.py)", "desc": "", - "status": null, + "status": "ok", "pipes": [ { "name": "元监控-自检系统的自检-L4", "script": "meta_watchdog.py", "schedule": "5 * * * *", - "status": null, - "last_run": "", + "status": "ok", + "last_run": "2026-07-20T20:05", "type": "no_agent", "profile": "position-analyst" } @@ -1028,8 +1028,8 @@ "desc": "建议执行时间线", "rows": 12735, "readers": [ - "mofin_db", - "advice_reconciliation" + "advice_reconciliation", + "mofin_db" ], "writers": [ "advice_reconciliation" @@ -1080,16 +1080,16 @@ "desc": "潜力股候选池(小果扫描产出)", "rows": 185, "readers": [ - "mofin_db", + "promote_candidates", "candidate_filter", "accumulation_scanner", - "promote_candidates" + "mofin_db" ], "writers": [ + "promote_candidates", "market_scanner", "candidate_filter", - "accumulation_scanner", - "promote_candidates" + "accumulation_scanner" ], "has_input": true, "has_output": true, @@ -1112,11 +1112,13 @@ "desc": "资金流缓存", "rows": 1, "readers": [ - "batch_reassess", + "per_stock_reassess", + "merge_third_db", "mofin_db", - "per_stock_reassess" + "batch_reassess" ], "writers": [ + "merge_third_db", "mofin_db" ], "has_input": true, @@ -1139,12 +1141,12 @@ "desc": "资金变动记录", "rows": 20, "readers": [ - "mofin_db", - "prepare_report_data" + "prepare_report_data", + "mofin_db" ], "writers": [ - "mofin_db", - "mo_data" + "mo_data", + "mofin_db" ], "has_input": true, "has_output": true, @@ -1193,25 +1195,25 @@ "desc": "每只股票的完整策略参数", "rows": 227, "readers": [ - "system_audit", - "run_all_tests", - "batch_reassess", "mofin_collect", - "mofin_db", - "generate_report", + "mo_data", "system_health_check", - "data_governance", - "stale_push_wlin", - "watchlist_auto_exit" + "pre-flight-check", + "system_audit", + "sync_decisions_to_db", + "run_all_tests", + "candidate_filter", + "accumulation_scanner", + "per_stock_reassess" ], "writers": [ "data_governance", - "watchlist_auto_exit", - "per_stock_reassess", "promote_candidates", + "mofin_db", "sync_decisions_to_db", + "watchlist_auto_exit", "batch_reassess", - "mofin_db" + "per_stock_reassess" ], "has_input": true, "has_output": true, @@ -1239,21 +1241,21 @@ "desc": "当前持仓(权威源)", "rows": 14, "readers": [ - "system_audit", - "prepare_recommendation", - "run_all_tests", + "server", + "xiaoguo_signal_consumer", "mofin_collect", - "trend_detector", + "mo_data", "system_health_check", - "mofin_db", - "stale_push_wlin", - "mo_alphasift_bridge", + "xiaoguo_scanner", + "refresh_mtf_cache", + "system_audit", + "run_all_tests", "candidate_filter" ], "writers": [ - "mofin_db", + "import_holding_xls", "price_monitor", - "import_holding_xls" + "mofin_db" ], "has_input": true, "has_output": true, @@ -1281,19 +1283,19 @@ "desc": "所有持仓+自选最新实时价", "rows": 232, "readers": [ + "generate_report", + "cron_health_monitor", + "mofin_db", "system_audit", "stale_push_wlin", - "verify_reassess_pipeline", "candidate_filter", - "mofin_db", "mo_data", - "generate_report", - "cron_health_monitor" + "verify_reassess_pipeline" ], "writers": [ - "mofin_db", + "price_monitor", "mo_data", - "price_monitor" + "mofin_db" ], "has_input": true, "has_output": true, @@ -1319,15 +1321,15 @@ "desc": "宏观上下文(大盘偏向/指数)", "rows": 81, "readers": [ + "xiaoguo_signal_consumer", "system_audit", "stale_push_wlin", "divergence_detector", - "xiaoguo_signal_consumer", - "per_stock_reassess", - "batch_reassess", "strategy_tree", + "batch_reassess", + "strategy_lifecycle", "stock_profile", - "strategy_lifecycle" + "per_stock_reassess" ], "writers": [ "refresh_macro_context" @@ -1382,15 +1384,17 @@ "desc": "大盘指数快照(每10分)", "rows": 989, "readers": [ - "system_audit", "market_scanner", - "mofin_query", - "market_screener", "trend_detector", + "mofin_query", "mofin_db", - "prepare_report_data" + "system_audit", + "prepare_report_data", + "market_screener", + "merge_third_db" ], "writers": [ + "merge_third_db", "mofin_db" ], "has_input": true, @@ -1416,13 +1420,13 @@ "desc": "多周期均线缓存", "rows": 64, "readers": [ - "mofin_db", + "technical_analysis", "multi_timeframe", - "technical_analysis" + "mofin_db" ], "writers": [ - "mofin_db", - "multi_timeframe" + "multi_timeframe", + "mofin_db" ], "has_input": true, "has_output": true, @@ -1447,18 +1451,18 @@ "desc": "总资产/现金/仓位汇总", "rows": 1, "readers": [ - "preflight_verify", + "check_db_state", + "mofin_db", + "prepare_report_data", + "import_holding_xls", "price_monitor", "mo_data", - "mofin_db", - "check_db_state", - "prepare_report_data", - "import_holding_xls" + "preflight_verify" ], "writers": [ - "mofin_db", + "import_holding_xls", "price_monitor", - "import_holding_xls" + "mofin_db" ], "has_input": true, "has_output": true, @@ -1485,21 +1489,21 @@ "desc": "价格区间突破事件日志", "rows": 6353, "readers": [ - "test_dual_write", - "test_raw_insert", - "check_price_events", "mofin_db", "test_db_only", + "backfill_price_events", "test_db_write", - "backfill_price_events" + "test_dual_write", + "check_price_events", + "test_raw_insert" ], "writers": [ - "test_dual_write", - "test_raw_insert", "mofin_db", "test_db_only", + "backfill_price_events", "test_db_write", - "backfill_price_events" + "test_dual_write", + "test_raw_insert" ], "has_input": true, "has_output": true, @@ -1521,9 +1525,9 @@ "desc": "行业信号(趋势检测产出)", "rows": 653, "readers": [ + "server", "mofin_news", "xiaoguo_news_processor", - "server", "trend_detector" ], "writers": [ @@ -1557,12 +1561,15 @@ "rows": 68408, "readers": [ "market_scanner", - "market_screener", "trend_detector", "mofin_db", + "market_screener", + "inspect_third_db", + "merge_third_db", "strategy_lifecycle" ], "writers": [ + "merge_third_db", "mofin_db" ], "has_input": true, @@ -1588,22 +1595,22 @@ "desc": "信号相关新闻", "rows": 1287, "readers": [ - "system_audit", - "xiaoguo_signal_consumer", - "per_stock_reassess", - "batch_reassess", - "intraday_health_check", "server", - "macro_signal_consumer" + "xiaoguo_signal_consumer", + "system_audit", + "macro_signal_consumer", + "intraday_health_check", + "batch_reassess", + "per_stock_reassess" ], "writers": [ - "divergence_detector", "xiaoguo_signal_consumer", - "mofin_news", "xiaoguo_news_processor", - "macro_context_collector", + "divergence_detector", + "macro_signal_consumer", + "mofin_news", "xiaoguo_scanner", - "macro_signal_consumer" + "macro_context_collector" ], "has_input": true, "has_output": true, @@ -1719,12 +1726,12 @@ "desc": "股票行业映射", "rows": 64, "readers": [ - "per_stock_reassess", - "mofin_news", - "xiaoguo_news_processor", "trend_detector", "mofin_db", - "strategy_lifecycle" + "xiaoguo_news_processor", + "mofin_news", + "strategy_lifecycle", + "per_stock_reassess" ], "writers": [ "mofin_db" @@ -1769,18 +1776,18 @@ "desc": "全量股票代码", "rows": 5575, "readers": [ - "accumulation_scanner", - "check_stocks_table", - "mofin_news", - "xiaoguo_news_processor", "trend_detector", "mofin_db", - "import_full_stocks" + "xiaoguo_news_processor", + "mofin_news", + "check_stocks_table", + "import_full_stocks", + "accumulation_scanner" ], "writers": [ - "mofin_db", "price_monitor", "import_full_stocks", + "mofin_db", "backfill_price_events" ], "has_input": true, @@ -1806,8 +1813,8 @@ "desc": "策略重评历史记录", "rows": 217, "readers": [ - "mofin_db", - "verify_reassess_pipeline" + "verify_reassess_pipeline", + "mofin_db" ], "writers": [ "mofin_collect" @@ -1861,19 +1868,21 @@ "desc": "自愈任务队列", "rows": 96, "readers": [ - "morning_health_check", "intraday_health_check", + "merge_third_db", + "strategy-staleness-check", "self_todo_executor", - "strategy-staleness-check" + "morning_health_check" ], "writers": [ - "self_todo_executor", - "preflight_verify", - "morning_health_check", + "cron_health_monitor", "mofin_collect", "intraday_health_check", + "merge_third_db", "strategy-staleness-check", - "cron_health_monitor" + "self_todo_executor", + "preflight_verify", + "morning_health_check" ], "has_input": true, "has_output": true, @@ -1920,20 +1929,20 @@ "desc": "自选股列表", "rows": 69, "readers": [ - "refresh_mtf_cache", - "stale_push_wlin", - "stock_quote", - "mo_alphasift_bridge", "xiaoguo_signal_consumer", - "per_stock_reassess", - "run_all_tests", - "mofin_collect", "trend_detector", + "stock_quote", + "refresh_mtf_cache", + "mofin_db", + "mofin_collect", + "stale_push_wlin", + "run_all_tests", + "mo_alphasift_bridge", "xiaoguo_scanner" ], "writers": [ - "mofin_db", - "per_stock_reassess" + "per_stock_reassess", + "mofin_db" ], "has_input": true, "has_output": true, @@ -1959,8 +1968,8 @@ "desc": "小果扫描跟踪", "rows": 527, "readers": [ - "server", - "xiaoguo_scanner" + "xiaoguo_scanner", + "server" ], "writers": [ "xiaoguo_scanner" @@ -2096,13 +2105,13 @@ { "name": "mofin_health.json", "desc": "健康监控数据", - "size_kb": 88.1, + "size_kb": 89.2, "readers": [ - "analyze_health", - "verify_health_json" + "verify_health_json", + "analyze_health" ], "writers": [], - "last_modified": "07-20 19:33", + "last_modified": "07-20 20:15", "warn": false, "migrated_to_db": null }, @@ -2233,8 +2242,8 @@ "type": "no_agent", "script": "fix_gateway_port.py", "schedule": "every 10m", - "status": "error", - "last_run": "2026-07-20T19:31:05", + "status": "ok", + "last_run": "2026-07-20T20:14:55", "profile": "position-analyst" }, { @@ -2261,7 +2270,7 @@ "script": "bot_monitor.sh", "schedule": "every 60m", "status": "ok", - "last_run": "2026-07-20T19:04:39", + "last_run": "2026-07-20T20:04:48", "profile": "default" }, { @@ -2288,7 +2297,7 @@ "script": null, "schedule": "0 * * * *", "status": "ok", - "last_run": "2026-07-20T19:07:01", + "last_run": "2026-07-20T20:13:48", "profile": "default" }, { @@ -2350,8 +2359,8 @@ "type": "no_agent", "script": "mofin_health.py", "schedule": "*/15 9-16,20-22 * * 1-5", - "status": "error", - "last_run": "2026-07-20T16:45:41", + "status": "ok", + "last_run": "2026-07-20T20:15:38", "profile": "position-analyst" }, { @@ -2359,8 +2368,8 @@ "type": "no_agent", "script": "meta_watchdog.py", "schedule": "5 * * * *", - "status": null, - "last_run": "None", + "status": "ok", + "last_run": "2026-07-20T20:05:28", "profile": "position-analyst" }, { @@ -2423,7 +2432,7 @@ "script": "", "schedule": "{'kind': 'cron', 'expr': '*/10 * * * *'}", "status": "ok", - "last_run": "2026-07-20T19:32:07", + "last_run": "2026-07-20T20:12:07", "profile": "default" }, { @@ -2548,8 +2557,8 @@ "type": "LLM", "script": null, "schedule": "0 20 * * 1-5", - "status": "error", - "last_run": "2026-07-17T20:05:17", + "status": "ok", + "last_run": "2026-07-20T20:15:00", "profile": "default" }, { @@ -2666,7 +2675,7 @@ "script": "strategy_review.py", "schedule": "0 20 * * 1-5", "status": "ok", - "last_run": "2026-07-17T20:00:46", + "last_run": "2026-07-20T20:00:31", "profile": "position-analyst" }, { @@ -2738,7 +2747,7 @@ "script": "self_todo_executor.py", "schedule": "*/10 8-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T19:30:25", + "last_run": "2026-07-20T20:10:29", "profile": "position-analyst" }, { @@ -2855,35 +2864,35 @@ "table": "mtf_cache", "label": "多周期均线缓存", "last_record": "07-20 17:08", - "age_hours": 2.5, + "age_hours": 3.2, "warn": false }, { "table": "macro_context_log", "label": "宏观上下文", "last_record": "07-20 15:31", - "age_hours": 4.1, + "age_hours": 4.8, "warn": false }, { "table": "market_snapshots", "label": "市场快照", "last_record": "07-20 15:50", - "age_hours": 3.8, + "age_hours": 4.5, "warn": false }, { "table": "live_prices", "label": "实时价格", "last_record": "07-20 18:12", - "age_hours": 1.4, + "age_hours": 2.1, "warn": false }, { "table": "price_events", "label": "价格事件", "last_record": "07-20 17:06", - "age_hours": 2.5, + "age_hours": 3.2, "warn": false } ], @@ -2966,13 +2975,13 @@ ] }, "meta_watchdog": { - "generated_at": "2026-07-20 19:30:35", + "generated_at": "2026-07-20 20:05:28", "status": "ok", "layers": [ { "layer": "L0 agents_health_check", "status": "ok", - "reason": "1min 前" + "reason": "0min 前" }, { "layer": "L1 functional_health", @@ -2982,7 +2991,7 @@ { "layer": "L2 hygiene_audit", "status": "ok", - "reason": "29min 前" + "reason": "64min 前" }, { "layer": "L1.5 mofin_health采集",