From e3c68b5133c1d3927618794dc8d932bc1f8855f1 Mon Sep 17 00:00:00 2001 From: zhaojie <1710884619@qq.com> Date: Fri, 12 Dec 2025 13:39:43 +0800 Subject: [PATCH] Update config, core models, and web app; refresh Python 3.11 cache This commit includes general updates to application configuration, core data models, and various web application components (knowledge base, error handling, static assets, and websocket server). It also refreshes the Python 3.11 bytecode cache, likely due to underlying code changes and environment alignment. --- database_init_report.json | 9 + local_test.db | Bin 65536 -> 90112 bytes logs/dashboard.log | 4762 +++++++++++++++++ logs/tsp_assistant.log | 9 + src/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 180 bytes src/__pycache__/__init__.cpython-311.pyc | Bin 200 -> 200 bytes .../agent_assistant.cpython-310.pyc | Bin 0 -> 12743 bytes .../agent_assistant.cpython-311.pyc | Bin 23044 -> 23044 bytes src/__pycache__/main.cpython-310.pyc | Bin 0 -> 16326 bytes src/__pycache__/main.cpython-311.pyc | Bin 30429 -> 30429 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 131 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 149 -> 149 bytes .../ai_success_monitor.cpython-310.pyc | Bin 0 -> 13045 bytes .../ai_success_monitor.cpython-311.pyc | Bin 26012 -> 26012 bytes .../__pycache__/alert_system.cpython-310.pyc | Bin 0 -> 12677 bytes .../__pycache__/alert_system.cpython-311.pyc | Bin 24024 -> 24533 bytes .../analytics_manager.cpython-310.pyc | Bin 0 -> 8776 bytes .../analytics_manager.cpython-311.pyc | Bin 18294 -> 18294 bytes .../monitor_service.cpython-310.pyc | Bin 0 -> 7863 bytes .../monitor_service.cpython-311.pyc | Bin 13576 -> 13576 bytes .../__pycache__/token_monitor.cpython-310.pyc | Bin 0 -> 10891 bytes .../__pycache__/token_monitor.cpython-311.pyc | Bin 21371 -> 21371 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 128 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 146 -> 146 bytes src/config/__pycache__/config.cpython-310.pyc | Bin 0 -> 2041 bytes src/config/__pycache__/config.cpython-311.pyc | Bin 2689 -> 2689 bytes .../unified_config.cpython-310.pyc | Bin 0 -> 9506 bytes .../unified_config.cpython-311.pyc | Bin 16950 -> 16950 bytes src/config/config.py | 4 +- src/core/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 126 bytes src/core/__pycache__/__init__.cpython-311.pyc | Bin 144 -> 144 bytes .../__pycache__/auth_manager.cpython-310.pyc | Bin 0 -> 4723 bytes .../__pycache__/auth_manager.cpython-311.pyc | Bin 8336 -> 8336 bytes .../backup_manager.cpython-310.pyc | Bin 0 -> 7580 bytes .../backup_manager.cpython-311.pyc | Bin 15233 -> 15233 bytes .../__pycache__/cache_manager.cpython-310.pyc | Bin 0 -> 7111 bytes .../__pycache__/cache_manager.cpython-311.pyc | Bin 13279 -> 13279 bytes src/core/__pycache__/database.cpython-310.pyc | Bin 0 -> 4837 bytes src/core/__pycache__/database.cpython-311.pyc | Bin 9658 -> 8320 bytes .../__pycache__/llm_client.cpython-310.pyc | Bin 0 -> 4483 bytes .../__pycache__/llm_client.cpython-311.pyc | Bin 7619 -> 7619 bytes src/core/__pycache__/models.cpython-310.pyc | Bin 0 -> 6995 bytes src/core/__pycache__/models.cpython-311.pyc | Bin 13202 -> 13380 bytes .../query_optimizer.cpython-310.pyc | Bin 0 -> 13408 bytes .../query_optimizer.cpython-311.pyc | Bin 27019 -> 27019 bytes .../__pycache__/redis_manager.cpython-310.pyc | Bin 0 -> 2795 bytes .../__pycache__/redis_manager.cpython-311.pyc | Bin 4864 -> 4864 bytes .../system_optimizer.cpython-310.pyc | Bin 0 -> 12508 bytes .../system_optimizer.cpython-311.pyc | Bin 24397 -> 24397 bytes src/core/models.py | 3 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 130 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 148 -> 148 bytes .../conversation_history.cpython-310.pyc | Bin 0 -> 16943 bytes .../conversation_history.cpython-311.pyc | Bin 35616 -> 35616 bytes .../dialogue_manager.cpython-310.pyc | Bin 0 -> 12282 bytes .../dialogue_manager.cpython-311.pyc | Bin 24243 -> 24243 bytes .../__pycache__/realtime_chat.cpython-310.pyc | Bin 0 -> 14196 bytes .../__pycache__/realtime_chat.cpython-311.pyc | Bin 26676 -> 26676 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 218 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 246 -> 246 bytes .../ai_suggestion_service.cpython-310.pyc | Bin 0 -> 15289 bytes .../ai_suggestion_service.cpython-311.pyc | Bin 25240 -> 25240 bytes .../config_manager.cpython-310.pyc | Bin 0 -> 7167 bytes .../config_manager.cpython-311.pyc | Bin 14525 -> 14525 bytes .../__pycache__/feishu_client.cpython-310.pyc | Bin 0 -> 8758 bytes .../__pycache__/feishu_client.cpython-311.pyc | Bin 14651 -> 14651 bytes .../feishu_permission_checker.cpython-310.pyc | Bin 0 -> 7002 bytes .../feishu_permission_checker.cpython-311.pyc | Bin 13347 -> 13347 bytes .../flexible_field_mapper.cpython-310.pyc | Bin 0 -> 12391 bytes .../flexible_field_mapper.cpython-311.pyc | Bin 21161 -> 21161 bytes .../workorder_sync.cpython-310.pyc | Bin 0 -> 14878 bytes .../workorder_sync.cpython-311.pyc | Bin 29895 -> 29895 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 136 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 154 -> 154 bytes .../knowledge_manager.cpython-310.pyc | Bin 0 -> 11450 bytes .../knowledge_manager.cpython-311.pyc | Bin 24205 -> 24205 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 127 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 145 -> 145 bytes src/utils/__pycache__/helpers.cpython-310.pyc | Bin 0 -> 6231 bytes src/utils/__pycache__/helpers.cpython-311.pyc | Bin 11125 -> 11125 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 260 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 306 -> 306 bytes .../vehicle_data_manager.cpython-310.pyc | Bin 0 -> 8162 bytes .../vehicle_data_manager.cpython-311.pyc | Bin 16237 -> 16237 bytes src/web/__pycache__/app.cpython-310.pyc | Bin 17260 -> 6767 bytes src/web/__pycache__/app.cpython-311.pyc | Bin 12831 -> 12831 bytes .../error_handlers.cpython-310.pyc | Bin 2878 -> 3025 bytes .../error_handlers.cpython-311.pyc | Bin 5332 -> 5405 bytes .../service_manager.cpython-310.pyc | Bin 3135 -> 3135 bytes .../service_manager.cpython-311.pyc | Bin 4589 -> 4589 bytes .../websocket_server.cpython-310.pyc | Bin 8198 -> 8297 bytes .../websocket_server.cpython-311.pyc | Bin 16441 -> 15786 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 216 -> 216 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 244 -> 244 bytes .../__pycache__/agent.cpython-310.pyc | Bin 0 -> 7382 bytes .../__pycache__/agent.cpython-311.pyc | Bin 15050 -> 15050 bytes .../__pycache__/alerts.cpython-310.pyc | Bin 3165 -> 3165 bytes .../__pycache__/alerts.cpython-311.pyc | Bin 6526 -> 6526 bytes .../__pycache__/analytics.cpython-310.pyc | Bin 0 -> 1549 bytes .../__pycache__/analytics.cpython-311.pyc | Bin 2464 -> 2464 bytes .../__pycache__/auth.cpython-310.pyc | Bin 0 -> 3350 bytes .../__pycache__/auth.cpython-311.pyc | Bin 6308 -> 6308 bytes .../__pycache__/conversations.cpython-310.pyc | Bin 9488 -> 9488 bytes .../__pycache__/conversations.cpython-311.pyc | Bin 20594 -> 20594 bytes .../__pycache__/core.cpython-310.pyc | Bin 11525 -> 11525 bytes .../__pycache__/core.cpython-311.pyc | Bin 26783 -> 26783 bytes .../__pycache__/feishu_sync.cpython-310.pyc | Bin 10568 -> 10568 bytes .../__pycache__/feishu_sync.cpython-311.pyc | Bin 22232 -> 22232 bytes .../__pycache__/knowledge.cpython-310.pyc | Bin 6034 -> 6034 bytes .../__pycache__/knowledge.cpython-311.pyc | Bin 12951 -> 13014 bytes .../__pycache__/monitoring.cpython-310.pyc | Bin 11252 -> 11252 bytes .../__pycache__/monitoring.cpython-311.pyc | Bin 24964 -> 24964 bytes .../__pycache__/system.cpython-310.pyc | Bin 13309 -> 13309 bytes .../__pycache__/system.cpython-311.pyc | Bin 28672 -> 28672 bytes .../__pycache__/test.cpython-310.pyc | Bin 0 -> 1555 bytes .../__pycache__/test.cpython-311.pyc | Bin 2603 -> 2603 bytes .../__pycache__/vehicle.cpython-310.pyc | Bin 0 -> 2904 bytes .../__pycache__/vehicle.cpython-311.pyc | Bin 6048 -> 6048 bytes .../__pycache__/workorders.cpython-310.pyc | Bin 16586 -> 17387 bytes .../__pycache__/workorders.cpython-311.pyc | Bin 38549 -> 38549 bytes src/web/blueprints/knowledge.py | 1 + src/web/error_handlers.py | 18 +- src/web/static/js/chat.js | 2 +- src/web/static/js/dashboard.js | 2 +- src/web/websocket_server.py | 33 +- test.py | 19 + tsp_assistant.db | Bin 65536 -> 65536 bytes 127 files changed, 4826 insertions(+), 36 deletions(-) create mode 100644 database_init_report.json create mode 100644 logs/tsp_assistant.log create mode 100644 src/__pycache__/__init__.cpython-310.pyc create mode 100644 src/__pycache__/agent_assistant.cpython-310.pyc create mode 100644 src/__pycache__/main.cpython-310.pyc create mode 100644 src/analytics/__pycache__/__init__.cpython-310.pyc create mode 100644 src/analytics/__pycache__/ai_success_monitor.cpython-310.pyc create mode 100644 src/analytics/__pycache__/alert_system.cpython-310.pyc create mode 100644 src/analytics/__pycache__/analytics_manager.cpython-310.pyc create mode 100644 src/analytics/__pycache__/monitor_service.cpython-310.pyc create mode 100644 src/analytics/__pycache__/token_monitor.cpython-310.pyc create mode 100644 src/config/__pycache__/__init__.cpython-310.pyc create mode 100644 src/config/__pycache__/config.cpython-310.pyc create mode 100644 src/config/__pycache__/unified_config.cpython-310.pyc create mode 100644 src/core/__pycache__/__init__.cpython-310.pyc create mode 100644 src/core/__pycache__/auth_manager.cpython-310.pyc create mode 100644 src/core/__pycache__/backup_manager.cpython-310.pyc create mode 100644 src/core/__pycache__/cache_manager.cpython-310.pyc create mode 100644 src/core/__pycache__/database.cpython-310.pyc create mode 100644 src/core/__pycache__/llm_client.cpython-310.pyc create mode 100644 src/core/__pycache__/models.cpython-310.pyc create mode 100644 src/core/__pycache__/query_optimizer.cpython-310.pyc create mode 100644 src/core/__pycache__/redis_manager.cpython-310.pyc create mode 100644 src/core/__pycache__/system_optimizer.cpython-310.pyc create mode 100644 src/dialogue/__pycache__/__init__.cpython-310.pyc create mode 100644 src/dialogue/__pycache__/conversation_history.cpython-310.pyc create mode 100644 src/dialogue/__pycache__/dialogue_manager.cpython-310.pyc create mode 100644 src/dialogue/__pycache__/realtime_chat.cpython-310.pyc create mode 100644 src/integrations/__pycache__/__init__.cpython-310.pyc create mode 100644 src/integrations/__pycache__/ai_suggestion_service.cpython-310.pyc create mode 100644 src/integrations/__pycache__/config_manager.cpython-310.pyc create mode 100644 src/integrations/__pycache__/feishu_client.cpython-310.pyc create mode 100644 src/integrations/__pycache__/feishu_permission_checker.cpython-310.pyc create mode 100644 src/integrations/__pycache__/flexible_field_mapper.cpython-310.pyc create mode 100644 src/integrations/__pycache__/workorder_sync.cpython-310.pyc create mode 100644 src/knowledge_base/__pycache__/__init__.cpython-310.pyc create mode 100644 src/knowledge_base/__pycache__/knowledge_manager.cpython-310.pyc create mode 100644 src/utils/__pycache__/__init__.cpython-310.pyc create mode 100644 src/utils/__pycache__/helpers.cpython-310.pyc create mode 100644 src/vehicle/__pycache__/__init__.cpython-310.pyc create mode 100644 src/vehicle/__pycache__/vehicle_data_manager.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/agent.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/analytics.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/auth.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/test.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/vehicle.cpython-310.pyc create mode 100644 test.py diff --git a/database_init_report.json b/database_init_report.json new file mode 100644 index 0000000..2b8bc3f --- /dev/null +++ b/database_init_report.json @@ -0,0 +1,9 @@ +{ + "init_time": "2025-12-12T13:31:25.459591", + "database_version": "SQLite 3.43.1", + "database_url": "sqlite:///tsp_assistant.db", + "migrations_applied": 0, + "tables_created": 9, + "initial_data_inserted": true, + "verification_passed": true +} \ No newline at end of file diff --git a/local_test.db b/local_test.db index 12443a37cab57ae055f89857ca6d5bad7a938ff9..6354edfba2ab2e3cb6de991b0c9ef56d87fcc27e 100644 GIT binary patch literal 90112 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 delta 50 zcmZoTz}nEjGC`V^i-CbbV4{LOBiF`+1@?;y1Q@wCGZy^k2UE-rn^_9}+HYoj@LwJP DW~~q9 diff --git a/logs/dashboard.log b/logs/dashboard.log index aabaf24..3e3ccfd 100644 --- a/logs/dashboard.log +++ b/logs/dashboard.log @@ -1228,3 +1228,4765 @@ TypeError: WebSocketServer.start_server..handle_client_with_cors() missi 2025-12-08 00:33:14,420 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:14] "GET /api/alerts HTTP/1.1" 200 - 2025-12-08 00:33:27,392 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:27] "GET /api/monitor/status HTTP/1.1" 200 - 2025-12-08 00:33:29,903 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:29] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:56:18,014 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-08 00:56:18,825 - src.core.database - INFO - 数据库初始化成功 +2025-12-08 00:56:18,831 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-08 00:56:27,849 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-08 00:56:27,869 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-08 00:56:28,009 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.3.12.3:5000 +2025-12-08 00:56:28,009 - werkzeug - INFO - Press CTRL+C to quit +2025-12-08 00:56:45,294 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:45] "GET / HTTP/1.1" 200 - +2025-12-08 00:56:45,731 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:45] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-08 00:56:46,149 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:46] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-08 00:56:46,209 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:46] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-08 00:56:46,354 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:46] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-08 00:56:46,543 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:46] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-08 00:56:46,546 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:46] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-08 00:56:46,985 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:46] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-08 00:56:53,110 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:53] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 00:56:53,240 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:56:53,248 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:56:53,251 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 00:56:53,434 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-08 00:56:53,434 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-08 00:56:53,435 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:53] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-08 00:56:53,487 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:56:53,491 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-08 00:56:53,492 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:53] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 00:56:54,333 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:54] "GET /api/system/info HTTP/1.1" 200 - +2025-12-08 00:56:54,421 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:54] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-08 00:56:54,425 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:56:54,429 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-08 00:56:54,429 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-08 00:56:54,429 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-08 00:56:54,430 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-08 00:56:54,431 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-08 00:56:54,432 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-08 00:56:54,433 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-08 00:56:54,434 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-08 00:56:54,435 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-08 00:56:54,436 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-08 00:56:54,438 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-08 00:56:54,439 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-08 00:56:54,440 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-08 00:56:54,441 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-08 00:56:54,442 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-08 00:56:54,443 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-08 00:56:54,444 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-08 00:56:54,445 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-08 00:56:54,446 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-08 00:56:54,447 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-08 00:56:54,448 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-08 00:56:54,449 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-08 00:56:54,450 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-08 00:56:54,451 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-08 00:56:54,452 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-08 00:56:54,464 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:54] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-08 00:56:58,379 - werkzeug - ERROR - 36.231.97.35 - - [08/Dec/2025 00:56:58] code 400, message Bad request version ("n,(Rǯ^\x03XÆ,\x13\x13±ÄvÐ×&RR]ÃX\x14#k'sà\x1bâ\x00") +2025-12-08 00:56:58,397 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:58] "\x16\x03\x01\x06ö\x01\x00\x06ò\x03\x03\x80\x8e\x18:\x9e\x8b\x90\x1d¾\x9côX\x9a0ð¹¯@S\x8d\x1bR8`\x1cF}x) \x06U n,(Rǯ^\x03XÆ,\x13\x13±ÄvÐ×&RR]ÃX\x14#k'sà\x1bâ\x00 " HTTPStatus.BAD_REQUEST - +2025-12-08 00:56:58,400 - werkzeug - ERROR - 36.231.97.35 - - [08/Dec/2025 00:56:58] code 400, message Bad HTTP/0.9 request type ('\x16\x03\x01\x06Ö\x01\x00\x06Ò\x03\x03qºÝX\x91hD#B\x01ÉΧ\x0f=\x0eËdALÛÂ\x968KåHî±U\x84é') +2025-12-08 00:56:58,400 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:58] "\x16\x03\x01\x06Ö\x01\x00\x06Ò\x03\x03qºÝX\x91hD#B\x01ÉΧ\x0f=\x0eËdALÛÂ\x968KåHî±U\x84é \x8f½¦\x16ò\x83å´\x8b^®¢K?ÖË\x96ìH\x88m)¥3(8ïz3Zªc\x00 " HTTPStatus.BAD_REQUEST - +2025-12-08 00:56:58,652 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:58] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:56:58,972 - werkzeug - ERROR - 36.231.97.35 - - [08/Dec/2025 00:56:58] code 400, message Bad request version ("8\x8f|\x05t\\Ê>/\x813Ú\x92_\x81\x07\x9bcÖ?TSÅÏÑXm%%\x94\x94\x90\x84ô'ðÃ") +2025-12-08 00:56:58,978 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:58] "\x16\x03\x01\x06ö\x01\x00\x06ò\x03\x03­¹:\x8f\x00\x92VoÏ$!;\x9dIXkCL{câãKî\x9fñÕ\x1e\\B\x9c\x8c °âg\x0f\x95ÌY|ÕHs\x13øsßøD\x13\x86M&ú^j\x81_uÊÐ^ù%\x00 êê\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x06\x89\x1a\x1a\x00\x00\x00\x0d\x00\x12\x00\x10\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\x06\x01\x003\x04ï\x04íªª\x00\x01\x00\x11ì\x04Àõ&l\x82\x92¼ÝìBnCeÅSNnûÌÓHs4±\x03ÒÑ2\x92¼O£@\x84\x89( \x09\x07\x81,Û:¯õrÂ\\R 8\x8f|\x05t\\Ê>/\x813Ú\x92_\x81\x07\x9bcÖ?TSÅÏÑXm%%\x94\x94\x90\x84ô'ðÃ" HTTPStatus.BAD_REQUEST - +2025-12-08 00:56:59,019 - werkzeug - ERROR - 36.231.97.35 - - [08/Dec/2025 00:56:59] code 400, message Bad request version ('\x1aAa\xad') +2025-12-08 00:56:59,019 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:56:59] "\x16\x03\x01\x06ö\x01\x00\x06ò\x03\x03û\x16jë,Û0e5|zO\x8dwUBÛDÝ=\x1c ËêÖ[îo_Ê÷\x1f Ñ\x1e26\x83¨q6\x99\x8c\x9a\\¤\x13¹n*Ïø\x91úoá*ÄÊufVìEð\x00 \x9a\x9a\x13\x01\x13\x02\x13\x03À+À/À,À0̨̩À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01\x00\x06\x89ÚÚ\x00\x00\x003\x04ï\x04íÚÚ\x00\x01\x00\x11ì\x04À]\x98\x8a!b\x14ϤT\x90\x158\x89º{,ç(ÉÜ\x96.c¢´\x90ů\x90\x8d¼\x89\x05 \x11f\x92%`4#!\x92A\x9a\x0c«Z¢¼\x87&\x12Áj5½\x9b\x19WÄ\x8ciw¨µî\x1ah^\x02\x0f\x91\x024\x1aõÍܨ\x0dC-\x18\x05\x18\x1er\x0bR\x04\x95\x88j\x7f´öÈ\x93õ(\x98ª=ÈõF0ð\x9böÙjü\x87¸¯\x13}á\x15%\x8b¶\x96UÅ\x13¹¸t\x08×\x1d=\x85RÆz8éC¸â\x1c\x1aAa­" HTTPStatus.BAD_REQUEST - +2025-12-08 00:57:03,185 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:03] "GET / HTTP/1.1" 200 - +2025-12-08 00:57:04,270 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:04] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-08 00:57:04,803 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:04] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 00:57:13,846 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:13] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:57:13,929 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:13] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-08 00:57:14,056 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:14] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-08 00:57:14,711 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:14] "GET /api/rules HTTP/1.1" 200 - +2025-12-08 00:57:19,212 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:19] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-08 00:57:22,436 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:22] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-08 00:57:24,357 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:57:25,435 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:25] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:57:30,329 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:30] "POST /api/batch-delete/alerts HTTP/1.1" 200 - +2025-12-08 00:57:32,130 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:32] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:57:33,842 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:33] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-08 00:57:34,014 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:34] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:57:35,041 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:35] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:57:36,262 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:36] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - +2025-12-08 00:57:38,099 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:38] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:57:38,281 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:38] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:57:39,235 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:39] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 00:57:40,355 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:40] "POST /api/batch-delete/alerts HTTP/1.1" 200 - +2025-12-08 00:57:56,581 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:57:56] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:58:12,902 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:58:14,287 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:14] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 00:58:14,381 - src.web.error_handlers - ERROR - 错误响应: 预警不存在: [111616, 111617, 111618, 111619, 111620, 111621, 111622, 111623, 111624, 111625, 111626, 111627, 111628, 111629, 111630, 111631, 111632, 111633, 111634, 111635, 111636, 111637, 111638, 111639, 111640, 111641, 111642, 111643, 111644, 111645, 111646, 111647, 111648, 111649, 111650, 111651, 111652, 111653, 111654, 111655, 111656, 111657, 111658, 111659, 111660, 111661, 111612, 111613, 111614, 111615] - None +2025-12-08 00:58:14,409 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:14] "POST /api/batch-delete/alerts HTTP/1.1" 404 - +2025-12-08 00:58:15,728 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:15] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-08 00:58:20,658 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:20] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:58:25,226 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:58:26,834 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:26] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-08 00:58:49,660 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:49] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:58:58,072 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:58:58] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:59:05,172 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:59:05] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:59:06,477 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... +2025-12-08 00:59:06,480 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d +2025-12-08 00:59:06,970 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 3056, 'msg': 'ok', 'tenant_access_token': 't-g104c7nOSPYB6V6UE63G2DXX5T3ACJFDSQZ3AJ3B'} +2025-12-08 00:59:06,974 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104c7nOSPYB6V6UE6... +2025-12-08 00:59:06,974 - src.integrations.feishu_client - INFO - 令牌有效期: 3056秒,过期时间: 2025-12-08 01:50:02 +2025-12-08 00:59:06,975 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records +2025-12-08 00:59:06,977 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7nOSPYB6V6UE6... +2025-12-08 00:59:09,328 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-08 00:59:09,332 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} +2025-12-08 00:59:09,337 - src.integrations.workorder_sync - INFO - 从飞书获取 4 条记录 +2025-12-08 00:59:09,337 - src.integrations.workorder_sync - INFO - 开始生成AI建议... +2025-12-08 00:59:09,339 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True +2025-12-08 00:59:09,341 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] +2025-12-08 00:59:09,341 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Th +2025-12-08 00:59:09,348 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 112 +2025-12-08 00:59:09,349 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:The widget weather doesn't work + +相关背景信息: +无相关背景信息 + +请 +2025-12-08 00:59:09,480 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:59:09,496 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765126749 +2025-12-08 00:59:09,528 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请作为专业的汽车技术支持工程师,为以下工单问题提供详细的技术分析和处理建议。 + +问题描述: +The widget weather doesn't work + + +当前处理进度: +0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 + + +历史AI建议记录: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:The widget weather doesn't work + +相关背景信息: +无相关背景信息 + +请提供: +1. 问题... + + +要求: +1. 基于已有处理记录和当前进度,分析问题进展情况 +2. 判断之前的处理步骤是否有效,找出可能的遗漏点 +3. 根据问题发展阶段提供更深入的技术解决方案 +4. 如果远程处理无效,明确说明需要哪些线下技术支持 +5. 详细说明进站后需要执行的具体诊断和修复步骤 +6. 包含技术参数、工具要求和注意事项 +7. 便于技术人员快速理解问题状态和下一步行动 + +请提供针对性的深入分析和处理建议:' 返回 3 个结果 +2025-12-08 00:59:22,469 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:59:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:59:23,084 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:59:23] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-08 00:59:29,120 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:59:29] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:59:30,610 - src.core.llm_client - INFO - API请求成功 +2025-12-08 00:59:30,824 - src.knowledge_base.knowledge_manager - INFO - 成功更新 3 个知识库条目的使用次数 +2025-12-08 00:59:30,825 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下: + +1. **问题进展分析**: + 前期已排除基... +2025-12-08 00:59:30,825 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下: + +1. **问题进展分析**: + 前期已排除基 +2025-12-08 00:59:30,836 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下: +2025-12-08 00:59:30,843 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:... +2025-12-08 00:59:30,843 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1208, existing长度=112 +2025-12-08 00:59:30,843 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 190 +2025-12-08 00:59:30,850 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议长度: 112 +2025-12-08 00:59:30,879 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议前100字符: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Vehicle data is not updated in the app => dated from +2025-12-08 00:59:30,920 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:59:30,943 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765126770 +2025-12-08 00:59:30,965 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请作为专业的汽车技术支持工程师,为以下工单问题提供详细的技术分析和处理建议。 + +问题描述: +Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. + + + +当前处理进度: +1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 + + +历史AI建议记录: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Vehicle data is not updated in the app => dated from October,... + + +要求: +1. 基于已有处理记录和当前进度,分析问题进展情况 +2. 判断之前的处理步骤是否有效,找出可能的遗漏点 +3. 根据问题发展阶段提供更深入的技术解决方案 +4. 如果远程处理无效,明确说明需要哪些线下技术支持 +5. 详细说明进站后需要执行的具体诊断和修复步骤 +6. 包含技术参数、工具要求和注意事项 +7. 便于技术人员快速理解问题状态和下一步行动 + +请提供针对性的深入分析和处理建议:' 返回 3 个结果 +2025-12-08 00:59:37,986 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:59:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:59:44,965 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:59:44] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:59:49,625 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:59:49] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:59:51,821 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 00:59:51] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-08 00:59:53,910 - src.core.llm_client - INFO - API请求成功 +2025-12-08 00:59:54,067 - src.knowledge_base.knowledge_manager - INFO - 成功更新 3 个知识库条目的使用次数 +2025-12-08 00:59:54,067 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBO... +2025-12-08 00:59:54,068 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBO +2025-12-08 00:59:54,068 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBO +2025-12-08 00:59:54,070 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBO... +2025-12-08 00:59:54,073 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1208, existing长度=112 +2025-12-08 00:59:54,075 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLSh2a2S7 生成AI建议,新建议长度: 231 +2025-12-08 00:59:54,075 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议长度: 112 +2025-12-08 00:59:54,077 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议前100字符: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:User not able to enter into member center neither mo +2025-12-08 00:59:54,096 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:59:54,105 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765126794 +2025-12-08 00:59:54,119 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请作为专业的汽车技术支持工程师,为以下工单问题提供详细的技术分析和处理建议。 + +问题描述: +User not able to enter into member center neither mobile phone nor QR code. + + +当前处理进度: +1024: DMC logs attached as well as vieos of the issue. + + +历史AI建议记录: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:User not able to enter into member center neither mobile phon... + + +要求: +1. 基于已有处理记录和当前进度,分析问题进展情况 +2. 判断之前的处理步骤是否有效,找出可能的遗漏点 +3. 根据问题发展阶段提供更深入的技术解决方案 +4. 如果远程处理无效,明确说明需要哪些线下技术支持 +5. 详细说明进站后需要执行的具体诊断和修复步骤 +6. 包含技术参数、工具要求和注意事项 +7. 便于技术人员快速理解问题状态和下一步行动 + +请提供针对性的深入分析和处理建议:' 返回 3 个结果 +2025-12-08 01:00:01,162 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:01] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 01:00:02,087 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 01:00:04,293 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:04] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 01:00:04,915 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records +2025-12-08 01:00:04,935 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7nOSPYB6V6UE6... +2025-12-08 01:00:06,700 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-08 01:00:06,703 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} +2025-12-08 01:00:06,708 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:06] "GET /api/feishu-sync/preview-feishu-data HTTP/1.1" 200 - +2025-12-08 01:00:13,560 - src.core.llm_client - INFO - API请求成功 +2025-12-08 01:00:13,804 - src.knowledge_base.knowledge_manager - INFO - 成功更新 3 个知识库条目的使用次数 +2025-12-08 01:00:13,810 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。 + +当前处理有效性评估: +✅ 已完成关... +2025-12-08 01:00:13,828 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。 + +当前处理有效性评估: +✅ 已完成关 +2025-12-08 01:00:13,838 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。 +2025-12-08 01:00:14,071 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。... +2025-12-08 01:00:14,080 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1208, existing长度=112 +2025-12-08 01:00:14,086 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKLlRJ 生成AI建议,新建议长度: 197 +2025-12-08 01:00:14,092 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议长度: 112 +2025-12-08 01:00:14,099 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议前100字符: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Abnormal traffic consumption + +相关背景信息: +相关知识库信息: +- TR8 +2025-12-08 01:00:14,153 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 01:00:14,177 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765126814 +2025-12-08 01:00:14,236 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请作为专业的汽车技术支持工程师,为以下工单问题提供详细的技术分析和处理建议。 + +问题描述: +Abnormal traffic consumption + + +当前处理进度: +1024:建议用户抓去DMC日志回传分析 +1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf + + +历史AI建议记录: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Abnormal traffic consumption + +相关背景信息: +相关知识库信息: +- TR866 - Traf... + + +要求: +1. 基于已有处理记录和当前进度,分析问题进展情况 +2. 判断之前的处理步骤是否有效,找出可能的遗漏点 +3. 根据问题发展阶段提供更深入的技术解决方案 +4. 如果远程处理无效,明确说明需要哪些线下技术支持 +5. 详细说明进站后需要执行的具体诊断和修复步骤 +6. 包含技术参数、工具要求和注意事项 +7. 便于技术人员快速理解问题状态和下一步行动 + +请提供针对性的深入分析和处理建议:' 返回 3 个结果 +2025-12-08 01:00:18,434 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:18] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 01:00:23,257 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 01:00:24,752 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:24] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 01:00:25,794 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 01:00:35,439 - src.core.llm_client - INFO - API请求成功 +2025-12-08 01:00:36,167 - src.knowledge_base.knowledge_manager - INFO - 成功更新 3 个知识库条目的使用次数 +2025-12-08 01:00:36,195 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下: + +一、问题... +2025-12-08 01:00:36,200 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下: + +一、问题 +2025-12-08 01:00:36,201 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下: +2025-12-08 01:00:36,201 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:... +2025-12-08 01:00:36,204 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1208, existing长度=112 +2025-12-08 01:00:36,231 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKjKvx 生成AI建议,新建议长度: 212 +2025-12-08 01:00:36,250 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 +2025-12-08 01:00:36,250 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7nOSPYB6V6UE6... +2025-12-08 01:00:38,160 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-08 01:00:38,175 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} +2025-12-08 01:00:38,194 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 +2025-12-08 01:00:38,205 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLSh2a2S7 +2025-12-08 01:00:38,225 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7nOSPYB6V6UE6... +2025-12-08 01:00:39,921 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-08 01:00:39,921 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}}, 'msg': 'success'} +2025-12-08 01:00:39,923 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLSh2a2S7 的AI建议 +2025-12-08 01:00:39,923 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKLlRJ +2025-12-08 01:00:39,923 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7nOSPYB6V6UE6... +2025-12-08 01:00:41,718 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-08 01:00:41,719 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}}, 'msg': 'success'} +2025-12-08 01:00:41,720 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKLlRJ 的AI建议 +2025-12-08 01:00:41,720 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKjKvx +2025-12-08 01:00:41,721 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7nOSPYB6V6UE6... +2025-12-08 01:00:43,739 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-08 01:00:43,741 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}}, 'msg': 'success'} +2025-12-08 01:00:43,741 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKjKvx 的AI建议 +2025-12-08 01:00:43,834 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} +2025-12-08 01:00:43,836 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:00:43,837 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:The widget weather doesn't work + +相关背景信息: +无相关背景信息 + +请提供: +1. 问题... +2025-12-08 01:00:43,837 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy +2025-12-08 01:00:43,838 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 +2025-12-08 01:00:43,838 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M +2025-12-08 01:00:43,838 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-08 01:00:43,838 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work +2025-12-08 01:00:43,838 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-08 01:00:43,838 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 +2025-12-08 01:00:43,840 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-08 01:00:43,840 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. +2025-12-08 01:00:43,840 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles +2025-12-08 01:00:43,840 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 +2025-12-08 01:00:43,856 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) +2025-12-08 01:00:43,863 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy +2025-12-08 01:00:43,863 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 +2025-12-08 01:00:43,956 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-08 01:00:43,960 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-08 01:00:43,961 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-08 01:00:43,961 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-08 01:00:43,961 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-08 01:00:44,146 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'} +2025-12-08 01:00:44,160 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:00:44,160 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Vehicle data is not updated in the app => dated from October,... +2025-12-08 01:00:44,160 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-08 01:00:44,163 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 +2025-12-08 01:00:44,171 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: TBOX +2025-12-08 01:00:44,171 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-08 01:00:44,171 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. + +2025-12-08 01:00:44,171 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-08 01:00:44,171 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR863 +2025-12-08 01:00:44,171 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-08 01:00:44,171 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi +2025-12-08 01:00:44,172 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control +2025-12-08 01:00:44,172 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LNNBDDEZ8SD345645 +2025-12-08 01:00:44,172 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: JAECOO J7(T1EJ) +2025-12-08 01:00:44,172 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 刘娇龙 +2025-12-08 01:00:44,172 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 +2025-12-08 01:00:44,174 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-08 01:00:44,174 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-08 01:00:44,174 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-08 01:00:44,174 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-08 01:00:44,174 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-08 01:00:44,197 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'} +2025-12-08 01:00:44,198 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:00:44,198 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:User not able to enter into member center neither mobile phon... +2025-12-08 01:00:44,198 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-08 01:00:44,198 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 +2025-12-08 01:00:44,198 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: 生态/ecologically +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: User not able to enter into member center neither mobile phone nor QR code. +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR864 +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 23/10: DMC logs attached as well as vieos of the issue. +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Problem with auth in member center +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LNNBDDEZXSD449358 +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED VX FL(M36T) +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 袁清 +2025-12-08 01:00:44,199 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024: DMC logs attached as well as vieos of the issue. +2025-12-08 01:00:44,202 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-08 01:00:44,202 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-08 01:00:44,208 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-08 01:00:44,222 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-08 01:00:44,228 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-08 01:00:44,283 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'} +2025-12-08 01:00:44,294 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:00:44,296 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Abnormal traffic consumption + +相关背景信息: +相关知识库信息: +- TR866 - Traf... +2025-12-08 01:00:44,483 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-08 01:00:44,485 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761235200000 +2025-12-08 01:00:44,485 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: DMC +2025-12-08 01:00:44,498 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-08 01:00:44,498 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Abnormal traffic consumption +2025-12-08 01:00:44,505 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-08 01:00:44,508 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR866 +2025-12-08 01:00:44,514 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Analysising +2025-12-08 01:00:44,515 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi +24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached +2025-12-08 01:00:44,536 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Traffic is over +2025-12-08 01:00:44,543 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: XEYDD14B3SA012164 +2025-12-08 01:00:44,543 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: TEST +2025-12-08 01:00:44,543 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi +2025-12-08 01:00:44,543 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024:建议用户抓去DMC日志回传分析 +1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf +2025-12-08 01:00:44,547 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-08 01:00:44,547 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-08 01:00:44,548 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-08 01:00:44,548 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-08 01:00:44,548 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-08 01:00:44,738 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 4, 'synced_count': 4, 'created_count': 0, 'updated_count': 4, 'ai_suggestions_generated': True, 'errors': []} +2025-12-08 01:00:44,739 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:44] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - +2025-12-08 01:00:48,369 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:48] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 01:00:54,363 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records +2025-12-08 01:00:54,398 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7nOSPYB6V6UE6... +2025-12-08 01:00:55,328 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 01:00:56,310 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-08 01:00:56,310 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} +2025-12-08 01:00:56,317 - src.integrations.flexible_field_mapper - INFO - 开始发现字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:00:56,374 - src.integrations.flexible_field_mapper - INFO - 字段发现完成: 已映射 15, 未映射 1, 建议映射 1 +2025-12-08 01:00:56,405 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:56] "POST /api/feishu-sync/field-mapping/discover HTTP/1.1" 200 - +2025-12-08 01:00:57,846 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:00:57] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 01:01:04,117 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.2% +2025-12-08 01:01:04,940 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.1% +2025-12-08 01:01:18,776 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... +2025-12-08 01:01:18,782 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records +2025-12-08 01:01:18,783 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7nOSPYB6V6UE6... +2025-12-08 01:01:20,324 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-08 01:01:20,329 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} +2025-12-08 01:01:20,331 - src.integrations.workorder_sync - INFO - 从飞书获取 4 条记录 +2025-12-08 01:01:20,396 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} +2025-12-08 01:01:20,680 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:The widget weather doesn't work + +相关背景信息: +无相关背景信息 + +请提供: +1. 问题... +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-08 01:01:20,681 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. +2025-12-08 01:01:20,699 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles +2025-12-08 01:01:20,699 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 +2025-12-08 01:01:20,699 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) +2025-12-08 01:01:20,699 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy +2025-12-08 01:01:20,699 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 +2025-12-08 01:01:20,702 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-08 01:01:20,702 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-08 01:01:20,702 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-08 01:01:20,702 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-08 01:01:20,702 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-08 01:01:20,714 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'} +2025-12-08 01:01:20,720 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:01:20,720 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。 +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Vehicle data is not updated in the app => dated from October,... +2025-12-08 01:01:20,720 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-08 01:01:20,726 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 +2025-12-08 01:01:20,726 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: TBOX +2025-12-08 01:01:20,726 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-08 01:01:20,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. + +2025-12-08 01:01:20,738 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-08 01:01:20,748 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR863 +2025-12-08 01:01:20,748 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-08 01:01:20,787 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi +2025-12-08 01:01:20,787 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control +2025-12-08 01:01:20,787 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LNNBDDEZ8SD345645 +2025-12-08 01:01:20,788 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: JAECOO J7(T1EJ) +2025-12-08 01:01:20,788 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 刘娇龙 +2025-12-08 01:01:20,789 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 +2025-12-08 01:01:20,802 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-08 01:01:20,815 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-08 01:01:20,822 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-08 01:01:20,823 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-08 01:01:20,849 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-08 01:01:20,906 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'} +2025-12-08 01:01:20,941 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:01:20,941 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。 +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:User not able to enter into member center neither mobile phon... +2025-12-08 01:01:20,941 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-08 01:01:20,941 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 +2025-12-08 01:01:20,941 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: 生态/ecologically +2025-12-08 01:01:20,941 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: User not able to enter into member center neither mobile phone nor QR code. +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR864 +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 23/10: DMC logs attached as well as vieos of the issue. +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Problem with auth in member center +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LNNBDDEZXSD449358 +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED VX FL(M36T) +2025-12-08 01:01:20,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 袁清 +2025-12-08 01:01:20,943 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024: DMC logs attached as well as vieos of the issue. +2025-12-08 01:01:20,946 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-08 01:01:20,946 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-08 01:01:20,946 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-08 01:01:20,946 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-08 01:01:20,953 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-08 01:01:21,010 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'} +2025-12-08 01:01:21,021 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-08 01:01:21,022 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Abnormal traffic consumption + +相关背景信息: +相关知识库信息: +- TR866 - Traf... +2025-12-08 01:01:21,030 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-08 01:01:21,031 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761235200000 +2025-12-08 01:01:21,039 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: DMC +2025-12-08 01:01:21,039 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-08 01:01:21,040 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Abnormal traffic consumption +2025-12-08 01:01:21,040 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-08 01:01:21,047 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR866 +2025-12-08 01:01:21,047 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Analysising +2025-12-08 01:01:21,047 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi +24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached +2025-12-08 01:01:21,047 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Traffic is over +2025-12-08 01:01:21,047 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: XEYDD14B3SA012164 +2025-12-08 01:01:21,047 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: TEST +2025-12-08 01:01:21,047 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi +2025-12-08 01:01:21,047 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024:建议用户抓去DMC日志回传分析 +1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf +2025-12-08 01:01:21,050 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-08 01:01:21,050 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-08 01:01:21,050 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-08 01:01:21,050 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-08 01:01:21,050 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-08 01:01:21,131 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 4, 'synced_count': 4, 'created_count': 0, 'updated_count': 4, 'ai_suggestions_generated': False, 'errors': []} +2025-12-08 01:01:21,132 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:01:21] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - +2025-12-08 01:01:22,302 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:01:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 01:01:29,904 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:01:29] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 01:01:33,628 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:01:33] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 01:01:43,409 - werkzeug - INFO - 203.175.14.32 - - [08/Dec/2025 01:01:43] "GET /api/feishu-sync/field-mapping/status HTTP/1.1" 200 - +2025-12-08 01:01:47,237 - werkzeug - INFO - 23.247.138.217 - - [08/Dec/2025 01:01:47] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 01:01:51,719 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:01:51] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 01:02:05,782 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% +2025-12-08 01:02:06,308 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.9% +2025-12-08 01:02:12,892 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-08 01:02:13,693 - src.core.database - INFO - 数据库初始化成功 +2025-12-08 01:02:13,698 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-08 01:02:16,181 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-08 01:02:16,191 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-08 01:02:16,250 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.3.12.3:5000 +2025-12-08 01:02:16,250 - werkzeug - INFO - Press CTRL+C to quit +2025-12-08 01:02:16,561 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 01:02:16,562 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 01:02:16,572 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 01:02:16,576 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 01:02:16,578 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 01:02:16,586 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 01:02:16,615 - werkzeug - INFO - 23.247.138.217 - - [08/Dec/2025 01:02:16] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 01:02:38,059 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:02:38] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 01:02:38,625 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:02:38] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 01:02:38,627 - werkzeug - INFO - 36.231.97.35 - - [08/Dec/2025 01:02:38] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:22:24,082 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-08 13:22:24,658 - src.core.database - INFO - 数据库初始化成功 +2025-12-08 13:22:24,663 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-08 13:22:27,263 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-08 13:22:27,273 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-08 13:22:27,332 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.3.12.3:5000 +2025-12-08 13:22:27,332 - werkzeug - INFO - Press CTRL+C to quit +2025-12-08 13:22:48,185 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET / HTTP/1.1" 200 - +2025-12-08 13:22:48,305 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-08 13:22:48,425 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-08 13:22:48,642 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-08 13:22:48,669 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-08 13:22:48,675 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-08 13:22:48,676 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-08 13:22:48,871 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-08 13:22:48,999 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:48] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-08 13:22:49,125 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:49] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-08 13:22:50,310 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 13:22:50,311 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 13:22:50,316 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-08 13:22:50,316 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-08 13:22:50,317 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:50] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-08 13:22:50,326 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 13:22:50,328 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 13:22:50,329 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 13:22:50,332 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 13:22:50,332 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 13:22:50,333 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:50] "GET /api/rules HTTP/1.1" 200 - +2025-12-08 13:22:50,338 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 13:22:50,341 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 13:22:50,569 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 13:22:50,571 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-08 13:22:50,572 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:50] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 13:22:50,931 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:50] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-08 13:22:50,972 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:50] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:22:50,984 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:50] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 13:22:51,176 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:51] "GET /api/system/info HTTP/1.1" 200 - +2025-12-08 13:22:51,192 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:22:51,203 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:51] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-08 13:22:51,383 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:51] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-08 13:22:51,453 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 13:22:51,489 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-08 13:22:51,495 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-08 13:22:51,495 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-08 13:22:51,503 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-08 13:22:51,506 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-08 13:22:51,506 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-08 13:22:51,515 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-08 13:22:51,519 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-08 13:22:51,524 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-08 13:22:51,525 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-08 13:22:51,532 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-08 13:22:51,534 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-08 13:22:51,535 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-08 13:22:51,542 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-08 13:22:51,548 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-08 13:22:51,553 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-08 13:22:51,557 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-08 13:22:51,566 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-08 13:22:51,568 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-08 13:22:51,571 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-08 13:22:51,572 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-08 13:22:51,576 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-08 13:22:51,581 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-08 13:22:51,582 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-08 13:22:51,587 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-08 13:22:51,635 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:51] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-08 13:22:55,597 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:22:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:23:00,728 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:23:08,875 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:08] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-08 13:23:08,888 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:08] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-08 13:23:09,246 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:09] "GET /api/agent/tools/stats HTTP/1.1" 200 - +2025-12-08 13:23:09,302 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:09] "GET /api/settings HTTP/1.1" 200 - +2025-12-08 13:23:10,525 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:10] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:23:10,865 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:10] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-08 13:23:11,751 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:23:12,403 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:23:15,711 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:15] "POST /api/batch-delete/alerts HTTP/1.1" 200 - +2025-12-08 13:23:16,658 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:16] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:23:17,555 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:17] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 13:23:17,980 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:17] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:23:42,384 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:23:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:24:00,231 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:00] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 13:24:01,376 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:01] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:24:01,737 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:01] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-08 13:24:02,538 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:24:08,797 - src.web.error_handlers - ERROR - 错误响应: 预警不存在: [111610, 111608, 111611, 111606, 111607, 111672, 111673, 111674, 111675, 111609] - None +2025-12-08 13:24:08,802 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:08] "POST /api/batch-delete/alerts HTTP/1.1" 404 - +2025-12-08 13:24:09,306 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:09] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - +2025-12-08 13:24:17,892 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:24:33,642 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:33] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:24:44,176 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:44] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:24:51,434 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:24:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:24:51,470 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:24:51] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:24:55,480 - werkzeug - INFO - 211.141.219.110 - - [08/Dec/2025 13:24:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:25:11,583 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:25:11] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:25:16,365 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:25:16] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:25:35,401 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:25:35] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:25:58,762 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:25:58] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:25:59,367 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:25:59] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:26:10,513 - werkzeug - INFO - 220.196.160.125 - - [08/Dec/2025 13:26:10] "GET / HTTP/1.1" 200 - +2025-12-08 13:26:11,746 - werkzeug - INFO - 159.75.199.224 - - [08/Dec/2025 13:26:11] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-08 13:26:11,953 - werkzeug - INFO - 159.75.199.224 - - [08/Dec/2025 13:26:11] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-08 13:26:12,169 - werkzeug - INFO - 43.144.106.82 - - [08/Dec/2025 13:26:12] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-08 13:26:12,765 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:12] "GET / HTTP/1.1" 200 - +2025-12-08 13:26:13,198 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-08 13:26:13,226 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-08 13:26:13,641 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-08 13:26:13,653 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-08 13:26:13,660 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-08 13:26:13,664 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-08 13:26:13,669 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-08 13:26:13,683 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-08 13:26:13,904 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:13] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-08 13:26:15,947 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:15] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-08 13:26:15,949 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:15] "GET /api/rules HTTP/1.1" 200 - +2025-12-08 13:26:16,071 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:16] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 13:26:16,270 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:16] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:26:16,524 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:16] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 13:26:16,791 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:16] "GET /api/system/info HTTP/1.1" 200 - +2025-12-08 13:26:17,023 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:17] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-08 13:26:17,130 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:17] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-08 13:26:17,808 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:17] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-08 13:26:17,918 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:17] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:26:22,605 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:22] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 13:26:26,034 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:26] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:26:27,225 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:26:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:26:30,789 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:26:30] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:26:36,011 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:36] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 13:26:44,098 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:26:44] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:26:47,862 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:26:47] "GET /api/settings HTTP/1.1" 200 - +2025-12-08 13:27:02,616 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:27:02,627 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:27:02,628 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:27:02,631 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:27:02,632 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:27:02,817 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:27:31,856 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:27:31] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:27:40,039 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:27:40] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-08 13:27:43,368 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:27:43] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 13:27:54,941 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:27:54] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:28:04,121 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.0% +2025-12-08 13:28:04,135 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.1% +2025-12-08 13:28:04,143 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.0% +2025-12-08 13:28:04,148 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.0% +2025-12-08 13:28:04,148 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.1% +2025-12-08 13:28:04,153 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.0% +2025-12-08 13:28:26,089 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:28:26] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:31:34,853 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.1% +2025-12-08 13:31:34,850 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.1% +2025-12-08 13:31:34,864 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.1% +2025-12-08 13:31:34,873 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.1% +2025-12-08 13:31:34,879 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.1% +2025-12-08 13:31:34,932 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.0% +2025-12-08 13:31:44,979 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +[SQL: SELECT alerts.id AS alerts_id, alerts.rule_name AS alerts_rule_name, alerts.alert_type AS alerts_alert_type, alerts.level AS alerts_level, alerts.severity AS alerts_severity, alerts.message AS alerts_message, alerts.data AS alerts_data, alerts.is_active AS alerts_is_active, alerts.created_at AS alerts_created_at, alerts.resolved_at AS alerts_resolved_at +FROM alerts +WHERE alerts.is_active = true ORDER BY alerts.created_at DESC] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 13:31:45,046 - src.analytics.alert_system - ERROR - 获取活跃预警失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +[SQL: SELECT alerts.id AS alerts_id, alerts.rule_name AS alerts_rule_name, alerts.alert_type AS alerts_alert_type, alerts.level AS alerts_level, alerts.severity AS alerts_severity, alerts.message AS alerts_message, alerts.data AS alerts_data, alerts.is_active AS alerts_is_active, alerts.created_at AS alerts_created_at, alerts.resolved_at AS alerts_resolved_at +FROM alerts +WHERE alerts.is_active = true ORDER BY alerts.created_at DESC] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 13:31:56,702 - werkzeug - INFO - 180.101.245.246 - - [08/Dec/2025 13:31:56] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 13:32:16,444 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:32:16] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:32:22,328 - werkzeug - INFO - 220.205.252.43 - - [08/Dec/2025 13:32:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 13:32:36,038 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:32:36,044 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:32:36,045 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:32:36,045 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:32:36,069 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% +2025-12-08 13:32:36,088 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.1% +2025-12-10 16:03:04,292 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-10 16:03:08,151 - src.core.database - INFO - 数据库初始化成功 +2025-12-10 16:03:08,620 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-10 16:03:10,589 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-10 16:03:10,622 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-10 16:03:10,712 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://172.23.31.194:5000 +2025-12-10 16:03:10,712 - werkzeug - INFO - Press CTRL+C to quit +2025-12-10 16:03:11,311 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:11,538 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-10 16:03:11,543 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-10 16:03:11,544 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-10 16:03:13,917 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:13] "GET / HTTP/1.1" 200 - +2025-12-10 16:03:14,894 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-10 16:03:14,894 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-10 16:03:14,895 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:14] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-10 16:03:14,935 - websockets.server - INFO - connection open +2025-12-10 16:03:14,936 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-10 16:03:15,753 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:16,183 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:16] "GET /api/alerts HTTP/1.1" 200 - +2025-12-10 16:03:16,262 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:16,308 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:16,463 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:16,504 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-10 16:03:16,756 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:16,819 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:16] "GET /api/workorders HTTP/1.1" 200 - +2025-12-10 16:03:16,904 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:16,986 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-10 16:03:16,987 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:16] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-10 16:03:16,993 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:16] "GET /api/system/info HTTP/1.1" 200 - +2025-12-10 16:03:16,997 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:16] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-10 16:03:17,148 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-10 16:03:17,149 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:17] "GET /api/rules HTTP/1.1" 200 - +2025-12-10 16:03:17,155 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:17] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-10 16:03:17,234 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:17,386 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-10 16:03:17,479 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-10 16:03:17,480 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-10 16:03:17,480 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-10 16:03:17,481 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-10 16:03:17,482 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-10 16:03:17,484 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-10 16:03:17,485 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-10 16:03:17,486 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-10 16:03:17,487 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-10 16:03:17,489 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-10 16:03:17,489 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-10 16:03:17,490 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-10 16:03:17,492 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-10 16:03:17,492 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-10 16:03:17,494 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-10 16:03:17,495 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-10 16:03:17,496 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-10 16:03:17,497 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-10 16:03:17,498 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-10 16:03:17,499 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-10 16:03:17,500 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-10 16:03:17,503 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-10 16:03:17,505 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-10 16:03:17,506 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-10 16:03:17,507 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-10 16:03:17,629 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-10 16:03:17,741 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:17] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-10 16:03:17,746 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:17] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-10 16:03:17,750 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1765353797 +2025-12-10 16:03:17,751 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:17] "POST /api/chat/session HTTP/1.1" 200 - +2025-12-10 16:03:18,141 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:18] "GET /api/workorders HTTP/1.1" 200 - +2025-12-10 16:03:18,352 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-10 16:03:18,469 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:18] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-10 16:03:19,067 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:19] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-10 16:03:19,984 - websockets.server - INFO - connection open +2025-12-10 16:03:19,985 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-10 16:03:20,026 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP显示车辆信息错误' 返回 1 个结果 +2025-12-10 16:03:21,987 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-10 16:03:22,618 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:22] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-10 16:03:23,274 - src.core.llm_client - INFO - API请求成功 +2025-12-10 16:03:24,420 - src.knowledge_base.knowledge_manager - INFO - 成功更新 1 个知识库条目的使用次数 +2025-12-10 16:03:24,421 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:24] "POST /api/chat/message HTTP/1.1" 200 - +2025-12-10 16:03:24,992 - websockets.server - INFO - connection open +2025-12-10 16:03:24,993 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-10 16:03:25,021 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:25] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-10 16:03:25,110 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:25] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-10 16:03:25,749 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:25] "GET /api/alerts HTTP/1.1" 200 - +2025-12-10 16:03:29,707 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:29] "POST /api/batch-delete/workorders HTTP/1.1" 200 - +2025-12-10 16:03:30,005 - websockets.server - INFO - connection open +2025-12-10 16:03:30,005 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-10 16:03:31,279 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:31] "GET /api/workorders?page=true&per_page=10 HTTP/1.1" 200 - +2025-12-10 16:03:35,011 - websockets.server - INFO - connection open +2025-12-10 16:03:35,011 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-10 16:03:35,546 - werkzeug - INFO - 127.0.0.1 - - [10/Dec/2025 16:03:35] "GET /api/alerts HTTP/1.1" 200 - +2025-12-10 16:03:40,022 - websockets.server - INFO - connection open +2025-12-10 16:03:40,022 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-10 16:03:45,038 - websockets.server - INFO - connection open +2025-12-10 16:03:45,038 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 09:56:08,705 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 09:56:22,795 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 09:56:44,222 - src.core.database - ERROR - 数据库初始化失败: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'jeason.online' ([WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)") +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 09:56:44,223 - __main__ - ERROR - 数据库连接失败,退出启动 +2025-12-12 09:57:09,661 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 09:57:09,974 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 09:57:09,975 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 09:57:11,908 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 09:57:11,917 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 09:57:12,030 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 09:57:12,031 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 09:57:12,056 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 09:57:12,062 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-12 09:57:12,063 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-12 09:57:21,982 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:21] "GET / HTTP/1.1" 200 - +2025-12-12 09:57:22,283 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 09:57:22,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 09:57:22,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 09:57:22,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 09:57:22,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 09:57:22,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 09:57:22,591 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 09:57:22,621 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 09:57:22,622 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:22] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 09:57:23,100 - websockets.server - INFO - connection open +2025-12-12 09:57:23,100 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 09:57:23,343 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:57:23,344 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-12 09:57:23,347 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-12 09:57:23,348 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 09:57:23,350 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 09:57:23,351 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-12 09:57:23,351 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 09:57:23,351 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 09:57:23,354 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 09:57:23,357 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 09:57:23,381 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:23,654 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 09:57:23,666 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 09:57:23,672 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 09:57:23,677 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 09:57:23,692 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 09:57:23,715 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-12 09:57:23,716 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-12 09:57:23,717 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-12 09:57:23,718 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-12 09:57:23,720 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-12 09:57:23,721 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-12 09:57:23,722 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-12 09:57:23,723 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-12 09:57:23,723 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-12 09:57:23,725 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-12 09:57:23,727 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-12 09:57:23,728 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-12 09:57:23,730 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-12 09:57:23,731 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-12 09:57:23,732 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-12 09:57:23,733 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-12 09:57:23,735 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-12 09:57:23,736 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-12 09:57:23,737 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-12 09:57:23,738 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-12 09:57:23,739 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-12 09:57:23,741 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-12 09:57:23,743 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-12 09:57:23,744 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-12 09:57:23,746 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-12 09:57:23,752 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 09:57:23,991 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:23] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 09:57:24,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:24] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 09:57:24,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:24] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 09:57:24,580 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:24] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 09:57:24,639 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 09:57:26,075 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET / HTTP/1.1" 200 - +2025-12-12 09:57:26,169 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 09:57:26,175 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 09:57:26,178 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 09:57:26,189 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 09:57:26,190 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 09:57:26,195 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 09:57:26,211 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 09:57:26,213 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 09:57:26,227 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 09:57:26,830 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:57:26,835 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 09:57:26,843 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 09:57:26,852 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 09:57:26,871 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 09:57:26,875 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 09:57:26,881 - websockets.server - INFO - connection open +2025-12-12 09:57:26,883 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:26,885 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 09:57:26,886 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 09:57:26,899 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 09:57:26,904 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 09:57:26,914 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 09:57:26,963 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 09:57:26,965 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 09:57:26,994 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:26] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 09:57:27,006 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:27] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 09:57:27,021 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 09:57:28,128 - websockets.server - INFO - connection open +2025-12-12 09:57:28,129 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 09:57:28,350 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:28] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:28,429 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:28] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 09:57:28,431 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:28] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 09:57:28,749 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 09:57:30,520 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1765504650 +2025-12-12 09:57:30,521 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:30] "POST /api/chat/session HTTP/1.1" 200 - +2025-12-12 09:57:31,835 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:31] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:31,867 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 09:57:31,870 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:31] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 09:57:31,882 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:31] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 09:57:31,945 - websockets.server - INFO - connection open +2025-12-12 09:57:31,946 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 09:57:31,971 - src.knowledge_base.knowledge_manager - WARNING - 知识库中没有活跃条目 +2025-12-12 09:57:33,140 - websockets.server - INFO - connection open +2025-12-12 09:57:33,141 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 09:57:33,345 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:33] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:57:33,378 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:33] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:36,097 - src.core.llm_client - INFO - API请求成功 +2025-12-12 09:57:36,109 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:36] "POST /api/chat/message HTTP/1.1" 200 - +2025-12-12 09:57:37,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:37] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:57:37,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:41,846 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:41] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:44,614 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:44] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 09:57:44,616 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:44] "GET /api/agent/tools/stats HTTP/1.1" 200 - +2025-12-12 09:57:45,837 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:45] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 09:57:46,824 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:46] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:57:46,839 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:46] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:48,447 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:48] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 09:57:48,671 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:48] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 09:57:48,865 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:48] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 09:57:52,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:57:57,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:57] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:57:57,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:57:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:02,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:05,580 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:05] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 09:58:06,830 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:06] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:58:06,845 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:06] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:07,039 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:07] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 09:58:08,543 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:08] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 09:58:11,755 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:11] "GET /api/conversations/1 HTTP/1.1" 200 - +2025-12-12 09:58:11,845 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:11] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:15,046 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:15] "GET /api/token-monitor/stats HTTP/1.1" 200 - +2025-12-12 09:58:15,065 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:15] "GET /api/token-monitor/records HTTP/1.1" 200 - +2025-12-12 09:58:15,067 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:15] "GET /api/token-monitor/chart HTTP/1.1" 200 - +2025-12-12 09:58:16,833 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:16] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:58:16,859 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:16] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:18,279 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:18] "GET /api/ai-monitor/stats HTTP/1.1" 200 - +2025-12-12 09:58:18,290 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:18] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - +2025-12-12 09:58:18,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:18] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - +2025-12-12 09:58:18,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:18] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - +2025-12-12 09:58:21,836 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:21] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:21,917 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:21] "GET /api/system-optimizer/status HTTP/1.1" 200 - +2025-12-12 09:58:21,928 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:21] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - +2025-12-12 09:58:21,929 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:21] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - +2025-12-12 09:58:21,931 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:21] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - +2025-12-12 09:58:24,855 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:24] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 09:58:24,878 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 09:58:24,964 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 09:58:26,824 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:26] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:58:26,840 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:26] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:32,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:37,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:37] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:58:37,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:42,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:45,244 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 09:58:45,252 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:45] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 09:58:45,267 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:45] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 09:58:46,828 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:46] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:58:46,845 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:46] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:49,207 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d +2025-12-12 09:58:49,381 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 3072, 'msg': 'ok', 'tenant_access_token': 't-g104cc8O2CZW3GLGNUZ3LZWBEO5TTEGCCVWP2HHG'} +2025-12-12 09:58:49,382 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104cc8O2CZW3GLGNU... +2025-12-12 09:58:49,382 - src.integrations.feishu_client - INFO - 令牌有效期: 3072秒,过期时间: 2025-12-12 10:50:01 +2025-12-12 09:58:49,383 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records +2025-12-12 09:58:49,383 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104cc8O2CZW3GLGNU... +2025-12-12 09:58:52,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:58:53,022 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-12 09:58:53,023 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} +2025-12-12 09:58:53,027 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:53] "GET /api/feishu-sync/preview-feishu-data HTTP/1.1" 200 - +2025-12-12 09:58:57,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:57] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:58:57,320 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:58:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:02,778 - src.integrations.workorder_sync - INFO - 从飞书记录 rec253kqBfXae4 创建工单 +2025-12-12 09:59:02,778 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 +2025-12-12 09:59:02,779 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104cc8O2CZW3GLGNU... +2025-12-12 09:59:02,793 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:04,679 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-12 09:59:04,679 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} +2025-12-12 09:59:04,681 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} +2025-12-12 09:59:04,682 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-12 09:59:04,682 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:The widget weather doesn't work + +相关背景信息: +无相关背景信息 + +请提供: +1. 问题... +2025-12-12 09:59:04,683 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy +2025-12-12 09:59:04,683 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 +2025-12-12 09:59:04,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M +2025-12-12 09:59:04,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-12 09:59:04,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work +2025-12-12 09:59:04,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-12 09:59:04,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 +2025-12-12 09:59:04,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-12 09:59:04,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. +2025-12-12 09:59:04,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles +2025-12-12 09:59:04,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 +2025-12-12 09:59:04,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) +2025-12-12 09:59:04,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy +2025-12-12 09:59:04,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 +2025-12-12 09:59:04,691 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-12 09:59:04,691 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-12 09:59:04,691 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-12 09:59:04,692 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-12 09:59:04,692 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-12 09:59:04,704 - src.integrations.workorder_sync - INFO - 创建工单成功: TR559 +2025-12-12 09:59:04,704 - src.integrations.workorder_sync - ERROR - 从飞书记录创建工单失败: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-12 09:59:04,705 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:04] "POST /api/feishu-sync/create-workorder HTTP/1.1" 400 - +2025-12-12 09:59:07,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:07] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:59:07,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:12,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:17,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:17] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:59:17,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:22,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:23,519 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 09:59:26,833 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:26] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:59:26,851 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:26] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:31,840 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:31] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:37,285 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:37] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:59:37,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:42,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:47,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:47] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:59:47,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:52,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 09:59:57,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:57] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 09:59:57,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 09:59:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:02,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:07,074 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:00:07,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:07] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:00:07,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:07,386 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:00:07,387 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:00:09,273 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:00:09,284 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:00:09,394 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:00:09,394 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:00:09,418 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:00:12,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:17,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:17] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:00:17,341 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:18,114 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET / HTTP/1.1" 200 - +2025-12-12 10:00:18,358 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:00:18,453 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:00:18,453 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 10:00:18,458 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 10:00:18,460 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 10:00:18,462 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 10:00:18,666 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 10:00:18,776 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 10:00:18,776 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:18] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 10:00:19,586 - websockets.server - INFO - connection open +2025-12-12 10:00:19,586 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:00:19,840 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:19] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:00:19,843 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:19] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:00:19,846 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:19] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:00:19,854 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:19] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:00:19,859 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:19] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:20,152 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:20] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:00:20,157 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:20] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:00:20,162 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:20] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:00:20,166 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:20] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:00:20,168 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:20] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:00:20,175 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:20] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:00:20,489 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:20] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:00:20,821 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:20] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:00:21,063 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:21] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:00:21,140 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:21] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:00:22,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:23,011 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:23] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 10:00:24,607 - websockets.server - INFO - connection open +2025-12-12 10:00:24,607 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:00:24,837 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:24] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:24,906 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:00:24,910 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:24] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:00:25,149 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:00:27,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:27] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:00:27,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:29,526 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:29] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:00:29,624 - websockets.server - INFO - connection open +2025-12-12 10:00:29,624 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + path = websocket.path + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:00:29,848 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:29] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:32,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:00:55,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:00:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:00:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:01:55,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:01:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:01:55,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:01:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:02:55,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:02:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:02:55,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:02:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:03:12,136 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:03:12,432 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:03:12,433 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:03:14,224 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:03:14,233 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:03:14,339 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:03:14,340 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:03:14,363 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:03:24,337 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /dashboard HTTP/1.1" 200 - +2025-12-12 10:03:24,525 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:03:24,525 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:03:24,530 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 10:03:24,544 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 10:03:24,547 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 10:03:24,549 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 10:03:24,556 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 10:03:24,557 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 10:03:24,558 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:24] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 10:03:25,705 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:03:25,705 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:03:25,710 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:03:25,721 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:03:25,727 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:03:25,736 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:03:25,742 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:03:25,742 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:03:25,751 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:03:25,771 - websockets.server - INFO - connection open +2025-12-12 10:03:25,771 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + if websocket.request_headers.get("Origin"): + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:03:25,773 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:03:25,776 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:03:25,794 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:03:25,811 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:03:25,823 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:03:25,833 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:03:26,677 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:26] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 10:03:30,714 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:30] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:03:30,796 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:30] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:03:30,799 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:30] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:03:30,802 - websockets.server - INFO - connection open +2025-12-12 10:03:30,804 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + if websocket.request_headers.get("Origin"): + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:03:30,811 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:30] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:03:35,708 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:35] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:03:35,723 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:35] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:03:35,814 - websockets.server - INFO - connection open +2025-12-12 10:03:35,815 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + if websocket.request_headers.get("Origin"): + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:03:40,711 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:40] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:03:40,821 - websockets.server - INFO - connection open +2025-12-12 10:03:40,821 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + if websocket.request_headers.get("Origin"): + ^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:03:55,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:03:55,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:03:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:04:55,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:04:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:04:55,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:04:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:05:55,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:05:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:05:55,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:05:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:06:55,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:06:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:06:55,326 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:06:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:07:26,517 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:07:26,814 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:07:26,816 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:07:28,608 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:07:28,617 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:07:28,722 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:07:28,723 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:07:28,746 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:07:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:07:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:07:55,332 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:07:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:08:55,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:08:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:08:55,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:08:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:09:36,651 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:09:36,944 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:09:36,945 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:09:38,754 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:09:38,764 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:09:38,877 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:09:38,878 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:09:38,902 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:09:55,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:09:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:09:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:09:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:10:55,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:10:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:10:55,324 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:10:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:11:06,581 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:11:06,877 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:11:06,878 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:11:08,730 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:11:08,740 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:11:08,843 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:11:08,844 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:11:08,867 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:11:44,560 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET / HTTP/1.1" 200 - +2025-12-12 10:11:44,628 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:11:44,632 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:11:44,636 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 10:11:44,640 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 10:11:44,646 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 10:11:44,648 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 10:11:44,652 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 10:11:44,655 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 10:11:44,657 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:44] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 10:11:45,640 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:11:45,641 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:11:45,645 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:11:45,655 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:11:45,663 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:11:45,672 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:11:45,673 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:11:45,680 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:11:45,681 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:11:45,703 - websockets.server - INFO - connection open +2025-12-12 10:11:45,704 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:11:45,706 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:11:45,708 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:11:45,729 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:11:45,745 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:11:45,752 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:11:45,767 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:45] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:11:46,642 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:46] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 10:11:50,657 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:11:50,717 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:50] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:11:50,718 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:50] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:11:50,730 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:50] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:11:50,734 - websockets.server - INFO - connection open +2025-12-12 10:11:50,736 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:11:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:11:55,324 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:11:55,647 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:11:55,663 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:11:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:11:55,757 - websockets.server - INFO - connection open +2025-12-12 10:11:55,758 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:12:00,667 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:12:00,770 - websockets.server - INFO - connection open +2025-12-12 10:12:00,771 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:12:05,656 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:05] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:12:05,665 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:05] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:12:05,777 - websockets.server - INFO - connection open +2025-12-12 10:12:05,778 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:12:10,662 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:10] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:12:10,787 - websockets.server - INFO - connection open +2025-12-12 10:12:10,788 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:12:15,644 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:12:15,653 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:12:15,661 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:12:15,664 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:12:15,674 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:12:15,675 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:12:15,685 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:12:15,703 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:12:15,712 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:12:15,718 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:15] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:12:15,796 - websockets.server - INFO - connection open +2025-12-12 10:12:15,796 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:12:20,656 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:20] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:12:20,802 - websockets.server - INFO - connection open +2025-12-12 10:12:20,803 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:12:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:12:55,330 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:12:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:13:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:13:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:13:55,327 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:13:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:01,488 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET / HTTP/1.1" 200 - +2025-12-12 10:14:01,567 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-12 10:14:01,568 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-12 10:14:01,587 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-12 10:14:01,591 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-12 10:14:01,596 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/js/services/api.js HTTP/1.1" 304 - +2025-12-12 10:14:01,604 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/js/components/NotificationManager.js HTTP/1.1" 304 - +2025-12-12 10:14:01,606 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/js/components/AlertManager.js HTTP/1.1" 304 - +2025-12-12 10:14:01,612 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/js/app-new.js HTTP/1.1" 304 - +2025-12-12 10:14:01,614 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:01] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - +2025-12-12 10:14:02,265 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:14:02,266 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:14:02,271 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:14:02,280 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:14:02,285 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:14:02,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:14:02,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:14:02,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:02,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:14:02,355 - websockets.server - INFO - connection open +2025-12-12 10:14:02,356 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:02,358 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:14:02,362 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:14:02,423 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:14:02,444 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:14:02,453 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:14:02,461 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:14:07,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:08,284 - websockets.server - INFO - connection open +2025-12-12 10:14:08,285 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:08,288 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:08] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:14:08,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:08] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:14:08,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:08] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:14:12,290 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:14:12,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:14,293 - websockets.server - INFO - connection open +2025-12-12 10:14:14,294 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:17,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:20,279 - websockets.server - INFO - connection open +2025-12-12 10:14:20,280 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:22,287 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:14:22,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:26,291 - websockets.server - INFO - connection open +2025-12-12 10:14:26,292 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:27,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:32,288 - websockets.server - INFO - connection open +2025-12-12 10:14:32,289 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:32,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:14:32,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:37,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:37,998 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:14:38,286 - websockets.server - INFO - connection open +2025-12-12 10:14:38,286 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:38,292 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:14:38,293 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:14:40,095 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:14:40,104 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:14:40,207 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:14:40,208 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:14:40,231 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:14:42,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:14:42,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:44,291 - websockets.server - INFO - connection open +2025-12-12 10:14:44,292 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:47,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:48,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:14:49,835 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:49] "GET / HTTP/1.1" 200 - +2025-12-12 10:14:50,099 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:14:50,161 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:14:50,161 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 10:14:50,162 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 10:14:50,165 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 10:14:50,167 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 10:14:50,283 - websockets.server - INFO - connection open +2025-12-12 10:14:50,284 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:50,406 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 10:14:50,468 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 10:14:50,475 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:50] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 10:14:50,930 - websockets.server - INFO - connection open +2025-12-12 10:14:50,931 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:51,177 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:14:51,180 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:14:51,182 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:14:51,191 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:14:51,198 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:51,486 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:14:51,494 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:14:51,496 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:14:51,498 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:14:51,502 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:14:51,509 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:14:51,809 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:51] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:14:52,132 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:52] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:14:52,205 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:52] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 10:14:52,289 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:14:52,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:52,391 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:52] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:14:52,455 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:14:55,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:14:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:55,965 - websockets.server - INFO - connection open +2025-12-12 10:14:55,966 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:56,186 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:56] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:14:56,256 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:56] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:14:56,260 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:56] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:14:56,294 - websockets.server - INFO - connection open +2025-12-12 10:14:56,296 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:14:56,583 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:56] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:14:57,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:14:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:15:00,887 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:15:00,974 - websockets.server - INFO - connection open +2025-12-12 10:15:00,975 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:01,198 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:01] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:15:02,290 - websockets.server - INFO - connection open +2025-12-12 10:15:02,291 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:02,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:15:05,979 - websockets.server - INFO - connection open +2025-12-12 10:15:05,980 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:06,197 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:06] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:15:08,293 - websockets.server - INFO - connection open +2025-12-12 10:15:08,294 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:14,288 - websockets.server - INFO - connection open +2025-12-12 10:15:14,288 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:20,288 - websockets.server - INFO - connection open +2025-12-12 10:15:20,289 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:26,287 - websockets.server - INFO - connection open +2025-12-12 10:15:26,288 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:32,280 - websockets.server - INFO - connection open +2025-12-12 10:15:32,281 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:38,280 - websockets.server - INFO - connection open +2025-12-12 10:15:38,281 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:44,283 - websockets.server - INFO - connection open +2025-12-12 10:15:44,284 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:50,288 - websockets.server - INFO - connection open +2025-12-12 10:15:50,289 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:15:55,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:15:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:15:55,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:15:55,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:55] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:15:55,330 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:15:55,332 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:15:55,350 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:15:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:15:56,283 - websockets.server - INFO - connection open +2025-12-12 10:15:56,284 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:02,283 - websockets.server - INFO - connection open +2025-12-12 10:16:02,283 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:08,294 - websockets.server - INFO - connection open +2025-12-12 10:16:08,295 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:14,285 - websockets.server - INFO - connection open +2025-12-12 10:16:14,285 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:20,280 - websockets.server - INFO - connection open +2025-12-12 10:16:20,281 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:26,287 - websockets.server - INFO - connection open +2025-12-12 10:16:26,287 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:32,292 - websockets.server - INFO - connection open +2025-12-12 10:16:32,293 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:38,282 - websockets.server - INFO - connection open +2025-12-12 10:16:38,282 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:44,293 - websockets.server - INFO - connection open +2025-12-12 10:16:44,294 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:50,289 - websockets.server - INFO - connection open +2025-12-12 10:16:50,290 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:16:55,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:16:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:16:55,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:16:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:16:55,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:16:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:16:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:16:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:16:55,334 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:16:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:16:56,285 - websockets.server - INFO - connection open +2025-12-12 10:16:56,285 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:02,285 - websockets.server - INFO - connection open +2025-12-12 10:17:02,285 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:08,288 - websockets.server - INFO - connection open +2025-12-12 10:17:08,288 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:14,292 - websockets.server - INFO - connection open +2025-12-12 10:17:14,293 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:20,294 - websockets.server - INFO - connection open +2025-12-12 10:17:20,295 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:24,458 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:17:24,751 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:17:24,752 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:17:26,291 - websockets.server - INFO - connection open +2025-12-12 10:17:26,292 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:26,569 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:17:26,579 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:17:26,687 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:17:26,688 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:17:26,711 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:17:32,291 - websockets.server - INFO - connection open +2025-12-12 10:17:32,292 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:36,014 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET / HTTP/1.1" 200 - +2025-12-12 10:17:36,275 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:17:36,339 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:17:36,339 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 10:17:36,341 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 10:17:36,342 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 10:17:36,344 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 10:17:36,584 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 10:17:36,648 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 10:17:36,653 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:36] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 10:17:37,080 - websockets.server - INFO - connection open +2025-12-12 10:17:37,081 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:37,333 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:17:37,334 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:17:37,337 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:17:37,341 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:17:37,352 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:17:37,648 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:17:37,651 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:17:37,654 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:17:37,658 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:17:37,659 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:17:37,665 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:17:37,984 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:37] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:17:38,200 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:38] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 10:17:38,293 - websockets.server - INFO - connection open +2025-12-12 10:17:38,293 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:38,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:38] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:17:38,631 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:38] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:17:38,890 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:38] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:17:42,098 - websockets.server - INFO - connection open +2025-12-12 10:17:42,099 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:42,336 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:17:42,410 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:42] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:17:42,417 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:42] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:17:42,730 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:42] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:17:44,292 - websockets.server - INFO - connection open +2025-12-12 10:17:44,292 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:47,108 - websockets.server - INFO - connection open +2025-12-12 10:17:47,108 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:47,336 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:47] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:17:47,344 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:17:50,289 - websockets.server - INFO - connection open +2025-12-12 10:17:50,290 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:17:55,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:17:55,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:55] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:17:55,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:17:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:17:55,330 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:17:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:17:56,286 - websockets.server - INFO - connection open +2025-12-12 10:17:56,286 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:02,287 - websockets.server - INFO - connection open +2025-12-12 10:18:02,287 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:08,282 - websockets.server - INFO - connection open +2025-12-12 10:18:08,283 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:14,290 - websockets.server - INFO - connection open +2025-12-12 10:18:14,290 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:20,282 - websockets.server - INFO - connection open +2025-12-12 10:18:20,283 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:26,285 - websockets.server - INFO - connection open +2025-12-12 10:18:26,285 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:32,285 - websockets.server - INFO - connection open +2025-12-12 10:18:32,286 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:38,282 - websockets.server - INFO - connection open +2025-12-12 10:18:38,282 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:44,291 - websockets.server - INFO - connection open +2025-12-12 10:18:44,292 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:50,280 - websockets.server - INFO - connection open +2025-12-12 10:18:50,281 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:18:55,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:18:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:18:55,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:18:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:18:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:18:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:18:56,283 - websockets.server - INFO - connection open +2025-12-12 10:18:56,284 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:02,291 - websockets.server - INFO - connection open +2025-12-12 10:19:02,291 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:08,282 - websockets.server - INFO - connection open +2025-12-12 10:19:08,283 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:14,296 - websockets.server - INFO - connection open +2025-12-12 10:19:14,296 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:20,295 - websockets.server - INFO - connection open +2025-12-12 10:19:20,296 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:26,282 - websockets.server - INFO - connection open +2025-12-12 10:19:26,282 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:32,284 - websockets.server - INFO - connection open +2025-12-12 10:19:32,285 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:38,290 - websockets.server - INFO - connection open +2025-12-12 10:19:38,290 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:44,289 - websockets.server - INFO - connection open +2025-12-12 10:19:44,289 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:50,293 - websockets.server - INFO - connection open +2025-12-12 10:19:50,293 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:19:55,325 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:19:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:19:55,331 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:19:55] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:19:55,335 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:19:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:19:55,352 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:19:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:19:55,359 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:19:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:19:56,329 - websockets.server - INFO - connection open +2025-12-12 10:19:56,329 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:20:02,292 - websockets.server - INFO - connection open +2025-12-12 10:20:02,293 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:20:08,289 - websockets.server - INFO - connection open +2025-12-12 10:20:08,289 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:20:14,295 - websockets.server - INFO - connection open +2025-12-12 10:20:14,295 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 247, in handle_client_with_cors + self.port, + ^^^^ +AttributeError: 'ServerConnection' object has no attribute 'path' +2025-12-12 10:20:18,194 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:18] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:20:18,225 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:18] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:22,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:20:22,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:27,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:32,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:20:32,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:37,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:42,290 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:20:42,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:43,051 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:20:43,444 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:20:43,445 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:20:45,490 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:20:45,500 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:20:45,614 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:20:45,615 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:20:45,640 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:20:45,646 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-12 10:20:45,646 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-12 10:20:47,293 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 10:20:47,304 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 10:20:47,333 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:48,813 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:48] "GET / HTTP/1.1" 200 - +2025-12-12 10:20:49,080 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-12 10:20:49,086 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/js/app-new.js HTTP/1.1" 304 - +2025-12-12 10:20:49,091 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - +2025-12-12 10:20:49,137 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-12 10:20:49,140 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/js/components/NotificationManager.js HTTP/1.1" 304 - +2025-12-12 10:20:49,143 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-12 10:20:49,151 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-12 10:20:49,164 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/js/services/api.js HTTP/1.1" 304 - +2025-12-12 10:20:49,171 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /static/js/components/AlertManager.js HTTP/1.1" 304 - +2025-12-12 10:20:49,488 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:20:49,489 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:20:49,494 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-12 10:20:49,497 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-12 10:20:49,502 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:20:49,506 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-12 10:20:49,508 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:20:49,514 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:20:49,526 - websockets.server - INFO - connection open +2025-12-12 10:20:49,532 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.handle_client() missing 1 required positional argument: 'path' +2025-12-12 10:20:49,534 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:49,539 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:20:49,543 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:20:49,545 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:20:49,554 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:20:49,577 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-12 10:20:49,577 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-12 10:20:49,578 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-12 10:20:49,581 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-12 10:20:49,585 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-12 10:20:49,588 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-12 10:20:49,591 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-12 10:20:49,593 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-12 10:20:49,595 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-12 10:20:49,597 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-12 10:20:49,600 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-12 10:20:49,602 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-12 10:20:49,604 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-12 10:20:49,606 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-12 10:20:49,608 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-12 10:20:49,611 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-12 10:20:49,613 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-12 10:20:49,616 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-12 10:20:49,624 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-12 10:20:49,628 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:20:49,629 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-12 10:20:49,630 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-12 10:20:49,634 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-12 10:20:49,637 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-12 10:20:49,639 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-12 10:20:49,641 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-12 10:20:49,653 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:20:49,662 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:20:49,675 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:20:49,686 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:49] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:20:52,021 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:52] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 10:20:52,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:20:52,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:54,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:54] "GET /api/workorders/1 HTTP/1.1" 200 - +2025-12-12 10:20:54,528 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:54] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:54,537 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:20:54,546 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:54] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:20:54,575 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:20:54,634 - websockets.server - INFO - connection open +2025-12-12 10:20:54,637 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.handle_client() missing 1 required positional argument: 'path' +2025-12-12 10:20:55,141 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET / HTTP/1.1" 200 - +2025-12-12 10:20:55,401 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:20:55,462 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:20:55,465 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 10:20:55,468 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 10:20:55,470 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 10:20:55,472 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 10:20:55,712 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 10:20:55,774 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 10:20:55,775 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:55] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 10:20:56,227 - websockets.server - INFO - connection open +2025-12-12 10:20:56,228 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.handle_client() missing 1 required positional argument: 'path' +2025-12-12 10:20:56,474 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:20:56,479 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:20:56,483 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:20:56,493 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:20:56,505 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:56,785 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:20:56,792 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:20:56,794 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:20:56,801 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:20:56,815 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:20:56,820 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:56] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:20:57,107 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:57] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:20:57,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:57,435 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:57] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:20:57,460 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:57] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 10:20:57,692 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:57] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:20:57,754 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:20:59,481 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:59] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:20:59,496 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:20:59] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:20:59,661 - websockets.server - INFO - connection open +2025-12-12 10:20:59,662 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.handle_client() missing 1 required positional argument: 'path' +2025-12-12 10:21:01,250 - websockets.server - INFO - connection open +2025-12-12 10:21:01,251 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.handle_client() missing 1 required positional argument: 'path' +2025-12-12 10:21:01,491 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:01] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:01,550 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:21:01,556 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:01] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:21:01,875 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:01] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:21:02,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:02,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:04,487 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:04] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:04,669 - websockets.server - INFO - connection open +2025-12-12 10:21:04,669 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.handle_client() missing 1 required positional argument: 'path' +2025-12-12 10:21:06,268 - websockets.server - INFO - connection open +2025-12-12 10:21:06,268 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.handle_client() missing 1 required positional argument: 'path' +2025-12-12 10:21:06,486 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:06] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:06,504 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:06] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:07,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:09,492 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:09] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:09,546 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:09] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:09,685 - websockets.server - INFO - connection open +2025-12-12 10:21:09,686 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.handle_client() missing 1 required positional argument: 'path' +2025-12-12 10:21:12,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:12,322 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:15,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:15] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:17,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:20,290 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:20] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:20,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:20] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:22,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:22,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:25,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:30,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:30] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:30,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:30] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:35,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:35] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:40,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:40] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:40,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:40] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:45,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:45] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:50,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:50] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:50,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:55,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:21:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:21:55,326 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:21:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:22:00,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:22:00,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:22:05,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:05] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:22:10,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:10] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:22:10,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:10] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:22:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:22:55,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:22:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:22:55,349 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:22:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:24,018 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:23:24,036 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:23:24,037 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:23:24,043 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:23:24,057 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:23:24,062 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:23:24,068 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:23:24,074 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:24,083 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:23:24,102 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:24,490 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:24] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:27,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:27,360 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:27] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 10:23:28,191 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:28] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 10:23:28,972 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:28] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 10:23:29,488 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:29] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:23:29,504 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:29] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:29,756 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:29] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:23:29,757 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:29] "GET /api/agent/tools/stats HTTP/1.1" 200 - +2025-12-12 10:23:30,188 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:23:30,493 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:23:30,495 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:23:32,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:23:32,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:32,372 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:23:32,382 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:23:32,489 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:23:32,490 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:23:32,515 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:23:33,519 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:33] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:23:33,520 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:33] "GET /api/agent/tools/stats HTTP/1.1" 200 - +2025-12-12 10:23:34,498 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:34] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:34,873 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:34] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 10:23:37,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:39,391 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:39] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 10:23:39,486 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:39] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:23:39,502 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:39] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:41,279 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:41] "GET /api/token-monitor/stats HTTP/1.1" 200 - +2025-12-12 10:23:41,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:41] "GET /api/token-monitor/records HTTP/1.1" 200 - +2025-12-12 10:23:41,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:41] "GET /api/token-monitor/chart HTTP/1.1" 200 - +2025-12-12 10:23:41,826 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:41] "GET /api/ai-monitor/stats HTTP/1.1" 200 - +2025-12-12 10:23:41,837 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:41] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - +2025-12-12 10:23:41,839 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:41] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - +2025-12-12 10:23:41,841 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:41] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - +2025-12-12 10:23:42,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:23:42,351 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:43,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:43] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:23:43,366 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:43] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:23:43,405 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:43] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:23:43,753 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:43] "GET /api/system-optimizer/status HTTP/1.1" 200 - +2025-12-12 10:23:43,762 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:43] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - +2025-12-12 10:23:43,764 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:43] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - +2025-12-12 10:23:43,766 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:43] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - +2025-12-12 10:23:44,487 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:44] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:47,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:50,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:50] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:23:50,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:52,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:23:52,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:23:57,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:23:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:00,288 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:00,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:02,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:02,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:05,293 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 10:24:05,293 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 10:24:05,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:05] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:07,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:10,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:10] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:10,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:10] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:21,790 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:24:22,087 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:24:22,089 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:24:23,943 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:24:23,953 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:24:24,058 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:24:24,059 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:24:24,082 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:24:24,088 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-12 10:24:24,088 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-12 10:24:24,377 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 10:24:24,379 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 10:24:24,399 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:24] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:25,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:30,290 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:30] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:30,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:30] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:35,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:35] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:37,895 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:37] "GET / HTTP/1.1" 200 - +2025-12-12 10:24:38,194 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:24:38,219 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:24:38,219 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 10:24:38,220 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 10:24:38,221 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 10:24:38,223 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 10:24:38,513 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 10:24:38,527 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 10:24:38,531 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:38] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 10:24:38,926 - websockets.server - INFO - connection open +2025-12-12 10:24:38,927 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 216, in handle_client + headers = websocket.request_headers + ^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'request_headers' +2025-12-12 10:24:39,177 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:24:39,178 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:39,186 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-12 10:24:39,187 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-12 10:24:39,189 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:24:39,193 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-12 10:24:39,195 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:24:39,202 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:39,485 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:24:39,495 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:24:39,503 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:24:39,508 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:24:39,509 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:24:39,519 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-12 10:24:39,521 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-12 10:24:39,521 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-12 10:24:39,523 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-12 10:24:39,524 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-12 10:24:39,525 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-12 10:24:39,526 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-12 10:24:39,527 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-12 10:24:39,529 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-12 10:24:39,531 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-12 10:24:39,532 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-12 10:24:39,533 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-12 10:24:39,535 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-12 10:24:39,536 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-12 10:24:39,537 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-12 10:24:39,538 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-12 10:24:39,539 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-12 10:24:39,540 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-12 10:24:39,541 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-12 10:24:39,542 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-12 10:24:39,543 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-12 10:24:39,544 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-12 10:24:39,547 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-12 10:24:39,548 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-12 10:24:39,549 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-12 10:24:39,555 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:24:39,824 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:39] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:24:40,152 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:40] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:24:40,290 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:40] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:40,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:40] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 10:24:40,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:40] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:40,412 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:40] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:24:40,475 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:40] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:24:43,941 - websockets.server - INFO - connection open +2025-12-12 10:24:43,942 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 216, in handle_client + headers = websocket.request_headers + ^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'request_headers' +2025-12-12 10:24:44,198 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:44] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:44,242 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:44] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:24:44,247 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:44] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:24:44,563 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:44] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:24:45,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:45] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:48,952 - websockets.server - INFO - connection open +2025-12-12 10:24:48,953 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 216, in handle_client + headers = websocket.request_headers + ^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'request_headers' +2025-12-12 10:24:49,188 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:49] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:49,206 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:49] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:53,964 - websockets.server - INFO - connection open +2025-12-12 10:24:53,965 - websockets.server - ERROR - connection handler failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + File "D:\code\assist\src\web\websocket_server.py", line 216, in handle_client + headers = websocket.request_headers + ^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'ServerConnection' object has no attribute 'request_headers' +2025-12-12 10:24:54,187 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:54] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:55,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:55,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:24:55,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:24:55,330 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:24:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:25:55,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:25:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:25:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:25:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:25:55,320 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:25:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:25:55,338 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:25:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:26:38,737 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:26:39,032 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:26:39,034 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:26:40,853 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:26:40,862 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:26:40,967 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:26:40,967 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:26:40,989 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:26:55,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:26:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:26:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:26:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:26:55,329 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:26:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:26:55,355 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:26:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:31,394 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:27:31,409 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:27:31,424 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:27:31,436 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:27:31,450 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:27:31,453 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:27:31,463 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:27:31,468 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:31,501 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:27:31,526 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:31] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:32,265 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:27:32,283 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:35,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:35] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:37,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:40,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:40] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:27:40,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:40] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:42,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:27:42,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:45,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:45] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:47,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:49,389 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 10:27:49,691 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 10:27:49,693 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 10:27:50,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:50] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:27:50,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:51,544 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 10:27:51,553 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 10:27:51,667 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 10:27:51,667 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 10:27:51,693 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 10:27:52,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:27:52,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:55,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:27:57,295 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 10:27:57,302 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 10:27:57,326 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:27:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:00,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:00,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:02,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:02,346 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:02,606 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET / HTTP/1.1" 200 - +2025-12-12 10:28:02,905 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:28:02,925 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 10:28:02,928 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 10:28:02,932 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 10:28:02,933 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 10:28:02,935 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:02] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 10:28:03,218 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:03] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 10:28:03,231 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:03] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 10:28:03,236 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:03] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 10:28:03,890 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:03] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 10:28:03,894 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-12 10:28:03,895 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:03] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:03,898 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-12 10:28:03,902 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:03] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 10:28:03,905 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-12 10:28:03,908 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:03] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 10:28:03,914 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:03] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:04,217 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:28:04,224 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 10:28:04,229 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 10:28:04,232 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 10:28:04,238 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 10:28:04,243 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-12 10:28:04,244 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-12 10:28:04,244 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-12 10:28:04,246 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-12 10:28:04,247 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-12 10:28:04,248 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-12 10:28:04,250 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-12 10:28:04,251 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-12 10:28:04,252 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-12 10:28:04,253 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-12 10:28:04,254 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-12 10:28:04,255 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-12 10:28:04,256 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-12 10:28:04,257 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-12 10:28:04,259 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-12 10:28:04,260 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-12 10:28:04,263 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-12 10:28:04,264 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-12 10:28:04,265 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-12 10:28:04,266 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-12 10:28:04,267 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-12 10:28:04,268 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-12 10:28:04,269 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-12 10:28:04,271 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-12 10:28:04,272 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-12 10:28:04,278 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:28:04,558 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:28:04,784 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 10:28:04,881 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:04] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:28:05,202 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:05] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:28:05,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:05] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:05,449 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:05] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:28:07,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:08,910 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:08] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:08,954 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:08] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:28:08,957 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:08] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:28:09,278 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:09] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:28:10,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:10] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:10,322 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:10] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:12,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:12,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:13,899 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:13] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:13,912 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:13] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:15,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:15] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:17,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:20,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:20] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:20,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:20] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:22,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:22,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:25,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:27,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:30,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:30] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:30,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:30] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:32,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:32,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:55,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:28:55,324 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:28:55,344 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:28:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:29:55,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:29:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:29:55,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:29:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:29:55,320 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:29:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:29:55,334 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:29:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:18,934 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:30:18,949 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:18] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:30:18,950 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:18] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:18,958 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:30:18,970 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:18] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:18,973 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:18] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:30:18,983 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:18] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:30:18,985 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:18] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:19,001 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:19] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:30:19,013 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:19] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:19,485 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:19] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:19,500 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:19] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:22,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:22,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:22,966 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d +2025-12-12 10:30:23,141 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 6579, 'msg': 'ok', 'tenant_access_token': 't-g104ccakLJU4WR564CXVQVOIUJO6WHOAB33FQYJV'} +2025-12-12 10:30:23,141 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ccakLJU4WR564C... +2025-12-12 10:30:23,141 - src.integrations.feishu_client - INFO - 令牌有效期: 6579秒,过期时间: 2025-12-12 12:20:02 +2025-12-12 10:30:23,143 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records +2025-12-12 10:30:23,143 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ccakLJU4WR564C... +2025-12-12 10:30:24,486 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:24] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:27,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:28,382 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-12 10:30:28,383 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} +2025-12-12 10:30:28,386 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:28] "GET /api/feishu-sync/preview-feishu-data HTTP/1.1" 200 - +2025-12-12 10:30:29,480 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:29] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:29,494 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:29] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:31,183 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... +2025-12-12 10:30:31,184 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records +2025-12-12 10:30:31,184 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ccakLJU4WR564C... +2025-12-12 10:30:32,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:32,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:32,953 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-12 10:30:32,954 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} +2025-12-12 10:30:32,957 - src.integrations.workorder_sync - INFO - 从飞书获取 4 条记录 +2025-12-12 10:30:32,957 - src.integrations.workorder_sync - INFO - 开始生成AI建议... +2025-12-12 10:30:32,958 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True +2025-12-12 10:30:32,958 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] +2025-12-12 10:30:32,958 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正 +2025-12-12 10:30:32,958 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 190 +2025-12-12 10:30:32,959 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下: +模拟LLM响应: +作为技术支持专家,请基于 +2025-12-12 10:30:32,960 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765506632 +2025-12-12 10:30:32,962 - src.knowledge_base.knowledge_manager - WARNING - 知识库中没有活跃条目 +2025-12-12 10:30:35,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:35] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:37,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:39,480 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:39] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:39,502 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:39] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:42,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:42,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:44,491 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:44] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:47,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:50,285 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:50] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:50,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:52,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:30:52,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:55,951 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:30:55,963 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:30:57,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:30:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:30:59,685 - src.core.llm_client - INFO - API请求成功 +2025-12-12 10:30:59,694 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 您好,感谢您对奇瑞汽车智能座舱体验的关注。针对“天气小部件(Weather Widget)无法工作”的问题,结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业、分阶段... +2025-12-12 10:30:59,694 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 您好,感谢您对奇瑞汽车智能座舱体验的关注。针对“天气小部件(Weather Widget)无法工作”的问题,结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业、分阶段 +2025-12-12 10:30:59,694 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 您好,感谢您对奇瑞汽车智能座舱体验的关注。针对“天气小部件(Weather Widget)无法工作”的问题,结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业、分阶段 +2025-12-12 10:30:59,695 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 您好,感谢您对奇瑞汽车智能座舱体验的关注。针对“天气小部件(Weather Widget)无法工作”的问题,结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业、分阶段... +2025-12-12 10:30:59,695 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1212, existing长度=190 +2025-12-12 10:30:59,696 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 311 +2025-12-12 10:30:59,696 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议长度: 231 +2025-12-12 10:30:59,696 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议前100字符: 1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属 +2025-12-12 10:30:59,697 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765506659 +2025-12-12 10:30:59,699 - src.knowledge_base.knowledge_manager - WARNING - 知识库中没有活跃条目 +2025-12-12 10:31:00,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:00,320 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:02,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:02,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:05,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:05] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:07,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:10,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:10] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:10,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:10] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:12,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:12,323 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:15,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:15] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:17,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:20,287 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:20] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:20,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:20] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:22,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:22,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:25,033 - src.core.llm_client - INFO - API请求成功 +2025-12-12 10:31:25,041 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 该工单问题已明确定性为TBOX自2023年10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止上传、APP端数据滞留(最后更新为10月19日)、且无任何TBOX日志记录——这表... +2025-12-12 10:31:25,041 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 该工单问题已明确定性为TBOX自2023年10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止上传、APP端数据滞留(最后更新为10月19日)、且无任何TBOX日志记录——这表 +2025-12-12 10:31:25,042 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 该工单问题已明确定性为TBOX自2023年10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止上传、APP端数据滞留(最后更新为10月19日)、且无任何TBOX日志记录——这表 +2025-12-12 10:31:25,043 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 该工单问题已明确定性为TBOX自2023年10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止上传、APP端数据滞留(最后更新为10月19日)、且无任何TBOX日志记录——这表... +2025-12-12 10:31:25,043 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1212, existing长度=231 +2025-12-12 10:31:25,044 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLSh2a2S7 生成AI建议,新建议长度: 378 +2025-12-12 10:31:25,044 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议长度: 197 +2025-12-12 10:31:25,045 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议前100字符: 1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。 +模拟LLM响应: +作为技术支 +2025-12-12 10:31:25,046 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765506685 +2025-12-12 10:31:25,047 - src.knowledge_base.knowledge_manager - WARNING - 知识库中没有活跃条目 +2025-12-12 10:31:25,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:27,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:30,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:30] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:30,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:30] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:32,290 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:32,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:35,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:35] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:37,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:40,289 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:40] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:40,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:40] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:42,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:42,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:45,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:45] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:47,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:48,976 - src.core.llm_client - INFO - API请求成功 +2025-12-12 10:31:48,984 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 经分析当前工单进展:用户无法通过手机号或二维码任一方式进入会员中心,且已提供DMC日志(含完整鉴权流程记录)及实操视频(1024时间戳),远程复现充分,可排除用户端输入错误、网络临时中断或操作流程误触... +2025-12-12 10:31:48,985 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 经分析当前工单进展:用户无法通过手机号或二维码任一方式进入会员中心,且已提供DMC日志(含完整鉴权流程记录)及实操视频(1024时间戳),远程复现充分,可排除用户端输入错误、网络临时中断或操作流程误触 +2025-12-12 10:31:48,986 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 经分析当前工单进展:用户无法通过手机号或二维码任一方式进入会员中心,且已提供DMC日志(含完整鉴权流程记录)及实操视频(1024时间戳),远程复现充分,可排除用户端输入错误、网络临时中断或操作流程误触 +2025-12-12 10:31:48,987 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 经分析当前工单进展:用户无法通过手机号或二维码任一方式进入会员中心,且已提供DMC日志(含完整鉴权流程记录)及实操视频(1024时间戳),远程复现充分,可排除用户端输入错误、网络临时中断或操作流程误触... +2025-12-12 10:31:48,987 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1212, existing长度=197 +2025-12-12 10:31:48,988 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKLlRJ 生成AI建议,新建议长度: 310 +2025-12-12 10:31:48,988 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议长度: 212 +2025-12-12 10:31:48,988 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议前100字符: 1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下: + +2025-12-12 10:31:48,990 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765506708 +2025-12-12 10:31:48,992 - src.knowledge_base.knowledge_manager - WARNING - 知识库中没有活跃条目 +2025-12-12 10:31:50,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:50] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:50,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:52,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:31:52,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:31:55,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:31:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:32:17,690 - src.core.llm_client - INFO - API请求成功 +2025-12-12 10:32:17,697 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 您好,感谢您对奇瑞汽车技术支持的信任。针对当前“Abnormal traffic consumption”(异常流量消耗)工单,结合已有处理进展与技术特征,现提供专业分析与闭环处理建议如下: + +一、问... +2025-12-12 10:32:17,698 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 您好,感谢您对奇瑞汽车技术支持的信任。针对当前“Abnormal traffic consumption”(异常流量消耗)工单,结合已有处理进展与技术特征,现提供专业分析与闭环处理建议如下: + +一、问 +2025-12-12 10:32:17,698 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 您好,感谢您对奇瑞汽车技术支持的信任。针对当前“Abnormal traffic consumption”(异常流量消耗)工单,结合已有处理进展与技术特征,现提供专业分析与闭环处理建议如下: +2025-12-12 10:32:17,698 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 您好,感谢您对奇瑞汽车技术支持的信任。针对当前“Abnormal traffic consumption”(异常流量消耗)工单,结合已有处理进展与技术特征,现提供专业分析与闭环处理建议如下:... +2025-12-12 10:32:17,699 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1212, existing长度=212 +2025-12-12 10:32:17,699 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKjKvx 生成AI建议,新建议长度: 313 +2025-12-12 10:32:17,699 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 +2025-12-12 10:32:17,700 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ccakLJU4WR564C... +2025-12-12 10:32:20,460 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-12 10:32:20,460 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "1212:您好,感谢您对奇瑞汽车智能座舱体验的关注。针对“天气小部件(Weather Widget)无法工作”的问题,结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业、分阶段的技术分析与升级处理建议如下:\n1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} +2025-12-12 10:32:20,462 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 +2025-12-12 10:32:20,462 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLSh2a2S7 +2025-12-12 10:32:20,462 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ccakLJU4WR564C... +2025-12-12 10:32:22,466 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-12 10:32:22,467 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1212:该工单问题已明确定性为TBOX自2023年10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止上传、APP端数据滞留(最后更新为10月19日)、且无任何TBOX日志记录——这表明TBOX未执行常规唤醒周期(如定时心跳、CAN总线活动触发唤醒或远程指令唤醒),\n1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}}, 'msg': 'success'} +2025-12-12 10:32:22,468 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLSh2a2S7 的AI建议 +2025-12-12 10:32:22,469 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKLlRJ +2025-12-12 10:32:22,469 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ccakLJU4WR564C... +2025-12-12 10:32:24,719 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-12 10:32:24,720 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1212:经分析当前工单进展:用户无法通过手机号或二维码任一方式进入会员中心,且已提供DMC日志(含完整鉴权流程记录)及实操视频(1024时间戳),远程复现充分,可排除用户端输入错误、网络临时中断或操作流程误触等基础性问题。\n1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}}, 'msg': 'success'} +2025-12-12 10:32:24,722 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKLlRJ 的AI建议 +2025-12-12 10:32:24,722 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKjKvx +2025-12-12 10:32:24,722 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ccakLJU4WR564C... +2025-12-12 10:32:26,647 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-12 10:32:26,647 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1212:您好,感谢您对奇瑞汽车技术支持的信任。针对当前“Abnormal traffic consumption”(异常流量消耗)工单,结合已有处理进展与技术特征,现提供专业分析与闭环处理建议如下:\n1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}}, 'msg': 'success'} +2025-12-12 10:32:26,648 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKjKvx 的AI建议 +2025-12-12 10:32:26,652 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': "1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} +2025-12-12 10:32:26,653 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-12 10:32:26,654 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:您好,感谢您反馈天气小部件异常问题。结合当前处理进度(0428已确认TBOX/IHU登录正常、流量绑定正常),现提供专业分析与升级处理建议如下: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:The widget weather doesn't work + +相关背景信息: +无相关背景信息 + +请提供: +1. 问题... +2025-12-12 10:32:26,654 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy +2025-12-12 10:32:26,655 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 +2025-12-12 10:32:26,655 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M +2025-12-12 10:32:26,655 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-12 10:32:26,656 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work +2025-12-12 10:32:26,656 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-12 10:32:26,656 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 +2025-12-12 10:32:26,657 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-12 10:32:26,657 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. +2025-12-12 10:32:26,658 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles +2025-12-12 10:32:26,658 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 +2025-12-12 10:32:26,658 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) +2025-12-12 10:32:26,658 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy +2025-12-12 10:32:26,658 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 +2025-12-12 10:32:26,663 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-12 10:32:26,663 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-12 10:32:26,664 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-12 10:32:26,664 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-12 10:32:26,664 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-12 10:32:26,666 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'} +2025-12-12 10:32:26,666 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-12 10:32:26,666 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:该工单问题已明确为TBOX自10月19日起持续处于深度睡眠(Deep Sleep)状态,导致车辆数据停止更新、APP端数据滞留、且无任何TBOX日志上传——这已超出远程唤醒与诊断能力范围,属典型TBOX通信链路或电源管理异常。 +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Vehicle data is not updated in the app => dated from October,... +2025-12-12 10:32:26,667 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-12 10:32:26,667 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 +2025-12-12 10:32:26,667 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: TBOX +2025-12-12 10:32:26,667 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-12 10:32:26,667 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. + +2025-12-12 10:32:26,668 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-12 10:32:26,668 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR863 +2025-12-12 10:32:26,668 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-12 10:32:26,668 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi +2025-12-12 10:32:26,669 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control +2025-12-12 10:32:26,669 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LNNBDDEZ8SD345645 +2025-12-12 10:32:26,669 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: JAECOO J7(T1EJ) +2025-12-12 10:32:26,669 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 刘娇龙 +2025-12-12 10:32:26,669 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 +2025-12-12 10:32:26,671 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-12 10:32:26,672 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-12 10:32:26,672 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-12 10:32:26,672 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-12 10:32:26,672 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-12 10:32:26,673 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'} +2025-12-12 10:32:26,674 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-12 10:32:26,674 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:经分析当前工单进展:用户无法通过手机号或二维码登录会员中心,且已上传DMC日志及问题视频(时间戳1024),说明远程行为已完整复现,初步排除用户操作误触可能。 +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:User not able to enter into member center neither mobile phon... +2025-12-12 10:32:26,675 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-12 10:32:26,675 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 +2025-12-12 10:32:26,675 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: 生态/ecologically +2025-12-12 10:32:26,676 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-12 10:32:26,676 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: User not able to enter into member center neither mobile phone nor QR code. +2025-12-12 10:32:26,676 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-12 10:32:26,676 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR864 +2025-12-12 10:32:26,676 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing +2025-12-12 10:32:26,677 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 23/10: DMC logs attached as well as vieos of the issue. +2025-12-12 10:32:26,677 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Problem with auth in member center +2025-12-12 10:32:26,677 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LNNBDDEZXSD449358 +2025-12-12 10:32:26,678 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED VX FL(M36T) +2025-12-12 10:32:26,678 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 袁清 +2025-12-12 10:32:26,678 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024: DMC logs attached as well as vieos of the issue. +2025-12-12 10:32:26,680 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-12 10:32:26,680 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-12 10:32:26,680 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-12 10:32:26,681 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-12 10:32:26,681 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-12 10:32:26,682 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下:\n模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'} +2025-12-12 10:32:26,683 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程', '当前问题状态'] +2025-12-12 10:32:26,683 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1208:您好,感谢您反馈异常流量消耗问题。结合当前工单进展(已建议抓取DMC日志、用户确认仅使用导航且3天消耗3.12GB,症状与E0X车型TR866案例高度一致),现提供专业分析与处理建议如下: +模拟LLM响应: +作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: + +问题描述:Abnormal traffic consumption + +相关背景信息: +相关知识库信息: +- TR866 - Traf... +2025-12-12 10:32:26,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi +2025-12-12 10:32:26,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761235200000 +2025-12-12 10:32:26,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: DMC +2025-12-12 10:32:26,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail +2025-12-12 10:32:26,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Abnormal traffic consumption +2025-12-12 10:32:26,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low +2025-12-12 10:32:26,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR866 +2025-12-12 10:32:26,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Analysising +2025-12-12 10:32:26,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi +24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached +2025-12-12 10:32:26,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Traffic is over +2025-12-12 10:32:26,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: XEYDD14B3SA012164 +2025-12-12 10:32:26,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: TEST +2025-12-12 10:32:26,687 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi +2025-12-12 10:32:26,687 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> resolution: 1024:建议用户抓去DMC日志回传分析 +1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf +2025-12-12 10:32:26,689 - src.integrations.flexible_field_mapper - INFO - 飞书字段 当前问题状态 不存在于数据中 +2025-12-12 10:32:26,690 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 1 +2025-12-12 10:32:26,690 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 15, 未映射 1 +2025-12-12 10:32:26,690 - src.integrations.workorder_sync - WARNING - 未映射字段: ['当前问题状态'] +2025-12-12 10:32:26,691 - src.integrations.workorder_sync - INFO - 字段 '当前问题状态' 的建议映射: {'local_field': 'status', 'similarity': 0.7, 'matched_pattern': '.*状态.*', 'confidence': 'medium', 'reason': "匹配模式 '.*状态.*'"} +2025-12-12 10:32:26,714 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 4, 'synced_count': 4, 'created_count': 3, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} +2025-12-12 10:32:26,714 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:32:26] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - +2025-12-12 10:32:26,727 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:32:26] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 10:32:55,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:32:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:32:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:32:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:32:55,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:32:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:32:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:32:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:33:55,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:33:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:33:55,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:33:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:33:55,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:33:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:33:55,327 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:33:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:34:55,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:34:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:34:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:34:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:34:55,319 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:34:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:34:55,335 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:34:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:35:55,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:35:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:35:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:35:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:35:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:35:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:35:55,332 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:35:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:36:55,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:36:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:36:55,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:36:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:36:55,324 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:36:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:36:55,341 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:36:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:37:55,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:37:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:37:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:37:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:37:55,335 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:37:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:37:55,356 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:37:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:38:55,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:38:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:38:55,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:38:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:38:55,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:38:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:38:55,333 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:38:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:39:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:39:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:39:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:39:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:39:55,327 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:39:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:39:55,341 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:39:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:39:59,648 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:39:59] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:39:59,664 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:39:59] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:39:59,671 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:39:59] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:39:59,684 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:39:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:40:02,287 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:40:02,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:07,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:12,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:40:12,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:17,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:22,287 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:40:22,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:27,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:32,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:40:32,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:37,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:42,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:40:42,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:47,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:52,289 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:40:52,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:55,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:40:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:40:57,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:40:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:41:55,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:41:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:41:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:41:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:41:55,323 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:41:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:41:55,339 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:41:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:05,149 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:05] "GET / HTTP/1.1" 200 - +2025-12-12 10:42:05,992 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:05] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 10:42:06,009 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:06] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 10:42:06,020 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:06] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:42:06,031 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:06] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:42:11,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:11] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:16,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:16] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:42:16,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:16] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:21,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:21] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:26,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:26] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:42:26,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:26] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:31,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:31] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:36,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:36] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:42:36,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:36] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:41,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:41] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:46,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:46] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:42:46,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:46] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:51,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:51] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:55,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:42:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:55,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:42:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:42:56,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:56] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:42:56,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:42:56] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:43:01,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:01] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:43:06,287 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:06] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:43:06,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:06] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:43:55,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:43:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:43:55,326 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:43:55,327 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:43:55,343 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:43:55,360 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:43:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:44:55,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:44:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:44:55,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:44:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:44:55,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:44:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:44:55,327 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:44:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:44:55,343 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:44:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:44:55,359 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:44:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:45:55,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:45:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:45:55,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:45:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:45:55,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:45:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:45:55,320 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:45:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:45:55,336 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:45:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:45:55,352 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:45:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:46:55,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:46:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:46:55,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:46:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:46:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:46:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:46:55,335 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:46:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:46:55,350 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:46:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:46:55,360 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:46:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:47:47,574 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:47] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 10:47:47,585 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:47] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:47:47,596 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:47:47,601 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:47] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 10:47:47,613 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:47] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 10:47:52,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:47:52,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:47:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:47:55,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:47:55,326 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:47:55,341 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:47:57,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:47:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:02,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:48:02,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:07,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:12,285 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:48:12,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:17,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:22,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:48:22,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:27,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:32,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:48:32,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:37,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:42,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:48:42,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:47,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:55,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:48:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:48:55,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:48:55,325 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:55,341 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:48:55,358 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:48:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:49:55,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:49:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:49:55,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:49:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:49:55,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:49:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:49:55,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:49:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:49:55,332 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:49:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:49:55,348 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:49:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:50:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:50:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:50:55,320 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:50:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:50:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:50:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:50:55,329 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:50:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:50:55,349 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:50:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:50:55,367 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:50:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:51:55,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:51:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:51:55,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:51:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:51:55,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:51:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:51:55,319 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:51:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:51:55,334 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:51:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:51:55,351 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:51:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:52:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:52:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:52:55,319 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:52:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:52:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:52:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:52:55,332 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:52:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:52:55,350 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:52:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:52:55,361 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:52:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:53:55,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:53:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:53:55,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:53:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:53:55,320 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:53:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:53:55,326 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:53:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:53:55,340 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:53:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:53:55,355 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:53:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:54:55,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:54:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:54:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:54:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:54:55,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:54:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:54:55,324 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:54:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:54:55,339 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:54:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:54:55,356 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:54:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:55:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:55:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:55:55,325 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:55:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:55:55,337 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:55:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:55:55,347 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:55:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:55:55,370 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:55:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:55:55,386 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:55:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:56:55,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:56:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:56:55,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:56:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:56:55,323 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:56:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:56:55,330 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:56:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:56:55,346 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:56:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:56:55,361 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:56:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:57:55,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:57:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:57:55,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:57:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:57:55,320 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:57:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:57:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:57:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:57:55,343 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:57:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:57:55,356 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:57:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:58:55,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:58:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:58:55,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:58:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:58:55,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:58:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:58:55,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:58:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:58:55,330 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:58:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:58:55,346 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:58:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:59:55,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:59:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:59:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:59:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:59:55,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:59:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 10:59:55,326 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:59:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:59:55,342 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:59:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 10:59:55,357 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 10:59:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:00:55,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:00:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:00:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:00:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:00:55,322 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:00:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:00:55,329 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:00:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:00:55,347 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:00:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:00:55,369 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:00:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:01:55,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:01:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:01:55,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:01:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:01:55,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:01:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:01:55,323 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:01:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:01:55,339 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:01:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:01:55,352 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:01:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:02:55,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:02:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:02:55,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:02:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:02:55,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:02:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:02:55,319 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:02:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:02:55,333 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:02:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:02:55,347 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:02:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:03:55,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:03:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:03:55,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:03:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:03:55,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:03:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:03:55,323 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:03:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:03:55,338 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:03:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:03:55,353 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:03:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:04:55,289 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:04:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:04:55,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:04:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:04:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:04:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:04:55,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:04:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:04:55,327 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:04:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:04:55,343 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:04:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:25,742 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:25] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:05:25,759 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:25] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:05:25,771 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:25] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 11:05:25,771 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:25,789 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 11:05:27,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:32,289 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:05:32,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:37,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:42,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:05:42,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:47,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:52,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:05:52,339 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:55,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:05:55,328 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:05:55,341 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:55,360 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:05:57,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:05:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:02,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:06:02,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:07,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:12,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:06:12,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:17,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:22,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:06:22,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:40,866 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:40] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:06:40,881 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:40] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:06:40,896 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:40] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:40,900 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:40] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 11:06:40,918 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:40] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 11:06:42,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:06:42,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:47,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:52,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:06:52,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:55,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:06:55,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:06:55,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:55,339 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:06:57,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:06:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:02,289 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:02,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:07,305 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:12,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:12,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:17,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:19,874 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:19] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:07:22,288 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:22] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:22,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:27,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:32,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:32,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:32] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:37,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:37] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:39,927 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:39] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:07:39,937 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:39] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:39,939 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:39] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 11:07:39,957 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:39] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:39,960 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:39] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 11:07:41,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:41] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:42,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:42,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:46,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:46] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:46,317 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:46] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:47,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:51,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:51] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:52,287 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:52,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:55,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:55,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:56,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:56] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:07:56,309 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:56] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:07:57,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:07:57] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:01,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:01] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:02,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:02] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:02,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:02] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:06,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:06] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:06,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:06] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:07,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:11,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:11] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:12,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:12] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:12,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:12] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:16,318 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:16] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:16,338 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:16] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:17,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:21,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:21] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:26,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:26] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:26,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:26] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:31,307 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:31] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:36,285 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:36] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:36,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:36] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:39,193 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:39] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:08:39,207 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:39] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:39,223 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:39] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 11:08:39,225 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:39] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:39,242 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:39] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 11:08:42,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:42] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:42,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:47,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:47] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:52,269 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:52] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:52,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:52] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:55,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:55,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:08:55,321 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:08:55,336 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:08:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:00,360 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:00] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:09:00,370 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:00,380 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:00] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 11:09:00,393 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:00,402 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:00] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 11:09:00,898 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:01,242 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:09:01,254 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:01] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:01,260 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:01] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 11:09:01,275 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:01] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:01,284 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:01] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 11:09:05,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:05] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:06,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:06] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:06,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:06] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:10,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:10] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:10,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:10] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:11,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:11] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:15,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:15] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:16,287 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:16] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:16,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:16] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:20,286 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:20] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:20,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:20] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:21,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:21] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:25,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:26,296 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:26] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:26,311 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:26] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:30,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:30] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:30,316 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:30] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:31,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:31] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:35,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:35] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:36,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:36] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:36,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:36] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:40,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:40] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:40,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:40] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:41,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:41] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:45,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:45] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:46,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:46] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:46,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:46] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:50,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:50] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:50,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:51,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:51] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:55,313 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:09:56,290 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:56] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:09:56,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:09:56] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:00,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:10:00,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:14,404 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 11:10:14,719 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 11:10:14,720 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 11:10:16,639 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 11:10:16,648 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 11:10:16,755 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 11:10:16,756 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 11:10:16,780 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 11:10:16,787 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-12 11:10:16,787 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-12 11:10:22,708 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET / HTTP/1.1" 200 - +2025-12-12 11:10:22,795 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-12 11:10:22,799 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-12 11:10:22,801 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-12 11:10:22,803 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/js/services/api.js HTTP/1.1" 304 - +2025-12-12 11:10:22,806 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/js/components/NotificationManager.js HTTP/1.1" 304 - +2025-12-12 11:10:22,810 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/js/components/AlertManager.js HTTP/1.1" 304 - +2025-12-12 11:10:22,814 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/js/app-new.js HTTP/1.1" 304 - +2025-12-12 11:10:22,816 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 11:10:22,831 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:22] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-12 11:10:23,625 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 11:10:23,626 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:10:23,632 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 11:10:23,639 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 11:10:23,654 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:10:23,657 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:23,659 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 11:10:23,665 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 11:10:23,665 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 11:10:23,667 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 11:10:23,675 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 11:10:23,745 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 11:10:23,767 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 11:10:23,776 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 11:10:23,789 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:23] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 11:10:26,751 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:26] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 11:10:26,752 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:26] "GET /api/agent/tools/stats HTTP/1.1" 200 - +2025-12-12 11:10:27,501 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:27] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 11:10:28,637 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:28] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:28,660 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:28] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 11:10:28,671 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:28] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 11:10:28,681 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 11:10:29,053 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:29] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 11:10:30,928 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:30] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 11:10:33,628 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:33] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:10:33,641 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:33] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:36,081 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:36] "GET /api/workorders/4 HTTP/1.1" 200 - +2025-12-12 11:10:37,804 - src.knowledge_base.knowledge_manager - WARNING - 知识库中没有活跃条目 +2025-12-12 11:10:38,639 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:38] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:40,980 - src.core.llm_client - INFO - API请求成功 +2025-12-12 11:10:40,989 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:40] "POST /api/workorders/4/ai-suggestion HTTP/1.1" 200 - +2025-12-12 11:10:43,624 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:43] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:10:43,639 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:43] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:49,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:49] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:54,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:54] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:10:54,308 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 11:10:54,313 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 11:10:54,345 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:10:54,348 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:10:54,350 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:54] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:54,365 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:10:59,289 - src.core.database - ERROR - 数据库操作失败: returned NULL without setting an exception +2025-12-12 11:10:59,290 - src.web.error_handlers - ERROR - 未处理错误 in get_health: returned NULL without setting an exception +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2358, in _handle_dbapi_exception + raise exc_info[1].with_traceback(exc_info[2]) + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +SystemError: returned NULL without setting an exception +2025-12-12 11:10:59,295 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:10:59] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:10:59,297 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: returned NULL without setting an exception - None +2025-12-12 11:11:04,297 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:04] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:11:04,306 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:04,309 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:04,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:04] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:04,318 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:11:11,602 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 11:11:11,965 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 11:11:11,966 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 11:11:13,992 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 11:11:14,002 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 11:11:14,115 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 11:11:14,115 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 11:11:14,138 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 11:11:14,144 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-12 11:11:14,145 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-12 11:11:14,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:14] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:11:14,307 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 11:11:14,312 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 11:11:14,329 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:14] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:14,339 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:14,341 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:14,354 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:11:19,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:19] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:19,304 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:19,306 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:19,313 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:11:24,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:24] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:11:24,306 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:24] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:24,307 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:24,309 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:24,316 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:11:29,292 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:29] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:29,301 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:29,302 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:29,308 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:11:34,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:34] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:11:34,311 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:34,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:34] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:34,312 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:34,318 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:11:39,301 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:39,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:39] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:39,303 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:39,311 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:11:44,299 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:44] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:11:44,313 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:44,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:44] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:44,315 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:44,322 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 11:11:55,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 11:11:55,313 - src.core.database - ERROR - 数据库操作失败: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:55,314 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 11:11:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 11:11:55,314 - src.web.error_handlers - ERROR - 未处理错误 in get_health: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlite3.OperationalError: no such column: work_orders.assigned_module + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "D:\code\assist\src\web\error_handlers.py", line 20, in wrapper + return func(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\blueprints\core.py", line 32, in get_health + open_wos = session.query(WorkOrder).filter(WorkOrder.status == 'open').count() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3112, in count + self._legacy_from_self(col).enable_eagerloads(False).scalar() + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2805, in scalar + ret = self.one() + ^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2778, in one + return self._iter().one() # type: ignore + ^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2827, in _iter + result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( + ^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2362, in execute + return self._execute_internal( + ^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 2247, in _execute_internal + result: Result[Any] = compile_state_cls.orm_execute_statement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement + result = conn.execute( + ^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute + return meth( + ^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection + return connection._execute_clauseelement( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement + ret = self._execute_context( + ^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context + return self._exec_single_context( + ^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context + self._handle_dbapi_exception( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception + raise sqlalchemy_exception.with_traceback(exc_info[2]) from e + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context + self.dialect.do_execute( + File "D:\Programs\Python\Python311\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute + cursor.execute(statement, parameters) +sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 11:11:55,321 - src.web.error_handlers - ERROR - 错误响应: 服务器内部错误: (sqlite3.OperationalError) no such column: work_orders.assigned_module +[SQL: SELECT count(*) AS count_1 +FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.assigned_module AS work_orders_assigned_module, work_orders.module_owner AS work_orders_module_owner, work_orders.dispatcher AS work_orders_dispatcher, work_orders.dispatch_time AS work_orders_dispatch_time, work_orders.region AS work_orders_region +FROM work_orders +WHERE work_orders.status = ?) AS anon_1] +[parameters: ('open',)] +(Background on this error at: https://sqlalche.me/e/20/e3q8) - None +2025-12-12 13:31:39,178 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 13:31:39,482 - src.core.database - INFO - 数据库初始化成功 +2025-12-12 13:31:39,483 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-12 13:31:41,339 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-12 13:31:41,350 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-12 13:31:41,453 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:5000 + * Running on http://10.105.212.207:5000 +2025-12-12 13:31:41,454 - werkzeug - INFO - Press CTRL+C to quit +2025-12-12 13:31:41,478 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:41,479 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-12 13:31:41,485 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-12 13:31:41,486 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-12 13:31:43,576 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET / HTTP/1.1" 200 - +2025-12-12 13:31:43,860 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-12 13:31:43,865 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/js/app-new.js HTTP/1.1" 304 - +2025-12-12 13:31:43,870 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - +2025-12-12 13:31:43,872 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-12 13:31:43,881 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-12 13:31:43,916 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-12 13:31:43,934 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/js/components/AlertManager.js HTTP/1.1" 304 - +2025-12-12 13:31:43,963 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/js/services/api.js HTTP/1.1" 304 - +2025-12-12 13:31:43,971 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:43] "GET /static/js/components/NotificationManager.js HTTP/1.1" 304 - +2025-12-12 13:31:44,397 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:31:44,400 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-12 13:31:44,401 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-12 13:31:44,405 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 13:31:44,415 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 13:31:44,422 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,426 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 13:31:44,429 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,437 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,440 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,443 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-12 13:31:44,445 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 13:31:44,446 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,447 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 13:31:44,451 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,453 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 13:31:44,457 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 13:31:44,458 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 13:31:44,459 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 13:31:44,460 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,475 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,483 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 13:31:44,496 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,500 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:31:44,502 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 10 个条目 +2025-12-12 13:31:44,507 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-12 13:31:44,527 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 13:31:44,529 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-12 13:31:44,530 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-12 13:31:44,530 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-12 13:31:44,533 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-12 13:31:44,538 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-12 13:31:44,539 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 13:31:44,541 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-12 13:31:44,543 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-12 13:31:44,545 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-12 13:31:44,546 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-12 13:31:44,547 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-12 13:31:44,549 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-12 13:31:44,550 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-12 13:31:44,552 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-12 13:31:44,560 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 13:31:44,560 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-12 13:31:44,561 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-12 13:31:44,562 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-12 13:31:44,565 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-12 13:31:44,567 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-12 13:31:44,568 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 13:31:44,569 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-12 13:31:44,571 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-12 13:31:44,575 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-12 13:31:44,578 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-12 13:31:44,579 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-12 13:31:44,581 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-12 13:31:44,583 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-12 13:31:44,584 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 13:31:44,593 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:44] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 13:31:46,065 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:46] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 13:31:48,331 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:48] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 13:31:49,420 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:31:49,434 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 13:31:49,441 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 13:31:49,452 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 13:31:49,506 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET / HTTP/1.1" 200 - +2025-12-12 13:31:49,755 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 13:31:49,831 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-12 13:31:49,832 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-12 13:31:49,834 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-12 13:31:49,836 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-12 13:31:49,837 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:49] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-12 13:31:50,073 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:50] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-12 13:31:50,149 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:50] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-12 13:31:50,149 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:50] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-12 13:31:50,788 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:50] "GET /api/rules HTTP/1.1" 200 - +2025-12-12 13:31:50,789 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:50] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:31:50,793 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:50] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-12 13:31:50,804 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:50] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-12 13:31:50,812 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:31:51,096 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 13:31:51,101 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /api/workorders HTTP/1.1" 200 - +2025-12-12 13:31:51,110 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /api/system/info HTTP/1.1" 200 - +2025-12-12 13:31:51,111 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-12 13:31:51,117 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-12 13:31:51,122 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-12 13:31:51,431 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-12 13:31:51,682 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /favicon.ico HTTP/1.1" 404 - +2025-12-12 13:31:51,765 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:51] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 13:31:52,084 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:52] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 13:31:52,346 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 13:31:52,530 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:52] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 13:31:54,394 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:54] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:31:54,413 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:54] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:31:54,831 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:54] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-12 13:31:55,410 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/token-monitor/stats HTTP/1.1" 200 - +2025-12-12 13:31:55,431 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/token-monitor/records HTTP/1.1" 200 - +2025-12-12 13:31:55,434 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/token-monitor/chart HTTP/1.1" 200 - +2025-12-12 13:31:55,791 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:31:55,850 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-12 13:31:55,857 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 13:31:55,958 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/ai-monitor/stats HTTP/1.1" 200 - +2025-12-12 13:31:55,967 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - +2025-12-12 13:31:55,971 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - +2025-12-12 13:31:55,975 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:55] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - +2025-12-12 13:31:56,174 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:56] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 13:31:57,938 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:57] "GET /api/token-monitor/stats HTTP/1.1" 200 - +2025-12-12 13:31:57,952 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:57] "GET /api/token-monitor/records HTTP/1.1" 200 - +2025-12-12 13:31:57,957 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:57] "GET /api/token-monitor/chart HTTP/1.1" 200 - +2025-12-12 13:31:59,408 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:59] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:31:59,479 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:31:59] "GET /api/settings HTTP/1.1" 200 - +2025-12-12 13:32:00,082 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/system-optimizer/status HTTP/1.1" 200 - +2025-12-12 13:32:00,090 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/analytics HTTP/1.1" 200 - +2025-12-12 13:32:00,141 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - +2025-12-12 13:32:00,143 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - +2025-12-12 13:32:00,144 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - +2025-12-12 13:32:00,150 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 13:32:00,194 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-12 13:32:00,789 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:32:00,811 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:05,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:05] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:32:05,324 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:05] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:10,303 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:10] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:15,293 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:15] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:32:15,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:15] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:20,304 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:20] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:25,300 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:25] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:32:25,312 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:25] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:30,310 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:30] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:35,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:35] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:32:35,315 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:35] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:40,298 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:40] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:45,291 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:45] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:32:45,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:45] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:50,302 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:32:55,294 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-12 13:32:55,308 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:32:55] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:33:00,301 - werkzeug - INFO - 127.0.0.1 - - [12/Dec/2025 13:33:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-12 13:34:25,979 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 13:34:47,469 - src.core.database - ERROR - 数据库初始化失败: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'jeason.online' ([WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)") +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 13:34:47,470 - __main__ - ERROR - 数据库连接失败,退出启动 +2025-12-12 13:35:02,972 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 13:35:24,389 - src.core.database - ERROR - 数据库初始化失败: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'jeason.online' ([WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)") +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 13:35:24,391 - __main__ - ERROR - 数据库连接失败,退出启动 +2025-12-12 13:37:51,892 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-12 13:38:13,315 - src.core.database - ERROR - 数据库初始化失败: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '43.134.68.207' ([WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)") +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-12 13:38:13,317 - __main__ - ERROR - 数据库连接失败,退出启动 diff --git a/logs/tsp_assistant.log b/logs/tsp_assistant.log new file mode 100644 index 0000000..4879734 --- /dev/null +++ b/logs/tsp_assistant.log @@ -0,0 +1,9 @@ +2025-12-12 13:30:49,040 - src.core.database - ERROR - 数据库操作失败: 'search_frequency' is an invalid keyword argument for KnowledgeEntry +2025-12-12 13:31:25,399 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - location +2025-12-12 13:31:25,404 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - status +2025-12-12 13:31:25,409 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - battery +2025-12-12 13:31:25,414 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - engine +2025-12-12 13:31:25,419 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - location +2025-12-12 13:31:25,424 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - status +2025-12-12 13:31:25,429 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - fault +2025-12-12 13:31:25,429 - src.vehicle.vehicle_data_manager - INFO - 示例车辆数据添加成功 diff --git a/src/__pycache__/__init__.cpython-310.pyc b/src/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd00c5c832556692bab8ff7870b8f16ee5dee891 GIT binary patch literal 180 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 W3RiLHT*AO66nyP|dkrl5#{U5jbMdqQ literal 0 HcmV?d00001 diff --git a/src/__pycache__/agent_assistant.cpython-311.pyc b/src/__pycache__/agent_assistant.cpython-311.pyc index 19251cc57d42b93ba186712c9d62939720f10abd..ca8aeff4425cd83c4548904a9516033cec61c0a4 100644 GIT binary patch delta 25 fcmZqK!q~Efk#9LKFBbz4EZk_CDQv%y?^`4QUl|9S delta 25 fcmZqK!q~Efk#9LKFBbz4R4JKe9(UNt_bn0tT*(KU diff --git a/src/__pycache__/main.cpython-310.pyc b/src/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9e1cc02eff43d24bc29dc31c267eddbca013c09 GIT binary patch literal 16326 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 B8+ZT! literal 0 HcmV?d00001 diff --git a/src/analytics/__pycache__/__init__.cpython-311.pyc b/src/analytics/__pycache__/__init__.cpython-311.pyc index cecf113cc6b3c591efa765ba63e5b9e9e01a6480..9816887165340974c8bbd380094d66bf9f4ef3bd 100644 GIT binary patch delta 21 bcmbQrIF*riIWI340}w3SXqw4Ck+%Z?G=>E# delta 21 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 WjY9&Nmg3U$4_$x%8Kcz8Hvb=&7EICr diff --git a/src/analytics/__pycache__/analytics_manager.cpython-310.pyc b/src/analytics/__pycache__/analytics_manager.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36cea15bf7e7bb17b4718d4a839884431ecffdb6 GIT binary patch literal 8776 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 I5IxKO7wp@pasU7T literal 0 HcmV?d00001 diff --git a/src/analytics/__pycache__/analytics_manager.cpython-311.pyc b/src/analytics/__pycache__/analytics_manager.cpython-311.pyc index bec5df9a633607060819a90c230faaf14cef5491..6edcd0fdc50abbe5940126f6b4916c700ac6befc 100644 GIT binary patch delta 25 fcmey?$M~&}k#9LKFBbz4EZS(AX<@XHFT))GY|;m< delta 25 fcmey?$M~&}k#9LKFBbz4R4JKerWtSK%Www(XH*9z diff --git a/src/analytics/__pycache__/monitor_service.cpython-310.pyc b/src/analytics/__pycache__/monitor_service.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f004cafd6347012bb2ed833e9b2e5fe96d7e9280 GIT binary patch literal 7863 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 delta 23 dcmeCk>d4|-&dbZi00dP^rkS^uH}d^50RT-(2IBw# diff --git a/src/analytics/__pycache__/token_monitor.cpython-310.pyc b/src/analytics/__pycache__/token_monitor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9399b03f30c6e4feb6f5051b05f8137c928a7f27 GIT binary patch literal 10891 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 literal 0 HcmV?d00001 diff --git a/src/analytics/__pycache__/token_monitor.cpython-311.pyc b/src/analytics/__pycache__/token_monitor.cpython-311.pyc index 5af707441a6e83478ce869ca59eb2e8c09bd24d5..3fad1276b4e2afce8880a2d5a9384ad2376a504b 100644 GIT binary patch delta 25 fcmeypjPds}M!w~|yj%=GuxO)cW{}H9zT98{a{&k> delta 25 fcmeypjPds}M!w~|yj%=GP^Dy=Y38<(FEg`kf<+rmGx>q^V-N=!FakLaKwQiMBvKfH88jLFRx%WUgb~CqW&NW3{1W}d y;^NHW68++$Wc}p)ytK@8{rLFIyv&mLc)fzkTO2mI`6;D2sdgaE#Y{kgg#iFh&>AEF literal 0 HcmV?d00001 diff --git a/src/config/__pycache__/__init__.cpython-311.pyc b/src/config/__pycache__/__init__.cpython-311.pyc index 20e2ade4ffef61820a387d86dda7dd2888d3c837..661e19461aaa3a92569975575eb4d267b4d134cc 100644 GIT binary patch delta 21 bcmbQlIEj&WIWI340}w3QXqw4Ck+&59G!q3P delta 21 bcmbQlIEj&WIWI340}xaxnPv)1*YUym&fK1Z zY_(6&K9%;NqEag)q)L6@B?YxorK0{L`&uO-{{m7`XYPO)LRXr(-JRLJ`Tb_*&L14? zmtg$zXvX;}DM|m}qI;;YxCp{O21O+*yON1d#g!Y1sWenmm8C_As#LozQSFvuYE-UB z*`7V{mr7YhXbX-V3RU;oHg0u~9#~ui;SWJE$&{&NDpWRAir1)S57o>B?J;|4!c5X$ zvyUdte%faqqW$IoJ!B5j0W(Dh%^{jH({#ujW+ODsGHjHM)szXTrqE$Ja$CD4n}-ir zGITVu964YaqlY8Q_yNliIv!aj=mbDKDiZU)S93O6LlFM%?~ivM-{1TC&hFn^yN@1s z-sRUP?P{XWwcHIg%3(vR0+Udsn$xen^p_RMt`8Qog zHyByBIP0XM%}r*9en9B@9@fp?+n}6uN|H8y{t3t41)&v6m&%>PuD`)wea#eXRrk)p z36Tg`*a|#bhQ*74a}8u3gpYvwQo4pBgFsQ-Q-N|NqWZ~qe{O&OqrOsz+0Lq>*J?WC zI%|t0hDut2EBcWzmv~l#fy0nqEX?V1I)PK z&RASBQ?L3RAOhPiB4Pk0NCcIsa!&yY)Ycem#T4w^eYkUHYx}PsVj?a!CBF(OCojEn6H*s z$-*4L^&9bxBEJ1Xjsec>1B9GB>m2I>_`2@_guQS$$_$o%cZtGW1<^oy0C6HhjCB*| zYJ2P3ox6WLuh@hb=4~Fb25I=70}bVP8zQqmCyp1gVAFC%A2bbd*(P&E5~nrCWn#ke zEVmsxHYcqnq=fDJ4_Ph?LK4;k#_PUIv+%0QTBT|%ljU-$0DKiniz2f>CxuegSiPzj zMPISJNQ%Z)qbQO%y;LX~VnQ$J#kFc-zCy07Ksg!v{?Jp#YL!%%R*lM1xw!Dg1oUG9 zV%pCm?N}FaGhjmi{ZBi?UG&GECHS@`Nz}W9h<*Yr(U!|#K0wHgmgQns!>X4M>f3|_ zgK%qrR|ohh4vwHYhUz#dF|w?GL6!;?0KWzRON&rEX$X3yT!Pl97M6|jm1^)2`e#vn zfa*h3*uTO1pu{2Dg}!gFug%ddZ$R9i@Ey@Kd(_& KC#AGJqWlMu^)YM! literal 0 HcmV?d00001 diff --git a/src/config/__pycache__/config.cpython-311.pyc b/src/config/__pycache__/config.cpython-311.pyc index dab0542b1929949ca01d92f428933ad79e8debc4..5571d7d6c3c255c8a0e1a6c8d233d11abd62696e 100644 GIT binary patch delta 41 vcmZn^Z4~8Q&dbZi00i2rtTP)n^6E12ni%UD8k^{uS?C!Vm~VDxvf=;$xr7MD delta 41 vcmZn^Z4~8Q&dbZi00fVxnr0r^$g9i5o0XbaoS&zcpO=%Fm%7=V$%+F2@X`!Q diff --git a/src/config/__pycache__/unified_config.cpython-310.pyc b/src/config/__pycache__/unified_config.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12514a0d3104768e5bf3b9748e997c1009939182 GIT binary patch literal 9506 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 literal 0 HcmV?d00001 diff --git a/src/config/__pycache__/unified_config.cpython-311.pyc b/src/config/__pycache__/unified_config.cpython-311.pyc index 0ce4eb2fc42ebb4b139a98a2d9e2bdaf1ca0b339..94c5a9216c501005ded06b4429664b35270a199a 100644 GIT binary patch delta 25 fcmdni!nm!4k#9LKFBbz4EZS(A>7~ArPs0fSUjPQ% delta 25 fcmdni!nm!4k#9LKFBbz4tX^Q6S){R%Ps0fSU$zGP diff --git a/src/config/config.py b/src/config/config.py index 56fbe78..379a650 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -10,8 +10,8 @@ class Config: ALIBABA_MODEL_NAME = "qwen-plus-latest" # 数据库配置 - DATABASE_URL = "mysql+pymysql://tsp_assistant:123456@jeason.online/tsp_assistant?charset=utf8mb4" - # DATABASE_URL = "sqlite:///local_test.db" # 本地测试数据库 + DATABASE_URL = "mysql+pymysql://tsp_assistant:123456@43.134.68.207/tsp_assistant?charset=utf8mb4" + # DATABASE_URL = "sqlite:///tsp_assistant.db" # 本地测试数据库 # 知识库配置 KNOWLEDGE_BASE_PATH = "data/knowledge_base" diff --git a/src/core/__pycache__/__init__.cpython-310.pyc b/src/core/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5697a9013e0084352f71d03485e8fd709d422649 GIT binary patch literal 126 zcmd1j<>g`kf<+rmGx>q^V-N=!FakLaKwQiMBvKfH88jLFRx%WUgb~CqMg5}u{1W}d w;^NHW68++$Wc}p)qE!9(_{_Y_lK6PNg34PQHo5sJr8%i~Ag#qrK!Sw<0203$RR910 literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/__init__.cpython-311.pyc b/src/core/__pycache__/__init__.cpython-311.pyc index 85f6415d4127c51bf7854bd01fd713d6cd1c8ec7..8d5f8304a270dc6d6acdb36b2eaddbce23a24d05 100644 GIT binary patch delta 21 bcmbQhIDwIOIWI340}w3QXqw4Ck+&HDGrysQ+74P@-^gMQVve{$qB=V?o)e2O~v8=A%xxKr+na6Uw zhh(>UG}J~6N(AL?fXrC20ILWfRDlHKoBx8={fe`@`Q%5dloEgE_RMBxg7#FOIeq%v z)90Rh&hOmY$mJXb*YDoGIpC9u@(Dc*UOFD`#2rQ;Oerf&Wm;7&tMXqfYxvizdQC6u zHKS~(^xmkNHLGmZQsq?5F56OOR?{`7>`30KW@_1TR`RK8u9h$7RpnlV*(`lpVd)L6 zJm!yWDCKdc9aTzB^9VleY+t;v{pO=v7du-|J=T5kHK%*wG`Ov2UfVqL-qwqkx*t9J z$*D&--+8V3*b`v>{^4)8-+VdI-g@Kl?k~=7Z+zrjh9PCXqzRjOksk#$U!;jLzZ!WZ zUD)4Sje(7Hu7SO4aqsVamGrXgI(GeOvpmU)>P!Aiv>b#pL49VGH(0YmOLuuM3}IEwWsC^1q)sx*#VAf+6WOS7+^@U-$<=_<;u@h} zU3^{P<9PY68)kW<5zTsG7=+Pm$Sbpz2KQ$@Osl`-hgR2w?Ycodh+G#Hql5;CrH-rX zlLON~)K?MqD$Jc|a3(Cc-{kd*h5`MHcrqZPPyiDtZ8cWgT1V-qZM{PgP@7r2=)U>b zR{PQJ(`UNxKT$G7YS{~ytHFY>!e#I9&9?~4uU8rj8NKYEWWkajMkS5YBJf>AXnqNq z04H)Z-0izYQ47hHg0?68we@QTeI3yg=_V@EMWuT~5hpKA z+|tuqz{J3^X`(14ihc*auV{OEJkwt?T3V#97_kO9ii??NbOvG!fHm9 zdgBDAC<=Y$M8x-i<2jIiuqXy1wd$=^8y*`CSboW``y2r0N|%bz4Jm;v-BPovrCOgB zto40^ksBT$OgZkVpxLk?gZ3RT>$yl-L84Nqn7V}Eoz+`ftQ|wb8VKErzP49Y==Vc~ zAzV^stQ{DXoj`HRASP+C6GVOhA3$iFozR5yC6nI(sj!$&SuUd?b|0ZC_Sw;3sqUe) z{3Dz(|QN6!4KPzXsu($MJqY{7ebW4x*wjLQBb;YCF&9%~?`IZBk zYGpvjTG?p4J%KM`J((4!&nYYwlP!b1jB~N!7U1Eo4ptHxwv?K&6{li5PRCB1iL-Hz zrC&<7@_6sWd6t=0c6`YnQ#6Gc2G)N=SCJdg$&!s@15#!jRc=(m-<*Iv$rx-6AS>l0 z@FhJyX(dg{{2$$OMczwGrGxe=HvzOKrpXi`Jz>uo;%=kA%e5;Jqf z`5_yF#!<-FD9ja`Ul|y@eevVV&tFW`x^KU-dFs`^8ddo1>#465d86vz-rPShX!F^( zHqTz{e(?0>xpz08dn*}HN^{bY{&7M𝔙Mz-EIi34_dtbP&28TG=DMaM12h#mog< zI8`r<+-hSfs1Lcn{qZy1bFcKgd*k`;&)%OaCIO%i^aC(B$?k=>x8MDJX;PT0Jg7&U zs#;{0{KyS`w7o`Mm=8C7zQ)t^BE1+?BcSNQnlKjw9!C5oi1{@{Bv=!yCDZykaW@h< zOynCxB%bL6W;f$eSd~Vt7DT171oGurYEB~6|F%JJ$*(6_wvVDNidjqywH_%-%jikg zrU)h+MNx9Ook+^Z{FP`X&sQQUpL^W`+rCk3nDEg4vHc4wgsJ2e%`JQYB(FK@lv+^t zYU3)w>)_8;CpAmARa?~zO&$JO|14xQbzC?Hoxd5S@xL0S_5Fj;a@7}QNd7k>-wj`q z*7f8rLg6+V77)dt)&@i|JE%9*p?0MXQE&T(>W!MT-lPr9X8TV_-uv&_{?&WkC!b4l z2hEytcOE^85{7@1$hU}4n($kR%z^Y96s;h?oyZ8#qB%t}hDa$lU<*(QEf5D#`=!rD z+tQ%wRkPpOHWe|xzulnO^E{rg@u0TeQIBHYa&FW`letNhADo^HFAfI$5OnzcL}rML zI6pDyyfm@|t&k$(Xa*XEp$@O(Rr>S%4zerDL>3IyN`(T@zvwtdx9l5#0keKzZ)I-< zo?BP1Ebu+W_ooR_ch;A9V6Be+j4l$JOlQVf6FtCgTd~$5WVhNt@E&Iqy2ti#j!-8@ zmfSU%C5c`1^7Pt*s85z9!N~PF8$* z&f~QED>)-zG_p7{i$%^qi4#FkUy`{i7g4DGXntf8jFCEZ*bXV3G{OjEho%-j)vPNx zVEx-kIU3MGJ@}7&A&=~_Pig;I-!q5<1NMf_PK2u|+%icHfT8rq$r~pp>`&E>*}_(X zkKrt3%7%?1zyc6zC!xH2=>@dS-eLOJFC>u_rpIbQUD)#P#=|!y8{Bs;ZCyIQqq;sJ z-`?q;^lGbB{}2$pNwfT1i{1DBn0#-pC`ZlqEu+%Dk3q=-^iC;1Ai+q%P4)u7{6()> z#Q~fg{5ce5%@q(;n`*B3IWZd=Qqq#bD^1baO*RWxIIdg6xe@Kc6&bRZKtx}H3$2xFnqsLJLi3`U)THVT|@h|`IJQynJ|avwNs^wD1>K1xKPhLKGB zC~;S&D!B=gQQ;F4(t*rYFg>kcOc@2^I%l6Vb!f^wn95E|t&{RA3%{xQm;e9( literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/auth_manager.cpython-311.pyc b/src/core/__pycache__/auth_manager.cpython-311.pyc index 1ab3b73bf0632b994cfd6679f258b486b1e3d067..a844a599c5e9212f4a6847fcf245a63cea22e914 100644 GIT binary patch delta 19 ZcmbQ>IKh!?IWI340}w3QxRI+(0RS_v1uOsn delta 19 ZcmbQ>IKh!?IWI340}vEW*~rzV001%g1l|Au diff --git a/src/core/__pycache__/backup_manager.cpython-310.pyc b/src/core/__pycache__/backup_manager.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f3e6485d094b59d20217f9148232b8b63187df7 GIT binary patch literal 7580 zcma)BYjYdddEPy{SS*%{3qguENj8(Fwqa*Pr>S#M8Q&r)X)QC29ngc&VyYw5lV;5&3L*b~Rm0%W~4o zRI|k_$|g^Fx$0UeRyx~I6OI#HacP8KJtQ^hIS&+?|LGsPKIakcJV zci*O3-2W|wk8t~p!tD)Kyv4m`Ln+?M*)gS%ZrqCvSlchZy?ySjt@nPk_4;#{etq%s zTbq|(`pd1KzF}>jf9cY{y!vqS*msX^oqZd!61bONITLl;`m4XWvT@ORA2TQm1vNBz zDR6^I)h%eDeyCCoLhXTCGt`e({Gh4D=oX?eHF78%us)@|# z?ffM1a6i8O+Yqh-RV$=ssCX~eTz!dgohQyDiV1G;j9#>Pmgmr#=A*8T9+@Sb=lK{~vV31$HyEY!J$wT1$?fPp$*0hJ zbZGWzK7-mkABUp%hv^4PUawYQX`%7-kmbXa@(h zRti?i48waLD%1Cy`1-d%wAHraz%3wgN|3CrbhS+d=BXT0-c%O~x|l$}Fdfetn?ycZ z;<3mej@HX1FWlo)YL%c;@+vLY=`RB2r2DS7B&T^(5&JOPhqup(dOetn);;Ho@?5zt z+_`vAtk(l;&Cqn@q>e*};F}PJN`JQ6nuwMVpVEO|$1+)A??Zc~@F4g53<|Bg0yuYD zSyf+EE-=ox##sf)iqo?kzloaT3QrwV zbS1Ew_p3?=HLVnSjc~Kw@AC}$bkx)8N%f>su%tq_&R*F1+ZVQe_~Xby`}%EJ{<;U( zJvcWvcO)DwuejwCj$f*}POt)}sS(u6^=h>O_o4EV z*YHeD_LK9*$*!*X~spJKml{mzhi+{iX}*$M##*$Rad ze-+|s_(NCOgic#`wo+~Nd+>_3+EvLrjw`ik=$tk0fX*3oo<@uGn?Ua-U}22xi|hls zXB~E$k?xPvctd&@LVB+Zo6s7x?<+69vvq#hATIs$D_4GTp+ToGq`K`Nox61LwSh{K z^7um|G6DfGgc?NM^T@5l?RXS-QeC3#)qO<%=&X}*P#1Sm2lCFrv4{C(H|V)?-0v&s z;gdSpQ>La%SInrU8lU?$_VI+#n%#Z&*H5zR;K^b8L5a*LI(CFYwedMTUVimg+b{n7 z6AlOFO@@abI>q5VOke+chgSq#=MZ}P^k$Q_ZvV6;$74c6xIshIcI|)`O;#_%%o_H? z)j%Ob>9S4iW>u>w%P@o25-_DFu{&LwfEFYOiUI>N5hNjvz=TW&DM&N0AX5PVXgS$o zZFWd`{KyYjN9*XV8O&j~^|rRjI*E3ot#WHxX>0RJknU#qNLzaq{GpwIOkYSuL2CUj zm}|DV4s$hNuKVI%nIP9THYiZ(oh0VTPAlEfc9OBwCK5hXvk>fha)G!VVpXV7$2l)2aEB;(Gxuy1DX_w3WnKFL`=q!anC3bmBGsZ z<1v?+7|iGReKz9@@~ICf_Cy=FviZjBhwR|2teV}vuzBUJx3@07{6PvmW_$iFzKW-X z{`!4@Zetu(@xCQH+d-*}-n)%D}zFkhGy1DWN$q|c-Tk8wOtXMKgh9qtW}3{< zBZ3l1{r_x>fvni-J~g9`<2ymW#`I6$#okVZ?dkkOdA>DYS`4HR~{lIrpU7I5u_1qMgr**W`n&dl) z#vUwh``u?Rzxmz}g0<{JhmRh9^ziJFN51p$Y{ZMC;r8j!);s?Yja-ljc*9wGW?V>% zyYVK;Kg91+iTo-wo+x<@cxTc*<(3ErLS#E0!&A1 ztwtbo{`(!ht#_g2P02w32@+z?-_tSL30S~w6xuhG4jAbw_$+G1I;kMpPPS94<^~hL z7o^%Il>@6+NBUpCwQY1q+9ugb8_f8t(Dpilan~lB*=Z@YQCP`C!&Wk|qc$vNXMaFJ zWLfU+F;okfN;l8IvarpT9b~#$SQgk6PqZz9DO!!RFYB}=?aSC1_GaT*Wq6ws3lN3x)mIFGD~LfL?H6-FX%@?EMW^@>Mmf^@YBy5CZe}uBlsPyd<)~A#n&gx*NG;xjB077YA{=~5q#KF7EIG(xBRdDkv_@( zi)8+NeKPYA+9Kk-cgRHJC?tl*Ti7AiXVXaP}t%4PU92lFbzc)y7 zWLv8e)Hl>;kbOzolaRE>khCXBvCSkY@jakB@l1T8KYv7bFejfJ zqC0X%nrkq3VM<2BOTT_G4yaH6Z0q%Nea0g%fgVK+Bh(ka4-sYoi~&+?9+|W+*+XLz zP4Nsr#%$Nuy&Wf+m*sqf~Na7Dj%#-*A3A&5gg-2uqgh}LA{w%~Y zi0|Vz2&+o?b5=RQ1b*9WiTyQO$8H7)i{zCZxI1J)Eo9a5n`-1AG83V!C$#20U_P>% zwR_kasmDWAG?KIw?vn1-(81xU!dvr13--|+T2C;(Cl2~oaLnE#w?nj+?fCNQ{ zh*|C6OmWYfai*xbk3tiYGYLvA#9MCSGyeZ@K zb{XN&5ONVI5r0VHPKcNq$DYmWSvAHxzYJ~;G@xv>Jx-%*P$iueqyvVB{HUfmR|=-5?UfP>(xoLyp51?2rc)c zE`39^d}KHB?POgyMN4n@m>4ZH%@_J;neFC26I#Y5`-x~-BehGk9F2I@_o?CsB*@7{ z5h64|q+M{T$EoJeNH`=29mSuMD3MqsA-UFPK}Csvg438X2^S)?BczNlP%KmZjab+k z8vYGmpTgGw05c5Cd>8`%8{jv?{)1$GTc6nhf%|q_U(ZFN*tsk05d`*$+1Frr05*l_ zcb6be*_8ifsDKVr?vE^2pH{>xvR#kbQI`NPCAx;JrK?4Z0+9nTN1HLPwEhHUoZ3{* zAL-ED0No0h5*||$9<6}jafINJ+d&pG9poaYl%V)|gkZgsXl2_BnLTa;x_P(&3?H*+ zaBHB?1FF`)4WJrpt`f}8D~4_9CB|EzLP`d7-jck&7Z;?lOS)|0QUm` zTA6YXZIeLBI?2096+m8&dOTprpHSCiSCA4S?HXv9eppAKf?6#6yjUhDcL>G}}->f0*hBl)^N{ z#lhWz33@3XBOJJ!`q?BtF*_F0&txDT@|Gyq6?f1Sb0mo6MQAw`yk*=TAZV6&Zp`E8 z=JkIt&Zjr%AcYjODSI`|JTh54f2=d(w=7|SG+v*}Qe?O3w(n#1k^O-_p8rpMJaaA1 zV6W-ga1J~4X57(HHYkXB6vpU!pYkxr2`z_I+3=`rJI;EeIb31f^r4RzYS@oLKlIC^(3}ATc1skT>>U4wH1dU8yZc#$W`^HF_8Z!){{*xc?R z?9^<;+CY*jARve!3+y5hq7uNegpy!>TICP*r`3PW&L)mX z``PDw=W$PCXvj10d;YcSEC0CMF#bf1{-1@$O-SJ^GGP=A!33|eB2y(Va#fl|6Qxs-|n{V!GxPJ=NybOfeH==CZ-iJS*mIHH0mkgNATscySo5 zlyK2<(aHzIGe&Wh7#3bIGR8$lWDnZK)xGwR$f3PP@SR2>-@Fr7^cGJ(w(#damHodo8aE+@FChyI5Yiwbf`A)@8CZe6-oS@i!p4U=!V#&1 zMiB%FY>~#Oi&0B>B6H9xrm=$hvwTI$qgB5wP3M+=xI2R*g zHCj2bMqGm3hs9cPDat%XR|R(9j&XH|bz(hcjVR*2C(dp!mG=f;EY(YU0@)nK<(E-< zG)_w*tKXE>GRJuLM|Dcuk;0E4s~By=HzGF2=cxwhAh!fZZVT#h+SHR0CURF8V6HWK zb}Oy?L&`92DWv0UEvPl*lwYPxf!up#P!g5;p4h(Q_C|Rk_SAr1rFupLW2I&_@}sC4 z57$cf`pM$3(hB0NzI3@-3F?s~?!?1MSEF7J%26P|S}P2yV`}ucA=hBi+gEOpjYhPk z6oz2_mQa?rlp8YGqR*{qGHsp&SbV=yuSCAT8mqz_GKYE0p}$GB)+O8f2)nsEyUZ}N z`!i7?F;x`&87ggK+>m!5XW_2adzA?CY1U@rpxC$}O#H2fh(*6 zgfq{WahE}ywT#G}`Y6LVGccAGDH{8Fcg&mm3NxlTGg_151&nUq=bL!d7!^i%1^01b!Zu5wwZyr5MSOLk` zhG1S0`DM)ppG2zBjN)9ejF-48K8 z{njar_3MKsai;HL3opEO<`>6q*wnlP{VT30WE2$S2qwg~B-F?5m~7Mt`*IcaT9brE zr`p&9afz);eXJ2@ZmUf;WOTEX4H?@a*xlR{r*FQu94K{CFeP0?ZlL8XP$<(G-6LM- z2lcQi17982r3%#0dodbPmgSteY>h%!o@H5{<=6{{H=j11!7PF#0dLwoVAgG25|FT~d-Qso0;MpXzQ>SdD%)(mF>SRi zVXikKZ_b-HCMRBnTKCrIQm3_&-+gHAx;f+5jPrp!M&3e8H9c*itT$! z)n=gJtyk(@x|0i8Nphv(X6^}KhsMK3J+`Zjk_hGdXzVg%acX}_)`3Pz%136X%TiX# z4hV?_TjTD7G*#3pognS77#&q1Y!z72%FeQk3R zDs3ECf+=AzCFZ4s2!qUu!lWrbqcBM*1j-_N+-dU&hrQP0XKjVa^qdF7 zV-H}`nzj$vz@#b@OlFQ=L8r`R>9lAFH_6QqLWd`8xfA_)bqn6M^zDQ_OUgOdW?KnS z))G1iF~HpTikNe!9!zdF9Hr-031_97i4+uX?`{QGWA4PS7vDP3!(4&Isl*WO>cgL! z)P>Y2bdW;8m7q2d0HX@?2Q2o3aA3tPg%L@;iU6As^a{>$&~Bmq=-vvx z%OH!xgXjww3~xZjxd*tqCc$Xtcge0F_s@Tq@^ap|zS*ijYrT3D%Nr&5@#nB7|)nP=v6gN)aX&6?@o6HztbE zfg-#SJ@Az-P;2G|Y7ISr*lo)ohF&OSJ~fftV;J{H38?G~?;-4d+YYss#pf*?o;&;0 z3mRfen9{vHOlbq1;7~2-4&734wf1u0Dg!Sop+mz!u{^PlN>7oBTE=7fDfBgv!p+Dy zcVG_51a^5#>c~6iSo~e6AuIomWA*WM^?(}E*BNlZ$SLWu_9Pmu&nebk*-B~FlC&ol zj!!`|Ov8fo7|WIslpSD-u_zO5Vjmq=Itvz2?=)biH2Xe%5%%4koJQ<(!M+tvOW2p3 z2lkQc(s|?l#pA!~9J#MEdt^Bi^;nlvqy0=A9D+BlnV1@@Hp9JQ_eHrF+a%{w%P-gR zyAmHijjPQdg(S_IkGVcRW*PWr=HGS9KK_ji@K2pHz&?`9ZVEq+MxIBZNX2~X)!z7N{Jz_jKfPqtvjeDk%EP!6{d*7rDzv*o6gc%CR9 zxX&l_wpQ`@C^u@8+n&PwkO1o7eUWASyu(`84G?9ymfgG+ucJ~m+=fbb7cu}!lPfR5 zrsKoJFO9Q_cJ|>QhU$L$CgcQ2a#7{=$eut_uN)Uj)@6?J1FZ9{%l_wG2FOREM$RVj zE4&ujVd&1#7HlWpj8rEBulUA=c@Thq2!y46(u6dtU@OyzaFbw_>L104J#BrvPOT1E_9lKkrrP^*$+V zLfS58w5}Qa-hKntPk6l$`xC!GX+?LlR;kApk-4D7B=)rFBhqW4@93T`KY`jDl73op zi@_nIC&0O^)!K0JOAL^KsNGX;KSqO8+R-&|YsjJDBo7feFMQ6LC+XmDU|83Isk^W& z8~RmK1uhw8+w$`*kKTym_M9`1SLrNVd#K3uusNxzTcNZpsK_BGoxGpLT(*cvXKu!B>%i!7hb*az~WEgBPIkrb(4(rdcFJ@>XiA2cRQ%(=J*Y zevG=87Hf|?&h*D2x(zxfPA*KZ#ueR}G#q6=j7m}XQ|zn^9?4stZ9HdL4&xdG=W-U* zCmT6O{y0x@c79zF%vIW|it$-{03PRg;mF z?~6v+_a%v`R3EsOY9FACgg`wLVzW}m!(?}(QI(&hPBPMxG`!Ll3cZqarM!bOB~(k9 z(kdNCQ7Y^-V}2X|#bz8yx%q55>Sn zWQ;+-5*_~n?jP2L&hP7xFdqQ2VF8!pn^GC?oOwY$mt*Ms`|{OzQa&I2obUu z*uzi&YL^r!L^YS*ZEXvevqs-$H#A8GH6s=tee3iaFC%C}!l%0^>XY=sN7;q`*xFkP z_iC^z3e!tgJ(A@nswspL(~jG*Rg!zc*qOlN8D&~C7Q&hESRf7)BB)5A5-N`)MmW~2 zmzNud)P7l-oDAgev8y8VCZ5F;BM(W;!+{xL7H?g(oMAA_Ro`E-6UiQm^<6;hp$qS& zOv%d_)d&zIyn6lb&{C+tvpnCr02O-DDD2rcF%hmfQAmE3vO6iei!u@{`8CRva960N z&Rfb93X2%{4N^!8w2)>kNxf=!EeT|8yFaQE0JkG4za>(}W=4BM-#{;Z6;gZCb zzN6KrW;9p!H3K=-p^XUQ9+y=V0|t)zdvGVYTXOrz)g!PgmtpbE$2!l>E)(q)cTyh1 z1%i|8b)n!8S(M;>3ze?mpoFLh9&xg+5FoQpfb3}=A#zLMv!3`|PU12s9+-om1_?(` zG|bVMZI*OUA*K1LIP0ThIrJ6azfCi_RDfEdvSKUY>#s=4xwx8na4it!;Q$nCU8{+& z;lG4c5g-m;iW+jMYXH8-YwpR=@Na1D|=ZLRQ0 z`)i@d_HXd#?%r8$Wo3gVjUy{uqA^cF3+)AGQHz~uiekCirV)s=y&`oeNgv7-%}Pu(#!5x?C#9*-1Xl5NFyUQQaIVFTC=&@_P?1V$3uE$XN#RS*-?uK zoMj{4s6SR2BO1>wuH);MNM*xrjpbPWsK)X~Xl0y_AJHneF>_KY7gk_zTA9kcE4UMJ zo7ZNlH7<>aACBO4F63cY4Qjq~kPDffjHNP>*~!R>s_xT4;DJ1^<8deC>Zcs{0JjreIpQkuxjGk(6&kCWPXx8;>Wqt<>;IS_?0_e{ z1P#|JglQGZNJVFq=|{DS!3>sy?-Vzg$T*uafROBVLfsHQ^b{ijs85`LqwfY#_tmNC- z9iX+2-O28P{j6tcF!tTD_@om#Q(%UtVnfx(;2fPdFLf3!w7-1)+J&WSul>IL&ZjO~ ztoy+}n&k<2!i~@{t)O?7cmu+d!>TGO5hc{-Fe%5+6 zqu#7rAViC@iz5s`L$v)GD^6;L7Ude8X!8KtW(G#{Y(tB_r=6jw^E=R)r_a+lGN+Zt z>*${L%V*l39B-dE)${A}SAXoB{79z!M);g3^}6t+!QBJF3i8LwdT91mO9kjY3SF75 zN7Ik^Q$N_XauECTFm+>Pw0>hqu;$sB-~^`!iq zr~;(BgJZsP*mgWGnB&Zzb=-qI68FOL;yc*f2TeIGHp7?9%mS?K5Mo8g=AiP)R?^%7-4==yge&uW( zPj>5I`@_$cKmTa^mU2OW2Q;~EhDSYs*l-4*A%XA{C2TO_g@FwMK%fJq<@3lvkjQL8 zqF`icdch1(p){(s=|E<79(MUG9#E#Z5P^WBpyOqRO(nk~30E+Tn{iwop@N-oA2gI& zB&Sn~fTOE_w6Cw;8vn`umyRb|YSg%4{f~~Io%9IvWQ572huCbI ztE`-d(xT>gD5|Q^$HF zUcU|0djZ#Zec|dqPIseiqP_(N+b{ij<*oBQm3XbrTYqgI`*P)tcOWJ$6=l+l;VvGA zInok==S=~6#X}&9NAO+B^@5Pg^qeDVfXlKG$5uK?-eNl{jVL8sMc+`M$q|hDMEfaF z4!;i#eZkTV#qI@SktASl(3{jOkOH|2!{;XbCI|gHRKI!qa47YyIuJOR1`s-!2Cg55 zrnw~!oL5KZAq^~&2$K2{l8`Vpz+p$g-9X6tr1qc|Zkhw?#lL4%VBuSEsowZe5?UA* zDQ2vOR1y|I)GVdKqD$Fk9SNoL!3&+UAN3p&^L6L#i|yAw?wtRiefjd&*5uATJD=FQ z<-v))^*eD!H)kihYJskIcbzlExJ+)AT-xQ8q@?PLzR>P zyvg+<(iaWZ^M|r_s<92M4SoO+>We0TkPLv(m?zH@Wo^|{3DT_NJ!9qALg&<_#Bg0Z z)^CTAo>d1_6nzhwyeZn+!>Sm!Ut zmoL8A3#K^I#FL=#E$CJH-7wlEcH*XYV}s!uHy8%881XQ|bd8rTK;%3Q{{))m-NU;c z(iBJX3rTz?_5HBMw+S039%lMF-M6;9le)ESRP_|zS?Fv7030@VYbZ1KQmpgxzfN}m^2SUhL{P5k5$6ZaIp$w zwwiMccYtwF&~N3GVP%<~bt2%n+CU`r`zHJ)EY&RGO~0i`B%+Ht-uG7tBcX7k@j#El zDNr~aqHrDW1*pqZPmzidn`QBDP(*b;U20!>wR8EUm3Kaj?Ndkm#NGB6e~L%8Z>eK! z_p5cCKT$Tt2#iUSagW2PRFWMckA%7Rf!>-7vawn_1eF%UdRmzkZrjR2Ct!y1EHe0b zFNrqqAC8`HTVNpkZ{d}=ll9nAW%dO8mWho5WheXLrqk$S;emEA%H~@8bnrzrIn?@ zb(mTy`tW8_C>64WT)`-$tSqEcBWEey@VfF3SK=^SjkC%tpP={=dzv4m# zy|+h|7~)s3U>vA;KADA*BKhaaT1Jr8qp?FC!vG4gEGlUwsNwMsN(?9sawJO&RQqi< F_kZ8!YApZ& literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/database.cpython-311.pyc b/src/core/__pycache__/database.cpython-311.pyc index 465f911db29586670360f2576682476aa6dcf346..654f651ca3b82b684ce30681ede64cb2253eb9f2 100644 GIT binary patch delta 1765 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 lO zP@0J$l{Hmh86yM3Y9NMyC>gLQZwkj6&SgwM86bwr$WAsE&SR9De1Ttc@@e6jfwu&T zQxl7lGvd>VQVUB{^O7rX@#Z8Jm&7L~C#Mz{r>5NEFG|fxElbQxPK_^4&M!(W@&y`I z~`-37}{( zNEAfmO%{>9#aO)gy>tT;S1m{sMAU4qlw)UPtliuwpU%Y90TKog-IG5l-ev5V+$b-( z`K3|^Gvmz7MQW2-7>`V5)BY&67^G}Ih*$t37J`UHAY#d6K^+su6Pw+1<}(_u28pZz z5ovhPO4qe=1oS7j9LPWDjygyi3uSeL84y}QYxFZjU^cY@Bo4= diff --git a/src/core/__pycache__/query_optimizer.cpython-310.pyc b/src/core/__pycache__/query_optimizer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db686e2255495ee043e3cbbc2b94ff0e8aa762ba GIT binary patch literal 13408 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 delta 25 fcmeCa%-DUIk#9LKFBbz4>|JS^Dd4@4uQn3^W$g!? diff --git a/src/core/__pycache__/redis_manager.cpython-310.pyc b/src/core/__pycache__/redis_manager.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f5f8993ce008f6c46fee5e6faaf25431d29f3cd GIT binary patch literal 2795 zcmai0{cjXS7@nEi-P_yVT@P$QK1}$C=!stC(~lTqG*+V(Bak3x;^w#+%GK>|o!v|A zr4USuMX;2ZAW?$c88Bd?hNzLm0)K|d{%WtZA%^gq5CPwJ_JF&C#NF(>^YPB?%=13a zJL{!V7J=)#^P5V4b`bIxR+_IER9=C{e+vvJdBQ1Y4$V{bW_bqhm=hb+@*0i$^t>); z)e!L-&6{r!u5o>waD9yB6CyE2@)l>?NY*HS025kQ{x~&rVgFXaOa9#DZ)cC3x$;x( z%F)m2U!S$+KfPQ(Fj+tS&CG=#X3y5@Cy&ohKy@~M8`mK3E9oK$rIyRJ_T)Qs9C%NYMngEQ{b7IAR5Upfc>V!q+0Sj z1-H;IWO)sI@?qP)Hhr*pGuNg+-%_Nw$i{_b6CPZO40}z)oksF{yr&iPZEvo`H zMyjzz1LhTh<*z%lvC-m9A!V zbB%R8fETfqC~M*9 zYM;@GueVk)ps$ZhxrtA*h{=J|J&|vbM+bgHRjtWDuG|0Nk)A`8_u~C=Cj)9E52f zMvLHX9pKk|;p~=4_ zP?l~B#<)?)A`!+jP(X}*4=kN3L@e_ADk}pv0H_WCrUQWJfT5Tfhmwg|WfDqu0&0n> zRRiv+xR9Wun&hz>aB>H6vlC6JOR3Rp%~V1RZbB z#$`A7NrYN11`}quD0*DjQusrj>kB_z)QDXp^mk(@mne5YT#nd4heoK&3!u5_i?auh z)(@R3KhoM-KYf1g*E27!0PS{493fFop{|G+>S}!3$|Pz{eN<-9R~tfF8jjZwxhvF4 z?rtwky#7g1sMH$jTtE&?q|2yblF`6p)OKtOb%WAXz6S1|Az_cS)v*rR`<=7#?U`m5^Fl zU4>=#x5INkA8QKE_TDl^v8g3;xfhv%Pt}Jgsu5EA&bS9;O9tlBr&$XDVN)JXJyM(khDp zbe95fv5{;;o#{ZU>Y(9!>QulnrAWxJ_--f?^DUgUU=6oZW#2|k>6P8pE5Z$7YN>-V z`V}*+i%1mCU;EAZlv!pbJahU$66xNK2vrfrfjz`C?NS-wmsh%7NWs?Aayi&mda&lFs5<^nw4mfc%in-^BlPr>(5|4)i|z; z!f{~2`+P$kNjyX(swxeSj~_A#$Qa0$WTx4bNiWSLRX?13>!3G`WBPzRq81ez!3ZXm z`wIyZpx!=}VPp>cBlhD5!jx?ODQH@VT2geHy%gc`GX5a>n6!ZMI;;hM7+9KF@BIe~ CI^rz= literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/redis_manager.cpython-311.pyc b/src/core/__pycache__/redis_manager.cpython-311.pyc index d0ee16884d66a46987d7f8062b3b5965f18d0225..fda44f7113b086646dd243bf6f707e9169db3782 100644 GIT binary patch delta 23 dcmZorYf$4`&dbZi00fIRnr2?--pKb!2mnTx2D|_O delta 23 dcmZorYf$4`&dbZi00dP^rkQ3u8~Hv70RTKd1!VvL diff --git a/src/core/__pycache__/system_optimizer.cpython-310.pyc b/src/core/__pycache__/system_optimizer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6926b2332edb36580c0f163f2e36edf2c110bee GIT binary patch literal 12508 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 literal 0 HcmV?d00001 diff --git a/src/core/__pycache__/system_optimizer.cpython-311.pyc b/src/core/__pycache__/system_optimizer.cpython-311.pyc index d4c67f6ddff1a8ce867cf87afd23793f4f2030ba..d3cd263d8b9e33327d10dc591d8ecad66cd1cbcf 100644 GIT binary patch delta 25 fcmX@RkMZn2M!w~|yj%=GuxO)criS-MKKpn8ZJr0S delta 25 fcmX@RkMZn2M!w~|yj%=GP^Dy=DdfA6&psXiW{n2u diff --git a/src/core/models.py b/src/core/models.py index a6f2342..b4f782a 100644 --- a/src/core/models.py +++ b/src/core/models.py @@ -86,6 +86,9 @@ class KnowledgeEntry(Base): verified_by = Column(String(100)) # 验证人 verified_at = Column(DateTime) # 验证时间 vector_embedding = Column(Text) # 向量嵌入的JSON字符串 + search_frequency = Column(Integer, default=0) # 搜索频率 + last_accessed = Column(DateTime) # 最后访问时间 + relevance_score = Column(Float, default=0.0) # 相关性评分 class VehicleData(Base): """车辆实时数据模型""" diff --git a/src/dialogue/__pycache__/__init__.cpython-310.pyc b/src/dialogue/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa2f7b5ca0402db7141dfd90dc863ce3dc1ff40e GIT binary patch literal 130 zcmd1j<>g`kf<+rmGx>q^V-N=!FakLaKwQiMBvKfH88jLFRx%WUgb~CqRsEv;{1W}d z;^NHW68++$Wc`%P#GL%}(p3HU_{_Y_lK6PNg34PQHo5sJr8%i~AnnCWK!Sw<0FP4| A`Tzg` literal 0 HcmV?d00001 diff --git a/src/dialogue/__pycache__/__init__.cpython-311.pyc b/src/dialogue/__pycache__/__init__.cpython-311.pyc index 77ea6417c0f8983b76db540fbe0afe12b60e9a18..6dfa14e80cc761bb4fd2003bf295d6caef9db248 100644 GIT binary patch delta 21 bcmbQjIE9gSIWI340}w3QXqw4Ck+&THG-U-S delta 21 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 CQ-t&Y literal 0 HcmV?d00001 diff --git a/src/dialogue/__pycache__/dialogue_manager.cpython-311.pyc b/src/dialogue/__pycache__/dialogue_manager.cpython-311.pyc index 1be43a3838cf67fd300201afe9cee3d2bab12c83..93b6a1e0f0c1bffa8e3ec3ca28a08eec3e028556 100644 GIT binary patch delta 25 fcmdnImvQr6M!w~|yj%=GuxO)cX1&iwzNK*hYlR3p delta 25 fcmdnImvQr6M!w~|yj%=GP^Dy=>Fc+VZ)qF=W6TFr diff --git a/src/dialogue/__pycache__/realtime_chat.cpython-310.pyc b/src/dialogue/__pycache__/realtime_chat.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9328bf84e55901f287a16432e0018a6467f4d46 GIT binary patch literal 14196 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 a3?&?(^N!O@e>k<|(+5<*O>IJLH~$x*hUC)# literal 0 HcmV?d00001 diff --git a/src/dialogue/__pycache__/realtime_chat.cpython-311.pyc b/src/dialogue/__pycache__/realtime_chat.cpython-311.pyc index 564fc609fec8a15d6ae4da366457d0e46a5b9cb2..05af031e9f94e8fef6a4a8260459960d1f8a113e 100644 GIT binary patch delta 32 ncmdmTfpND2uTjB@+wEzoD delta 32 ncmdmTfpNg`kf<+rmGgE-{V-N=!FakLaKwQiLBvKfn7*ZI688n$nU4dM#m$TcRbxe4+ zV&T)d)4855X?Z@O?a7Y5r%R^2Y+mtv^X})n=Rcp-0#WpSPtVh3O)nSEd$M!cGZwIWI340}w3QXquTak@qD4MQaA5 delta 21 bcmeyy_>GZwIWI340}xaxnPz5A_B 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 literal 0 HcmV?d00001 diff --git a/src/integrations/__pycache__/ai_suggestion_service.cpython-311.pyc b/src/integrations/__pycache__/ai_suggestion_service.cpython-311.pyc index 47e4b270f2471bb6d7f80ad305713298746f241d..8cef75974d8748567e9e181e007f8b40b2952a25 100644 GIT binary patch delta 25 fcmbPnlySyUM!w~|yj%=GuxO)crbyC8zOEzyWwHmT delta 25 fcmbPnlySyUM!w~|yj%=GaA2`%W?9NczOEzyXtoF( diff --git a/src/integrations/__pycache__/config_manager.cpython-310.pyc b/src/integrations/__pycache__/config_manager.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ddd7af4a132195ab578e2723aeee4ef4ef891b43 GIT binary patch literal 7167 zcmb7J>ysQ+74P@-^v=#cNH!!{AV5SWA`z8BF+M0TzE?CsbOhUBZtpUid91g45_W4A z6E`tL6M_~5)Ce;YtfWeUAS#fAeDM$Pi(l?ncV@F6EUfYaRTzxFbMMUT^z7neCw=-p z&b{4z&hI?#No8=*)A0AJmv1k8`g%?KD|LGROmsejE94+d%W6z#Mp4h|@@`}ec{j7B zyjxidce7}hoUBtyWD_Mf>*}<|Dke+GY*M!EqE{No4(M87)l

L(ir^r!j{m4r(m1 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 literal 0 HcmV?d00001 diff --git a/src/integrations/__pycache__/config_manager.cpython-311.pyc b/src/integrations/__pycache__/config_manager.cpython-311.pyc index 6f2b9e208d5e380b3236de349ce553453f24b8e8..c9f6f1889da17dff88b16b2ddd9d3611f3f12d2c 100644 GIT binary patch delta 23 dcmdm6xVMmRIWI340}w3QXqsuSxRGzY1pry!2Q2^q delta 23 dcmdm6xVMmRIWI340}xaxnPw^}ZRA^T0RU2;23i0B diff --git a/src/integrations/__pycache__/feishu_client.cpython-310.pyc b/src/integrations/__pycache__/feishu_client.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbd006eb444ba6d2591ba54ab59d4f688b010f1c GIT binary patch literal 8758 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 delta 23 dcmdm8w7ZCJIWI340}xaxnP$pqZ{*Xp1OQQk1>67t diff --git a/src/integrations/__pycache__/feishu_permission_checker.cpython-310.pyc b/src/integrations/__pycache__/feishu_permission_checker.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b3a1032d108ea801f3d95fda690cc9262f7902e GIT binary patch literal 7002 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 literal 0 HcmV?d00001 diff --git a/src/integrations/__pycache__/feishu_permission_checker.cpython-311.pyc b/src/integrations/__pycache__/feishu_permission_checker.cpython-311.pyc index 39240f92c9539f7394e024aebc539e025402848c..de8c00085eb5354f85d5a3413ac8c394d70c1003 100644 GIT binary patch delta 23 dcmZ3Su{eWoIWI340}w3QXqx#%dn2Ey2>@2b2KWE~ delta 23 dcmZ3Su{eWoIWI340}xaxnPz_0*~lkq0sv5r22lV2 diff --git a/src/integrations/__pycache__/flexible_field_mapper.cpython-310.pyc b/src/integrations/__pycache__/flexible_field_mapper.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77b8a250c2d7be86e337a927d691b420e220a3e5 GIT binary patch literal 12391 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 PbM%|xsXF+QM!)et?P?_` literal 0 HcmV?d00001 diff --git a/src/integrations/__pycache__/flexible_field_mapper.cpython-311.pyc b/src/integrations/__pycache__/flexible_field_mapper.cpython-311.pyc index 6911695fbb3425a0c318ed25a90cbca94e40d1cb..c1fceabe23785808df00398f2ea3197e767fb1c7 100644 GIT binary patch delta 25 fcmZ3vlyT)!M!w~|yj%=GuxO)c<`3tMe6xc9XaERM delta 25 fcmZ3vlyT)!M!w~|yj%=GP^Dy=x!rXm-|Qd&U+o84 diff --git a/src/integrations/__pycache__/workorder_sync.cpython-310.pyc b/src/integrations/__pycache__/workorder_sync.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e735f3e48851ef6376647640b1de5d0d8af0119 GIT binary patch literal 14878 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 diff --git a/src/knowledge_base/__pycache__/__init__.cpython-310.pyc b/src/knowledge_base/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cba829942b4546f677b6ede32a2d0c75edc51ba1 GIT binary patch literal 136 zcmd1j<>g`kf<+rmGlhWkV-N=!FakLaKwQiMBvKfH88jLFRx%WUgb~CqZT+JB{1W}d z;^NHW68++$Wc}>C{PLXCl=Rg2q{QM>{rLFIyv&mLc)fzkTO2mI`6;D2sdgYkikW}} G3j+XI1s!t$ literal 0 HcmV?d00001 diff --git a/src/knowledge_base/__pycache__/__init__.cpython-311.pyc b/src/knowledge_base/__pycache__/__init__.cpython-311.pyc index 912cf7a311ad761053393cd7d3b96da73c5125f3..a8526990f7c8756a37400e684ae1e54f0eaf994e 100644 GIT binary patch delta 21 bcmbQmIE#^YIWI340}w3QXqqWBk+&BBHD?7q delta 21 bcmbQmIE#^YIWI340}xaxnPv)4B-??{Yc6N4F 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 z zHL>((7r@dsKhhw)tfit_herfe1N7)1wM{(DS@5gkgscaY$|kWCJK4lYO7sS$w?^S; zgpmqV4xI@hsFehgHXakpwoq@Z3z0yX812!vdW!&&ARAqyk$R)2)=1F_MA|iCq)W#d z=brmT7l1$o&c6SKyahHOBGX+}&YV8J^x9u8oq7e%*6!LkdOG*maS-W^7f*#c>^a;j zu!+LD@#(4ncrJc7;PQVZfT0YNJEKk|7~jcJZiJ|IBOza5scTi!~czoxrdri zpX}V9ut<9nTDuiYaNlM$n*syGqsd;+VBNE6x2Xm(_SV6$~{w_GnphCJ{2b{6{3US+h z;muhsI2T)STVvijOgkCGxkJTvk;#>JUp)Kz;+YQ?mmhv(55FICgPl}K$v~S7D@@6y zdf|lAs>V=jG1Xy2*ou4Q@?|CuttMAeTPv)Sz4)sfvW?i@KHvd7iC8R^5Z#H((4OYi z+AK(xc35ov>Q0YA!)PmX;jK~cw5HR>{Apaw-PXkXwcYBS7Agfkg}=wJ zPermzrkxUNGEm||b^8gZV8X2`)*OtEaG2Sl{G}qksSCNLP{e&=8B-TLGXb87NJtC0 zf@hlZ`eB{fz^%v$+(v~WUhWl0zFchZCMAjJ8nkn)7JheMh@^&kvEqc5bnxY)k?EDui>|;0MVC9G7lwrE zPpDL2_FBqyEvaXkp@WWH3@;N9$$H6XEk~0VnkMYt+*_@dILT0`L$z>1vD~%r4a#Yh=#&r><};K$NlA&43MGdr z`EyDZD0zgErzv@clGV8rIoi&|(@5y>a!722;@WmJ(>Hw8_RZQuSfBYsh^VgpK{K?^ zAgZ5YE5avQB=&o4tMnf?t}%Z3=#`m~%*gOXn=TRKWVeLIjE7xO5!&ZOiw>4wpT)W3 z)x+*ary_Rr-uj|o}_kUIxQTeZqAv~$6mn9UdY z!J_BNh3}ZRzmzXwouFLjLWd@4Rbc|VNAk2)P;lZfF3Rxr+>$3h0ErS$(Npw^dmZ}~ zDfSdbp`7j(o45G0R8?qQn%7>Fj+G>dj9q}L;?Z}ovH5Tm3*9yj@z(}%j%gX~{{ViP B8D#(f literal 0 HcmV?d00001 diff --git a/src/knowledge_base/__pycache__/knowledge_manager.cpython-311.pyc b/src/knowledge_base/__pycache__/knowledge_manager.cpython-311.pyc index f52c75c323c471bd109fdce28ce260433c07a639..8d9e8211ee0d97b5570db26b6339223e8b8be1e3 100644 GIT binary patch delta 32 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 literal 0 HcmV?d00001 diff --git a/src/utils/__pycache__/helpers.cpython-311.pyc b/src/utils/__pycache__/helpers.cpython-311.pyc index f55b2a24f8ee9285419aaf72fe9efc9dc379f885..db6edb9f147c26dd3e74088f72c309e8074cca26 100644 GIT binary patch delta 22 ccmeww_BD)mIWI340}w3QXqu_IkvBsd09Tp@)&Kwi delta 22 ccmeww_BD)mIWI340}xaxnP&dq$eW=J09E`3`2YX_ diff --git a/src/vehicle/__pycache__/__init__.cpython-310.pyc b/src/vehicle/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b44d7359b93c29510335cc9dafd0de84992ed0b GIT binary patch literal 260 zcmd1j<>g`kf<+rmGbaJ*#~=s|MJ-NNS++Mcag_;l`cu9u8JX-&pkLSd;HnaMe+ zE{P?HzKMB>>8V9UAUpgtS#Gh%$EV~c$H(6iDT64APXVfm&qY!OQj?gI6Cb~lp@2KczG$)ehv8VvueY JCLR_pCID}lO6>pu literal 0 HcmV?d00001 diff --git a/src/vehicle/__pycache__/__init__.cpython-311.pyc b/src/vehicle/__pycache__/__init__.cpython-311.pyc index e533729a98ac4ad8fc4ac2fe0e17e2de2a50b389..c284ace2069a1c58a0dd8b852bf6ff8da9eb546c 100644 GIT binary patch delta 22 ccmdnQw26s#IWI340}w3QXqq``Bd;nW06^^pr~m)} delta 22 ccmdnQw26s#IWI340}xaxnP$%3$g9c-06RJa`Tzg` diff --git a/src/vehicle/__pycache__/vehicle_data_manager.cpython-310.pyc b/src/vehicle/__pycache__/vehicle_data_manager.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6b8067f03cd3dbb2fa1720362ea3bc6295865dc GIT binary patch literal 8162 zcmdT}U6T~odG7D->G{}C5TF>Z&=(^c*aaaB!5GO1IkCL41BTL6@MM_NJ2do6FQAQjW?hr&MxTjugpJ{y}bXk*dDPO|-jgRW4FVZUk7#^PcXR zo!y-!RC19@clF!d=bU~|_c_mb&U4=O^LbmscH@`(-GhfD>7VJQcT;h56h{!jFsURl znJJ!JlEqmmDLAX1TGvWiT`%c%qh!?0k||R;&9mxO$*N~c8F8Q`{v)iar48M7T)@c z#n=CO@ds}&zV_DATk}iTUt0L{pWDkQAWasvSbNqD!dN@zR>N3*vN01|e=r@oexu?Q zmDpmH&Uq$mg|*9rRH$lWluTh+^XjstAv#*)zP~R z;^ruhU|g0YM?%X;)G8&FDNMa4m9&h;KFxGTX9f<_fpyF&Wvj$2+-DqX%4RmpUeimN zjF!o!?Ecqb6{mTxrA(YJvkC_!eQyLp)BiFQ2A$^DL zJ0WM3Z9>if{3rWn_CWWI?sEp&799O*%dxF&8)_R8-=whn+3aG$zA#kM17glXv2 z9r18a<9;P+^5*?$&%1PV6)oM}=$d-%i#P%Tb0|ep8CX3by(v$k_YBXkCH<%cjyLtD z#Hq_}jql;UAMU9H0kEsE(TSla}&B&OSWeHc-yd+CurfoAV zl7B2QJyL!w{Y0bOjC2~qQj;|4sw&g9c|w|yf&-V4NBeU)sKg1B2(vTK$x;i0e0Bid za?FZM_)*BuX_RC}%e-PT`9ykkS-vb4GtDh{^~HBTSa_wqzH5)8pK?wkXmY1q397DJ z)cFX?^UY*N$xx#wBQ^*t_37p|-1oXm$YAm1>kF^^^w8L>I<{+U^5h1k7Jl~2oA3PP zp|N6~Q_IHLniG}-2T<@EJWDCs`M__)I&0Ra18z`?+VC&OYK5`bsQUG~8}foE=r*SO zIP>)LRYy=vtUH|hylC+OWG5fdeSh&ev6?aaEN6`05dT|7J7f*|=?+mb_U}Jr|!;)!@6c zQ9I;t2;2>0n9X`A?#{HdNNWRg^Kx4Q^7Kf)KnOG#&httOxZCu^&foU6<9t=0NH)Dj@ z9Zc7NYJ+gCw(Ki5P%X{^)w)3S&F{Rs@ZBG-NA<}!%~)|+KP2<5XxTX92IWdMbT2uR z0;#=@5_5TX|1bi9*|F_`Zj-FY3_1mX@Z?YG; zz2fX7FQUw3bF6R4jWI5uBoNMb;n8Fs=)#-trnJ?_=6fiOkj=-*(0sus$Our2@v)a~ z`@?x4myy+>X}3euTFbg(fu_Y-(6q6RrWfa4Sp4DJ3I5*H zW6Sfa6+BXvy~9^IujdCqvkf8lUP9LLbwS|O@Q4C{$9sj@*Y_s z@3p`dxD*0GpnEm2@fI!*!nLUG2jff+D-#!|8k6K^5NACsd4fok)JrFe8mGxKnf?XR zh~_4nBq7)HcJK3D=#Fj--4)9016}?Fs(1|@3*d_PSVO`odWA=!B#zS4Pm&R1`J)P@$Cw4@NKWCvlsNx=)IGL0dk#Z2th9O7ehnn*{4jOAD!Hp>b< z=>rTgE{bNcQIzbI-o!Su``8wWNTsQWM!`2CPl&~hA)?jsP3bn|^XR?6Zltn%R;g8DnCkr9{$sDN@+3tz>r#yGPh@MEE9N)36XNg>qYA zdz0`8+b494I&&R}MyLfL6uGUj$0N0aXc0o$-%_ur>@$rdx=-Cs`Jav5kzNbHT>`N1S_dUM<34RdmTzmOjrGNO%zkl&)?ar3qABVS{ zIohPbvGD5aAHDxq3-7(SIQNs~AN^|K)%Q92LMoCXf*uN+3{g_ghx8GbCV~f8%0V3k z(~d(SEtfl3zxoZ#G~M}SC0@f1!C9>OQ&SX$t6sn(M%D8JhoOdiqNvKL;L0-J=bfAU zWw*in%bnYt=hn_4LX$|d!HUbvRlmVps@ZMSIFbAE*Qu^t!w<{Va}^G;R&$TyV`8o5 z`wT(hd@AM2o^#3Z;(<=7j@tn!Bp2&lhn0DyQFG!#=Yexh#S72z&r>b58i|btt&F|p zFXP622#XB3A5K3fbn4R%hlb>6I^Xru>g=he)44Y5uIC`OEV^v(`Ytv{gW zl%aohd>?>;)5L*^CQUYrZ-0O3H}6e=>6X6vizZDyOTYSH>4Tr%{JTG0`uPj7fuOkC ztj~_@9pC%-uJMDr#-BJjF@9*@_@VJ}d}vlEV{`xl=J9ZHL$P!2iU3#;TLBuFyWvbc z;8mbH{c5$zxzngR{lZ}#Q#s3PQ!5c7&qNpM&hd5laYqzyK zO8&n~)9#>DuD8_s6h*$fFGDdzo%E#kH`YmwqJm<#?%1Xw7r^mpRIuMla)VD>rNL>v z-Caov&h{gzEk&dt5QY{!O;!zMT0_oDSMd*M&TOerCUs)~ihO7y5UE{oW`fud3-};b>y_tY6)zvF9@z2$s<0d9j8!bWSB3GP z6z`ILUu=`2$BaZj2*jI<_wC0UBYm3Z6t!q)O_H*P7{9h`e5~2SSX<|0OGWrn-Hc;Y z+zrd4vZ2sO-j;+l`zfzJm2o2dqB6-JrL#VXjg$H-j?zD^My2kQ%duT9*L~Im3zp+t zxqPu%@zNZ#TxNc?T;`-0_={vzG6b|(JL~(NAlO)S0ZBq2e}c>bGSv2*M4tGG!k?k5 zkj%HptRPNY(N7Of(-Bn^5LhgUVhoC<-3GUQf_D0?jVObnE4LNHzNKsjE8gkkAR>IH zpxd{VUHwwGJ-ls<%BQ@1tM{qIpK_~U+8-D8Zl4nGP#oporuPxCa+Cfc5&{hbR7i1% z&+N7W*Qq3}>9`4lHQz?-pChk4*+0w2Rr}( diff --git a/src/web/__pycache__/app.cpython-310.pyc b/src/web/__pycache__/app.cpython-310.pyc index 79054f0c0457933c2d5ef2ecb5eefa36234d9d72..1f2d3b4e2f33e42dcd88dedf78ba9affdfeabff2 100644 GIT binary patch delta 2327 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 delta 19 ZcmbQAGCzfDIWI340}w1V1uFmm diff --git a/src/web/__pycache__/error_handlers.cpython-310.pyc b/src/web/__pycache__/error_handlers.cpython-310.pyc index 03eb5bf9e66bcc2297e21b9026840c2c71799764..c4401cc19e245e9f8a271954613b67153aacde20 100644 GIT binary patch delta 311 zcmdldc2S%!pO=@50SFdtG|gn^+Q@f_mAN>BVe%)&jLD8{sTelj@_2Ac=AKmw8=}@tr#^Yx3U?F8=-5EVdQ9F`Zt-CBbH4O zWUkWW42}his*^c6^|_Tn0xBRvb+R+3JEQvKZq6oIkf>jgCP-KcNN6%c*kHwKleM^P z1+_uKOkgkgX)^g0X-ux*N>x+2tgomi#ao|vOP9E@cy8E8+pFSUK5` z!&pcS$ok9&B$${482K0_7-c5kX3J+(o?OGKGC7~!mZeC6fnhQqhdon~;^eh#GMq+0 zwM9xmV)6`*ST+?9Pj&Kdjs=Vwljm^ibA!w)QU?(lldo~QGipti<7$!xiTV}kfP|%h zgeEhD4OXl%*9m|cW~L_>CyjXyRe{t;?_XjV;{h9AZ`cL6PJJ(>H>oOzr% zXJ&53cdp*{snu%caHUT^6)81;VcSi}G#ns)vw%wW{j~=^Ce_AquA79&m=QY6+XxQ| zUj{j=hrhvt(dHuuA#HvE;)3c3iJ$Ns_Zfcq1)8P65mPp{99P3p=3Pr9_*-Zsaz4s% zZxk#FcKzU5V$@wtc~|p&T!%zE>45jeT4F(0k2$1Vw&vYnNh~C`e5C!J$g*c0fk6je zZsp8dtCKUgK0N#D)vIcxPhI0%)Ir-8LyH=jARMO$tezXab#`Ji07j%@j~o40KYHhv zZ@*rhy0rT4cPryFcouvvmDT8`sY@&8$8Ju%y&0t*_K~bHeDYXVq_4XlewLnt=beSH zQ*J8FN?}U->9m*?gS01_l~25`a}uT|7?O`GH}EER;#^L&nhrruE{EHO$GzKAzP+>6 z-vqDKU9UqCDX}l@K9GSnV=*a*KMlM8*JW7EalEOW{1=xM*O|bnK&r$)Q}9(8GNeRh zo~M=8jMAD?T9@6J*+1Kva9%rd{RoOkiD=s0mT|YGl&y3J*RtKqvK-QLZQw9V)_$rz zRkZJ7?DCt)kP;-%7enLiX{9rxbf%O}Jz?8IW8$@B^L%s4*M_v%nRa(%+#M-pE3t$* ziDg3}dKlX@YOrwcnf*J2Nlnx$gk%vxIXPTmW$a;1+}kY7H89;=GgEypXySgWFmGV0 zc`H-R7i+S=PFPTxYN1X-r0jp0=BWu8tw4yf-{57HmLtnLj|clgz2UClK%`6WZIo7` z-p>49=`^vG4-t&PR$Mz4x%?jyG3a7Z^0a}GeL7aR5KU!5R z*>BdHa=t*2wN*9vqz4z}zV-0f=N^kP%lhjJg~=y0mylG5RwyK05+bcd^WATSoV^-G zO>S6IG@0Fq+M&Yn6Dfk*j%v%l9Wg?UbGwDj3@y+BBF-SGf*+h?l?|wv=6nKW0Jn&7l+my@ON@p{_>K0ZJng_Ns$n6)G;$KDu-^z~2)H&pKmYf@I~ z?hQsy=+lrj^@L;X{XIQ6s``lN_hSP~SzoA+0c&bji1fv>QfzRbH=Mt36Eih3&>zVj ZvS!@#YJX_3H~b7wpZ+rDevydG_7Bm~#3cX# delta 1374 zcmcIkT}&KR6rMY?GsEo8?CkEqf-KO1mB!_vKxB2+f6k z&=?nO6Mq^~^t8sBlJtSbu4!$twNe#RkUnUPSrV$rCOjBnr7va;FQl=F=M1zqO?~v{ z&NpYi^WA&SJ@;hBn-*gJPYuH>;Ar|J-uJgQ>2GH&22ZjscvBlutI*->-SZ)WwoMJ`ipA-5Zq3(jv@=70eIMdmm+*>-FCC z`Zl})^wz>&PnhYh!nmvOyNYt~`LwK=%orGQ`PkdV6BlnDKe=+@f_+QeY8T`b=Yu@s zzt6eV?i*u*;4UhTAHI2VY-5qDTxXW1Mpv#}LM4zgfIAdFdS~gIE5%cv72o@A`Q3|l zCb&VC-^1d9?w7mSnO*0t^F3#)CXywAzW)pVk_07qi`W266Q+<;17#dA6Z zqK?Q^AYkJbM?YWw8j3KwG<|A$Vshp38BUFxlX;k=)Pk;_hsdI?;*|(P9t7LAM|gy& z8aV1}g?7_{+rB7_n_Ji_{A6wl)snN0^mH!wSf}+Gtr0&S#%C4k1N)f`1KJqm4BO4~ z4`n?^_{!f<&7-J#a6rwRt>Ux^e?XAiW>n{!$!Qb#;q|~T%z%BtsPEqssgMmm;-UQE zPq|X$&G1F=0A^DjI#SQC`zV&epD1U3O3{8pK3IWI340}w3QxRL9zAOJmb1^55} delta 19 ZcmaE>{8pK3IWI340}yD<+Q{`-5CA$a1!({P diff --git a/src/web/__pycache__/websocket_server.cpython-310.pyc b/src/web/__pycache__/websocket_server.cpython-310.pyc index 0637bcffa90d3ed1549d755077aac3647866d375..2db4020b7cefb0a97fd6be2dcd05af73bf6aa73f 100644 GIT binary patch delta 711 zcmZ9IO=uHA6oBW=%qE*nvY4bcecAL-k7^^{gcWrnF}zr%_em857slO?3k{>@b6}a&C}043K5gX6jNh>*I17i-;S zu7473`KWrIJRi5D?k$rVL5+}xp~h1eB0n6}3SrCCL!>KKmP4C$$ z3;06Uf9B?_EQ^Y~f;+k3olbv(8Q%5JmFwk3L-vYfrRNZNE+abEV@rYP+Rg3zm** qS}K*RgR53@d2rP0TwxeY!vqsTu%pKiwWv+WB3U%kHubR(@U1_Z7n>sh delta 583 zcmX|7L1+^}6rDG-$!?O(Vw%_{8`~{yF~lG!h(QFYmWrM{)FRfR7N@C1MA@VWZPF-} zS_DCylY*Fd(u0c3&66Iz#fwNmyx4=@a`DiUe`@d#@A3YBpZW9W*W|{ecPp8UGm6#u zFV}kq-g_?uhSXcJgJJdB`iL=Ijcf@N^mObuFr^PAz5}z`OLl>q`iEEGSl4#yJn&r4 z4~zm@H`5cqXZ%Ty6wHt>vZ@e@vf4#P6zZ zZVm}m@_igtC;dyQp792EJ)aK>%T{mvV`V`FGhxcO6GRQ(W)hNjcpDui#SI?1(wbrB zTb3a0ilC=E>Rf&-v1QNRUJ4iFVt7?=$RJgEq{sQ%$d-VVS diff --git a/src/web/__pycache__/websocket_server.cpython-311.pyc b/src/web/__pycache__/websocket_server.cpython-311.pyc index 5ee31325c651bf09ccaa9b42f389251b688a84a4..8c5830a907880c041948251407a0c0a83256c629 100644 GIT binary patch delta 1604 zcmZuwT})e596#rtdwWYMZRr;jX!$6EwG4rjfwkC~4YEv)$%b)KA8__uHej}RTZWO_ zfq|HsEN00u5?MC;gxSY~h%Y|)LRn&bFu^pDG@0?mWbr|3=EJgR^nd!5I{e>zfA@cW z=YP)s>zuDw@ttMU=M4=81oD0=G@CuTZ92eq5hJvL6coV}MFff?gtoFLIN0AtWkse9 zN^M#r{W9cObs`&5U{-|DXC}Q8ahe6Ch=H2Q-~T;(p4#@Fa4MB5_*?Rp(PAXP24Ff zh-P-rZ(^%{QRhX6Xv?vj(VUl6<()+(k<82N_hXm)bgCU3tK7R91IQbq@mNfWCTHU@ z)yvs1Ktcz=uJ?zn2nzlXo>f%PAzNF{>fL$J{}`VM3a2{JZb)~kUC82g(6b$QLPpt6 z`*<(O9v8SiS_k?ba*ubBJ+}nRUYEp~UIO}k**(!sqL^hYb`r*jjSlt=YG|(7;2Vev zFeVU5QEs4{;uf^{Zne#@DAVjb2Sz;HqSS6syBKu2VsnpdiLecPB^gF*n2O8fHMBuK zfNPU%WR^ZVOE;RB-e7r|id5W!sP0xHTN7%{sW^$eXb9D^32{j%HH&u}!^5q768mIm z-08!4^MV?WDv88&xjC=+3~VLfu&5AGUP>tH6?j2sw*y||ZCvbGg6GYC3XF;&&{)fG zzwsBFJ7@DA7%e%YXJ>U-k6&$XIcX%jM#D*`yz9b%(Q5r*HBXt3A7ubGkS3%^vRX}q zG(z!zGfl`EnPdOR-R!sH*2+!lNQoNMWWHDrRiM%&qB<&H#8f{+Aj>*-e`E;H?))`! z6XOxK`Rv3we$vzd4sigVR7@x@E?h`n%A3nIn7*W3po*F(9ZS>V!bKIv6_(%i4lb&L zZ?nui!6PsI4QgT@pmaLB(((hd^ZHUo+Bf&)%smB!>v|5H?vLZ?(?7d9K5N}<%}jkE z?7IRvSKvoi@CR3L-xbQaLTS?h%Lcy+YOqzFsEaXmg*&;*x99aKJ57W7p6$Hy)?_?7 zuOugnZF&aGTiKV-ePiJbD=l2+TAHndJowtqt}%)#)sHwdao~k`q91!ZP8TmLVf9mHJ+U?TqKJJ3^#Axr Pk^i%H_I38~#MyrVk!W%( delta 2166 zcmZ`(TTB~A6rI_Z&BNI7gGcZh6ek25NDMUw3W10OMNu1QMB5ZT>JZNYCe)^56RN}% zR8R|*+C-gJQD2h3(ns=CWky=8feza9Vu0WP5@mck!uF^;-Ql;Km8wW@;yL;yD zxpQak%)N8JzVhuXF8RV_Dn!ukebpSk<-Jp~f$c_&&~>DtK}^t~K=7bQoa_;9Yfynv`3!6j-b7 zM;Z7ak@9(I&_*ie(V(5|2Xv51z*17&k324x5&Zbr(jl>^CXkjUhT@|kk#9EFWa#JM zd$1xP^c=#l>jWO#)}m=KA+jN*l+AiWVA*(d>?~Od@hZ zViR?CN91^JXvY&nllFWuJa?BQu;$D$}%%vTYM5(;=$QK7u4M2w_x8u}?bh29Vc&=gLf zqzOjZ!3P(c^-78x?V>F8siKm!nQE_3YO#2bW$MS94b%?H(sB+X0BOUhHbgWUOBaTs zk%$(Ghoced=ITy>m;s=gz0=TX{udJL4|rx#MnN{`(t5)dzTg*5IMH%IIk8_@?x+I! zekJY^(0!-<0him=ld8B7(J1aKt0h2+T!~a+m@DBA*<3uEhAcR9DYZ z2lVN((V++#*Mgz(uoj62r^4~kU?@ssmyey(F7!u3GZ(dZzeX=<^hhi|MB~9&_NQY! z8X6jpbsl+&{X>{Mb{1eOn`4{i@|3xD-CVzBuK)6tRdXO^4rGvEa%@`c8`jcw>%lea z!Q{YgY1P`CvNr!(oO{pZrMy7PU|J7OnAq{U*v+=b}%6wyjhQ6~qUBeaAA&p-Ms z2MUmu^&POk8r@cpki9(#;A1>4=b5XiMGixrZn1%;hPI3%7X*H5em;YE|Kd5le=0mI zL3UTl=H4iFFMZHt#C=EicRR&pXJL1ZVcCNLcNIP!d>)Gj7Fh2(ito5H2`KoxgHAmO zK`(>*{CXLzofad<_n1g~OpYXkF_HZ&xmeDq28;wE@{&sAi+Unbfhhfu=fpUINx`rP z$yCTj{EZ5)z;tryWB=zEH?x*NPnVujQJn_xNZGUFMMqD$bjjqz2!+}c%vB)1ziMcD zqR|=lOW@Fq44aH4K{1OS8d0(BT351XwaA+)^72!y-cak;Ro|NGyIpa&dsXd9sa@-8 z&zjn^s-8-zrxtn_dVe?BuLYCgRg*7e@@0^y8>LkLy4t#?w%)Dy4(#~Yb@j}edS+Ga zOR0U_Zd0vV=*63?v*nxiS#TgN(#Z&Y3nUND-V1*IIcFC^yll(ffX5dA3~E?i>pcs< zSGp;k;nE`8YIWfcm&)2s3oSpM$e;?@zZU{F*_}ao@K(u%8I*@^%&xY#DDUyvX4y~e z5&SM|@98sJm>X;d}Qo+ElMWGwNCm8o9npYdr88c4ElfkTj&4Tsg1CKV`u*Z D@{RLW diff --git a/src/web/blueprints/__pycache__/__init__.cpython-310.pyc b/src/web/blueprints/__pycache__/__init__.cpython-310.pyc index 6177792ac73944f26af1440c4d61414f1a119a86..7a0de6e03fa036ce14bc237d009192f4610485cf 100644 GIT binary patch delta 20 acmcb?c!QBApO=@50SFdtG|imIa|Qr6I0dW# delta 20 acmcb?c!QBApO=@50SKyNE@n*RIRgMUF$K#2 diff --git a/src/web/blueprints/__pycache__/__init__.cpython-311.pyc b/src/web/blueprints/__pycache__/__init__.cpython-311.pyc index 1ef659d06c62398c3aee0a054274d0032aae2b14..47fc2d1a3e038955292dea01ee72a7782e369a0f 100644 GIT binary patch delta 18 Ycmeyu_=S;cIWI340}w3QIFaiW05i`8m;e9( delta 18 Ycmeyu_=S;cIWI340}yD<{9 diff --git a/src/web/blueprints/__pycache__/agent.cpython-310.pyc b/src/web/blueprints/__pycache__/agent.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e358a548096b294dea97322348d7d1276051b128 GIT binary patch literal 7382 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 literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/agent.cpython-311.pyc b/src/web/blueprints/__pycache__/agent.cpython-311.pyc index cd33b8673dda0fdf0152e0c61b5712ae9469d21c..74ca9c3efb943ff241f872b2c38f3fd8a96f563d 100644 GIT binary patch delta 19 ZcmX?Ada9IbIWI340}w3QxRL9C6#zp`23!CD delta 19 ZcmX?Ada9IbIWI340}wPU+sJjm3IIY%1}^{r diff --git a/src/web/blueprints/__pycache__/alerts.cpython-310.pyc b/src/web/blueprints/__pycache__/alerts.cpython-310.pyc index e1b9c7cc93bec04da7d6418a89ecfb0d8e4cff2d..0963fc58d32fccb6640c2e2ce4fd210a6c7de9d3 100644 GIT binary patch delta 21 bcmcaBaaV#TpO=@50SFdtG|k+|6UYMqK&%Co delta 21 bcmcaBaaV#TpO=@50SMSOUdq_W6UYMqKXnC_ diff --git a/src/web/blueprints/__pycache__/alerts.cpython-311.pyc b/src/web/blueprints/__pycache__/alerts.cpython-311.pyc index 0221f3c8804c16790eb382ea86a8a9cd8c56392e..51ef4083fd1c21112e166981e62b276ec81bb13c 100644 GIT binary patch delta 19 Zcmexo^v{TEIWI340}w3QxRI+w5&%H{1?C21wsG- diff --git a/src/web/blueprints/__pycache__/analytics.cpython-310.pyc b/src/web/blueprints/__pycache__/analytics.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6242141c1eeab39bea8bc9d26a0f3ff32f3bd722 GIT binary patch literal 1549 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 Q>H9{{8~v+BM^B#r7ri`*E&u=k literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/auth.cpython-311.pyc b/src/web/blueprints/__pycache__/auth.cpython-311.pyc index 82f538ab3b619afcf1b4a9d60133c20878340195..424d0f74412807c4425b88c173c5564419bcc579 100644 GIT binary patch delta 19 ZcmZ2txWtfaIWI340}w3QxRGm?1OPOD1wa4* delta 19 ZcmZ2txWtfaIWI340}wdR-^evf0st}V1kV5f diff --git a/src/web/blueprints/__pycache__/conversations.cpython-310.pyc b/src/web/blueprints/__pycache__/conversations.cpython-310.pyc index 0da64273d65982709a3087918eae20db2c292a5c..8df31d266c57735ae0d08518fa84e0047e18e41c 100644 GIT binary patch delta 21 bcmbQ>HNlG~pO=@50SFdtG|k+|!=efRJC6k` delta 21 bcmbQ>HNlG~pO=@50SMSOUdq_W!=efRI#>lO diff --git a/src/web/blueprints/__pycache__/conversations.cpython-311.pyc b/src/web/blueprints/__pycache__/conversations.cpython-311.pyc index c2c0958ba291286abec5f5fc1dd2e5df5810c5f7..d9bf417a74a1168679ad62f70f5a4ec1ea50c8e0 100644 GIT binary patch delta 21 bcmeygfbr7;My}<&yj%=GuxR5(u8aTxQsf50 delta 21 bcmeygfbr7;My}<&yj%=GpfzhFS4IE;PoV}g diff --git a/src/web/blueprints/__pycache__/core.cpython-310.pyc b/src/web/blueprints/__pycache__/core.cpython-310.pyc index 6d9c12de1cd15e726d1d148926a73fb74ceee21d..37a48c3a0add9f767b10a97d9e3e67d7950e284c 100644 GIT binary patch delta 21 bcmZpTYK`K_=jG*M0D?suO*1$0{L}#eJ}3q; delta 21 bcmZpTYK`K_=jG*M00Op+mohf;{L}#eJn;rG diff --git a/src/web/blueprints/__pycache__/core.cpython-311.pyc b/src/web/blueprints/__pycache__/core.cpython-311.pyc index 425a3f4d7ff36eda13749f30ab764ec88e3134d5..5a18d8c1997e1170775515187dc36af2c8e12f43 100644 GIT binary patch delta 21 bcmbP#k#YV-My}<&yj%=GuxR5(uBjOSO~wYp delta 21 bcmbP#k#YV-My}<&yj%=GpfzhF*VGIEN`nS8 diff --git a/src/web/blueprints/__pycache__/feishu_sync.cpython-310.pyc b/src/web/blueprints/__pycache__/feishu_sync.cpython-310.pyc index 63b3e9420043e3fe4e6b7f8bfb9e32daaab2c8b8..45fed5b09c8d85520dab45722920c2f26e3d7fd0 100644 GIT binary patch delta 21 bcmX>RbRvi+pO=@50SFdtG|k+|W1|TGMe_yc delta 21 bcmX>RbRvi+pO=@50SKyNE@o`xvC#woMhgZ8 diff --git a/src/web/blueprints/__pycache__/feishu_sync.cpython-311.pyc b/src/web/blueprints/__pycache__/feishu_sync.cpython-311.pyc index 474f19439e576599742e9856a7a54e1dc0400986..7f8d08acd0b6a81cf3e30202b9bb418646d80c7b 100644 GIT binary patch delta 21 bcmcbymhr|~My}<&yj%=GuxR5(u5)1kQK1JE delta 21 bcmcbymhr|~My}<&yj%=GpfzhF*SRnNPF@Cu diff --git a/src/web/blueprints/__pycache__/knowledge.cpython-310.pyc b/src/web/blueprints/__pycache__/knowledge.cpython-310.pyc index 75ec70892da335a924d31136fb55fea0854f8367..f124744731e6532479260de5c5261f8a139fe65d 100644 GIT binary patch delta 21 bcmbQFKS`e_pO=@50SFdtG|k+|(H|5NW~+N#N%DmRbm*JCR;k8jc(wD@iog)us2~Xbr@% zNH1{f0ji1Roxg#slrL5PNn-(N+LI3AD2^||eWE4_Cy`!YEdc1gck-WiTR__Gd#4(D zrvpI72Xx%tpqWen$ofFG;SIR}kn?~7HW~sQ0l>i06zcC}*V1BAo1U5+TOyU}nB$b3 zs$Hq_rqB>5R2HvAW2_jS28~~ZzhsE=ljtKrh8NWZ1r+v>Is=Q3r+G*e-x&;)&t`ii zQS2Ktu*=_!D+P}DPWN|M?5+1vxh^~%#=cC0hx^Z6<>kNzJn{J8rdu4EHaxRW^9DND zaXzoNIds9a-R92vh*X5Rk&%!mtd;Tn!Uoh!R35=0Q`; zi=kK;rdTh9D}^teaSi`6CZK6R3;`(u7+OSNS~OAw(aaaZP%H{ltd}B;)qD{QEn)~Q zqA6lnoFtB+MI50;0;?^O7+NG?S`1R8uxgRU&?1?_6wIJ0GkG0T+Gb5=Jx0-6f+4{H zj_Ij+C62|#nZ+fEc_l@>ljB%I7zH+OW_ioT$hCPP_Z~(@@y&6($?S}5lMjhZVvO7z zD!Q2&$l;VsVJzI7C#lW^xNu@;RYwr#*@D4sk?UwX5+ z<`j^^HQJ?&`!_4;lz})i^%5CRP5!O7m{Dr-e0_aK@#3Onz4Fu~z2elOvdrYv_}s+2 z#PrmnA~v8gx5QwwK!N9E7l$_L};v#mSWDy65;GC>!kisj diff --git a/src/web/blueprints/__pycache__/system.cpython-310.pyc b/src/web/blueprints/__pycache__/system.cpython-310.pyc index 438b5999b45cc343f8d9cc4d1cae47bd8a3cee39..1ea3543d37f56538d3f7e4b82f7c6f00f7f06704 100644 GIT binary patch delta 21 bcmeyH{x_W`pO=@50SFdtG|k+|^U)XpQq2cC delta 21 bcmeyH{x_W`pO=@50SKyNE@o`x`DhFPQsoC( diff --git a/src/web/blueprints/__pycache__/system.cpython-311.pyc b/src/web/blueprints/__pycache__/system.cpython-311.pyc index a9db02a29be6a5f0e060c3a2d991a543b40c0352..e1514a2aa18693aebc333b3a9ae51e18e0d6ed96 100644 GIT binary patch delta 21 bcmZp8z}WDBk!v|GFBbz4EZVq{>svkmOaTWA delta 21 bcmZp8z}WDBk!v|GFBbz4XwBNl^(`L&NWKPq diff --git a/src/web/blueprints/__pycache__/test.cpython-310.pyc b/src/web/blueprints/__pycache__/test.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da4c516183ed2568059999978f3b83c8d3fe5bda GIT binary patch literal 1555 zcmZvc&2Jk;6u@Wp!yoI9v``8MJ_4w!d`L|z^@b21Y9uZpQX*COVmY2kaASMjnO)LY zN#!&lwE1d)R1}iti-smhiB(0YQQU+-f%{zJT{|Z(oB#>ltQ`|1cC~NczIpRz=Dpur zGZHZnT#Ji&mL;o!zAL_gCyF6Vr}*{Sitz8`(yX#>3aD=ZE?@} zVz>UyBWLl@a2`+8<|kpS{>!pEx6$x8Dvi0DYtHg?bHesLXKJNBeqbC!AQV$Y@WZT4 z3oMhjgrCuyHszq);ATG4KP)s0K8wM4s*s6GHHL*@vuv`!Xn*EbF%(am`8-Wq88a`m z?oWDp!NH%S)@LT+X}Q431xZ6Pg&)Dg=Rg!=7Fxw?XcUd0RYj(2O&P_Wt`ZG&#nT~O zpsSt^$pT%oR1zS;5xj^VDa0Tl5?<2A@paULG-PSRofwVk7!}WgU&PW!^l?n0OA5%g ze&ssyp-&MxGpgU#dz$YdJcMFr?Kap{BS)U#?ZO3L3%Iu(6!?|}bdNFJxfP`~tg>Hiplx~n5twwY|NC8&RkjVr*0(qtn5 zY)C4C9veoBjnJraTLCt_x5q}j zz5J}UQ*ve>R4dc9%4~J7RNb3~(fXG^InSQ<+AF7=$K1PLxev>|J>Bki`_P)s)Rud1 z8iF`0`_=t9=kb$zdAq(@YWDH+gj3nCeLvB3-dT5-W^22ZT4m*^bO%BKMAgcMv$rGT z+}W%@`N5gotsneYKb&m*E{?z5IbMGV@!k9L)x$-1s^l(}-G#C{Gv<6f1JRtRH3(JI zE?>IBk2_$eG2P>fy$QMqoRG+5T13b)2Wg%sZB9uiI|n9q9z+*=8DvaluS$!Y$X=5| zlGG4yfYwB%0rN@Rw_$+GX$@2qO#;%mjX$IQCMFlap(|zxe=o1dRXy delta 19 ZcmZ22vRZ^|IWI340}wPU+sLKJ1pqIe1YiIF diff --git a/src/web/blueprints/__pycache__/vehicle.cpython-310.pyc b/src/web/blueprints/__pycache__/vehicle.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db083d6d0eb18f2316db2164b8f6740191ad1860 GIT binary patch literal 2904 zcmbtW+m91f7(Zw3on9!rz+O~D#l(`Z^+6vrgm^&{URKPi#C@>N_RKC*d-Ke6q0N*) z774dSh>@58u}ipw2Nj|TMgtH28S{$mmS=o2Ci;D6+M$I7O`PU@=bZ0czwh^bztc)G zX%hG@-F(%VOcHVzJAcn(3nEA4m4@DUTEUBR)Brj$O2`f%M#nb zHVS=0=r=|BF*YvrNj5P3(*5Dm-9v{vw|;G(XhCE3{MpXwYpdTKZ=d+KyL8*U2b+?N9K_x# z*6b>G%3h#z`}3OZLZjeT%FcW}&=>7}PQGY25?QP2WP7~~4a^!Z=BnJDcMdevEVDc- zkNfpM0~(0J+fdx!Ks0s3)())<(dP?&(|YFV79S znp03;r@=bc=8I0=&XugPwP5qW?71uFupr)VFFNHQhW^TV^{O4HMW^I=_t011RRwh! z$`jBHRGae(zxM}hKb=ViV=m86?YHNq9y*4jueppX6pJsofxKXQfsA;LLMzulxPPm$ zL8Z9JTs?=kN{5N1S{ zmlk-S;1&V3uM@r*X8gG=%PSQxYq_rDdReeA3l?VQ`Vr~&BW|i%=VPz{cXXczA;}3E z{zj-FDKt&7BqUQx(JjgSsH#Upd%z}N{9eqzgXJ@u(c@XJ&#IFCLW&NPN{|R&& zBT>*&N_^UqR!B?si3nB2m!g1D>r)U=vIr;$Yftm#UO*{PK&egnpbP;eY7tOc4Smo# zb^N2<(?el(;ZWz?jWE+iaB&^x@pUNDAf_`qUymJu{6=U6n-ROvq#?9&A+`cEK7nf{ zL1dH=B(eT!)INg(Zxf1VvGp8?7ogn7Gtu8EYC`FG7e^Ztp?4$CI_zH^%eTP7j8+?m z>VFz7B6$s?AGKD*<&&*NOQ)c4j4qD7#^f5-xwTTs;`PVI&120IyxlqbP50{I|A^^O z_V&(wf@y)?pR*R2Tfv~$BJ;2pD0|+U`2a{qFWKI{3Ul+IjK0BKa8HA}u`S94LEtSJ zsF(sJD=Va+`jp8NkRePFQbpO)!Y6ZC0b)n8miUXzC{q?==7k5jW7OY`az|%zFBaua zBFdd)FLy*OawjFoIDFh5A>%M#1n9^^fhlNi(E?f#fe-N?4f2;@hR}vPhB%2wvvceW zyp=WNobaIb<(u7~u3VSU)%m>by68LCMY11APIDkRWjx-%9qP-oRGK4u^ zw$FcV0T+x9Vh&gf{zKe71s+<;N0|(G!k?r8Jk|OufTz^sLJhbOuojQ29^q*;rGpZ1 zp{NC(vD#B`VEfp`_O+AkQ|DGM|ML5tlWPMjW`+|&j*M3I07EPyU5FXafNl_^M;LSr zQ3*XW49-Ki$RX=K4w7ITUA)#tAHogXK9wfu_ya1bj!SP7%fw7}hVYQ;Y c6Q4jA^$OjfrX)i)sj&%)8I}~(sdS3|139q+C;$Ke literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/vehicle.cpython-311.pyc b/src/web/blueprints/__pycache__/vehicle.cpython-311.pyc index 448d250298ef619567ee781122ce8dbccf1f1c93..d46b5041c965cb049d67babfb5a9d5ee784f3d39 100644 GIT binary patch delta 19 ZcmZ3Wzd)aBIWI340}w3QxRGm`H~=%E1up;q delta 19 ZcmZ3Wzd)aBIWI340}wPU+sHLd8~`$(1p)v7 diff --git a/src/web/blueprints/__pycache__/workorders.cpython-310.pyc b/src/web/blueprints/__pycache__/workorders.cpython-310.pyc index ee7951208664b3d1c2ab4ac1055a316d5f1672eb..5c1a99fe9d2328346dfa162970d1f898453a51e5 100644 GIT binary patch delta 1397 zcmZWneM}rh6yLXdw|Ct;u0&eCue~cDx`)6WS^-f68*NBqV~VZT#9r`by)MGtIlBje z+!ZJqNh4|Ll$Z!j!BDMVlW4E$@tdBfsHYm$n4SRQn>o2QW#_*t?8&JND-i{^=t_BuTCT;zVMWu` zXe7jry#Lv$!E)F~hxP-7?mC?tgK;j&B{=Lrkl;E1@6dU~BSD3JK$f@oSGi`&BFN*C zlphn2bsUnsX^GSlkPX?}dMxeMqy@NyrJqY$6V_HS0SO_&qiusiQlx@XLPQSa92NS3 z30gSa*7YWENgHt81-gA~8_G!7M!56*H~?oRkfBQnTR$+LnTm_0B63GLv^{A%VQaoO zcS0v8XZFOaXgRCBA1$A|)Yz2%dS>PF<>hl1ZV#Mke7VU}?zuHRxH{Uq@=0I%y@B+= z2n|Soc`-dWY`AnBM2Z%|YK&bMj#8O;K859PX3|%NwzBEdCvOj5!Jksv5IWR|u|0;P zAw|=IJ;zl|kK!&2l#{{8YHVtL(1T_Lcc>vn7VsC8#a9`mD7+HiL2+xkG~@KC3pDft zN*U6_M&e7<5zqeLhV;bb%GHZKPkV5TatCDxw$K?5GO#kh6pT_0hbq*Fu7v3mp>=8% zEo$(gcu?C+5l^w;tou*tKN0vvrnR2|yCU32LAK+w%%)X&H!Iq#%@mQ?0rym|(I^rq z*m)@Xf%2B)OX;m?ej3CJc5uQYVCN-}z$u7e;dx-cxXz24mbC5?Gocjhz5E8ANqxKP zA07^;roE>CekA*fyjE-;7b`jmv*fQL8Rm$)_=tO!${RvkTe~6BrnSd(!%i1LtY|TO zjhrd2hyCQ&;upY3?JViFi1Vzl1u`NRiHppfBeQZXTqhgyF1SJ5zJTK5gPgB8A%4fU zd{4ZUFVTFXm5;(*@?qsMd5O6f7!)#CWnebp0JBW-IcCY^x9ltj&&Iu zjjjz>OGN8ba4;05Zy=)MyDaE$##q_1i*<)g_;WCqmW6u>kq+e6vesFPLUQQB{gZlO0jlC3t^zO!Pbf3N2A7=AaSQ;0#hIVl;e}-Df4tLkC}lZ;iD`ZV)_#?}RzR6+*Xp z6@`coYM6}pz1?Ydm}NMmqIz3aQfv%OE^11L^1ty}M1%*}j$~m^KR@||gEnrTzR6CD zGr7Kf%KSCq%bBO_IWNyv!1?-22;c+?;$axnuZbIGw+mQzm!xS@I#*zwQ}g)+xhNH6 zWe9z-5?FC9mVjye5fiv!mh}thiH~qStW+%e+4uk)sndUU33~)5S%U=1D^7Z>gVxzX fDYLX7i%c@930ylDclm7Kh_XFx18b4(0SEj8J+H(x diff --git a/src/web/blueprints/__pycache__/workorders.cpython-311.pyc b/src/web/blueprints/__pycache__/workorders.cpython-311.pyc index 758f80324aaf69f457b600cd1007b08b709fb599..f4f6daf524ce0343545f159f4e06403ae3c0b921 100644 GIT binary patch delta 21 bcmbQbmTBr*Ca&eYyj%=GuxR5(uI_07M@a^a delta 21 bcmbQbmTBr*Ca&eYyj%=Gz_xHBSNAjkLs13c diff --git a/src/web/blueprints/knowledge.py b/src/web/blueprints/knowledge.py index 5f64775..5d313a7 100644 --- a/src/web/blueprints/knowledge.py +++ b/src/web/blueprints/knowledge.py @@ -8,6 +8,7 @@ import os import tempfile import uuid from flask import Blueprint, request, jsonify +from src.agent_assistant import TSPAgentAssistant from src.web.service_manager import service_manager from src.web.error_handlers import handle_api_errors, create_error_response, create_success_response diff --git a/src/web/error_handlers.py b/src/web/error_handlers.py index def6221..e8f08e6 100644 --- a/src/web/error_handlers.py +++ b/src/web/error_handlers.py @@ -15,21 +15,21 @@ logger = logging.getLogger(__name__) def handle_api_errors(func: Callable) -> Callable: """API错误处理装饰器""" @wraps(func) - def wrapper(*args, **kwargs) -> Dict[str, Any]: + def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except ValueError as e: - logger.warning(f"参数错误 {func.__name__}: {e}") - return jsonify({"error": f"参数错误: {str(e)}"}), 400 + logger.warning(f"参数错误 in {func.__name__}: {e}") + return create_error_response(f"参数错误: {str(e)}", 400) except PermissionError as e: - logger.warning(f"权限错误 {func.__name__}: {e}") - return jsonify({"error": f"权限不足: {str(e)}"}), 403 + logger.warning(f"权限错误 in {func.__name__}: {e}") + return create_error_response(f"权限不足: {str(e)}", 403) except FileNotFoundError as e: - logger.warning(f"文件未找到 {func.__name__}: {e}") - return jsonify({"error": f"文件未找到: {str(e)}"}), 404 + logger.warning(f"文件未找到 in {func.__name__}: {e}") + return create_error_response(f"文件未找到: {str(e)}", 404) except Exception as e: - logger.error(f"未处理错误 {func.__name__}: {e}") - return jsonify({"error": f"服务器内部错误: {str(e)}"}), 500 + logger.error(f"未处理错误 in {func.__name__}: {e}", exc_info=True) + return create_error_response(f"服务器内部错误: {str(e)}", 500) return wrapper diff --git a/src/web/static/js/chat.js b/src/web/static/js/chat.js index e1d1fe8..3dfe5e7 100644 --- a/src/web/static/js/chat.js +++ b/src/web/static/js/chat.js @@ -192,7 +192,7 @@ class ChatClient { connectWebSocket() { return new Promise((resolve, reject) => { try { - this.websocket = new WebSocket('ws://localhost:8765'); + this.websocket = new WebSocket('ws://localhost:8766'); // 设置连接超时 const timeout = setTimeout(() => { diff --git a/src/web/static/js/dashboard.js b/src/web/static/js/dashboard.js index 49a7b57..65e2be3 100644 --- a/src/web/static/js/dashboard.js +++ b/src/web/static/js/dashboard.js @@ -777,7 +777,7 @@ class TSPDashboard { // 初始化WebSocket连接 initWebSocketConnection() { try { - const wsUrl = `ws://localhost:8765/dashboard`; + const wsUrl = `ws://localhost:8766/dashboard`; this.websocket = new WebSocket(wsUrl); this.websocket.onopen = () => { diff --git a/src/web/websocket_server.py b/src/web/websocket_server.py index 6314f22..533f927 100644 --- a/src/web/websocket_server.py +++ b/src/web/websocket_server.py @@ -19,7 +19,7 @@ logger = logging.getLogger(__name__) class WebSocketServer: """WebSocket服务器""" - def __init__(self, host: str = "localhost", port: int = 8765): + def __init__(self, host: str = "localhost", port: int = 8766): self.host = host self.port = port self.chat_manager = RealtimeChatManager() @@ -210,10 +210,10 @@ class WebSocketServer: await websocket.send(json.dumps(response, ensure_ascii=False)) - async def handle_client(self, websocket: WebSocketServerProtocol, path: str): + async def handle_client(self, websocket: WebSocketServerProtocol): """处理客户端连接""" # 检查连接头 - headers = websocket.request_headers + headers = websocket.request.headers connection = headers.get("Connection", "").lower() # 处理不同的连接头格式 @@ -241,18 +241,8 @@ class WebSocketServer: """启动WebSocket服务器""" logger.info(f"启动WebSocket服务器: ws://{self.host}:{self.port}") - # 添加CORS支持 - async def handle_client_with_cors(websocket: WebSocketServerProtocol): - # 获取path,websockets在提供process_request时,不会将path传递给handler - path = websocket.path - # 设置CORS头 - if websocket.request_headers.get("Origin"): - # 允许跨域连接 - pass - await self.handle_client(websocket, path) - async with websockets.serve( - handle_client_with_cors, + self.handle_client, self.host, self.port, # 添加额外的服务器选项 @@ -262,15 +252,12 @@ class WebSocketServer: def _process_request(self, path, request_headers): """处理HTTP请求,支持CORS""" - # 检查是否是WebSocket升级请求 - # request_headers 可能是 Headers 对象或 Request 对象 - if hasattr(request_headers, 'get'): - upgrade_header = request_headers.get("Upgrade", "").lower() - elif hasattr(request_headers, 'headers'): - upgrade_header = request_headers.headers.get("Upgrade", "").lower() - else: - upgrade_header = "" + # websockets v10+ passes the request object instead of headers dict. + headers = request_headers + if not hasattr(headers, 'get'): + headers = headers.headers + upgrade_header = headers.get("Upgrade", "").lower() if upgrade_header == "websocket": return None # 允许WebSocket连接 @@ -287,7 +274,7 @@ class WebSocketServer:

WebSocket Server is running

This is a WebSocket server. Please use a WebSocket client to connect.

-

WebSocket URL: ws://localhost:8765

+

WebSocket URL: ws://localhost:8766

""" diff --git a/test.py b/test.py new file mode 100644 index 0000000..4ff2229 --- /dev/null +++ b/test.py @@ -0,0 +1,19 @@ +import google.generativeai as genai +from google.api_core import client_options + +# 配置代理地址 +# 注意:这里不需要加 /v1beta 或 /v1,只填主机和端口 +proxy_url = "https://generativelanguage.googleapis.com/v1beta/openai/" + +genai.configure( + api_key="AIzaSyCK8Ykg2UGzDV9ZmPAbbqOFgK3_9ghxZl4", + transport="rest", + client_options=client_options.ClientOptions( + api_endpoint=proxy_url + ), +) + +model = genai.GenerativeModel('gemini-2.5-pro') +response = model.generate_content("介绍一下你自己,用50字中文回答。") + +print(response.text) diff --git a/tsp_assistant.db b/tsp_assistant.db index 5d14bcb03909df9d95a243a78f83c66ca870e1b1..57ef90c4524a205df7cddac5f0ebaeb8a54af76a 100644 GIT binary patch literal 65536 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 Trb2G^%{e~}ST~olrZ55k0S_N!