2026-01-08 14:26:34 +08:00
|
|
|
|
# services/core.py
|
2026-01-08 13:53:19 +08:00
|
|
|
|
import logging
|
|
|
|
|
|
import threading
|
2026-02-03 17:15:42 +08:00
|
|
|
|
import traceback
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
2026-02-08 10:53:00 +08:00
|
|
|
|
# ==============================================================================
|
|
|
|
|
|
# 1. 动态导入模块
|
|
|
|
|
|
# ==============================================================================
|
2026-02-03 17:15:42 +08:00
|
|
|
|
try:
|
|
|
|
|
|
from .crawler_106 import run_106_logic
|
2026-02-08 10:53:00 +08:00
|
|
|
|
except ImportError as e:
|
|
|
|
|
|
print(f"⚠️ [系统警告] 无法导入 crawler_106: {e}")
|
2026-02-03 17:15:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run_106_logic():
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
from .crawler_82 import run_82_logic
|
2026-02-08 10:53:00 +08:00
|
|
|
|
except ImportError as e:
|
|
|
|
|
|
print(f"⚠️ [系统警告] 无法导入 crawler_82: {e}")
|
2026-02-03 17:15:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run_82_logic():
|
|
|
|
|
|
return []
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
2026-02-08 10:53:00 +08:00
|
|
|
|
# 全局任务锁
|
2026-01-08 13:53:19 +08:00
|
|
|
|
task_lock = threading.Lock()
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-01-08 14:26:34 +08:00
|
|
|
|
def execute_monitor_task():
|
2026-01-08 13:53:19 +08:00
|
|
|
|
"""
|
2026-01-08 14:26:34 +08:00
|
|
|
|
执行所有爬虫,返回一个大列表:
|
|
|
|
|
|
{'device_list': [item1, item2...], 'target_time': '...'}
|
2026-01-08 13:53:19 +08:00
|
|
|
|
"""
|
2026-02-03 17:15:42 +08:00
|
|
|
|
# 1. 锁机制:防止任务重复运行
|
2026-01-08 13:53:19 +08:00
|
|
|
|
if task_lock.locked():
|
2026-01-08 14:26:34 +08:00
|
|
|
|
logging.warning(">>> 任务正在运行中,跳过")
|
2026-02-08 10:53:00 +08:00
|
|
|
|
print(">>> ⚠️ [调度] 任务正在运行中,本次请求跳过")
|
2026-01-08 14:26:34 +08:00
|
|
|
|
return None
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
|
|
|
|
|
with task_lock:
|
2026-02-08 10:53:00 +08:00
|
|
|
|
start_time = datetime.now()
|
2026-01-08 13:53:19 +08:00
|
|
|
|
logging.info(">>> 开始执行监控任务...")
|
2026-02-08 10:53:00 +08:00
|
|
|
|
print(f"--- [任务开始] {start_time.strftime('%H:%M:%S')} ---")
|
2026-02-03 17:15:42 +08:00
|
|
|
|
|
|
|
|
|
|
all_results = []
|
|
|
|
|
|
|
|
|
|
|
|
# ==========================
|
|
|
|
|
|
# 2. 执行 106 爬虫
|
|
|
|
|
|
# ==========================
|
|
|
|
|
|
try:
|
2026-02-08 10:53:00 +08:00
|
|
|
|
print(f">>> [106爬虫] 启动...")
|
2026-02-03 17:15:42 +08:00
|
|
|
|
list_106 = run_106_logic()
|
2026-02-08 10:53:00 +08:00
|
|
|
|
|
2026-02-03 17:15:42 +08:00
|
|
|
|
if list_106:
|
|
|
|
|
|
count = len(list_106)
|
|
|
|
|
|
print(f"✅ 106爬虫获取数据: {count} 条")
|
|
|
|
|
|
all_results.extend(list_106)
|
|
|
|
|
|
else:
|
2026-02-08 10:53:00 +08:00
|
|
|
|
print("⚠️ 106爬虫运行完成,但未返回任何数据 (空列表)")
|
|
|
|
|
|
|
2026-02-03 17:15:42 +08:00
|
|
|
|
except Exception as e:
|
2026-02-08 10:53:00 +08:00
|
|
|
|
print(f"❌ 106爬虫执行严重失败: {e}")
|
2026-02-03 17:15:42 +08:00
|
|
|
|
traceback.print_exc()
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
2026-02-03 17:15:42 +08:00
|
|
|
|
# ==========================
|
|
|
|
|
|
# 3. 执行 82 爬虫
|
|
|
|
|
|
# ==========================
|
|
|
|
|
|
try:
|
2026-02-08 10:53:00 +08:00
|
|
|
|
print(f">>> [82爬虫] 启动...")
|
2026-02-03 17:15:42 +08:00
|
|
|
|
list_82 = run_82_logic()
|
2026-02-08 10:53:00 +08:00
|
|
|
|
|
2026-02-03 17:15:42 +08:00
|
|
|
|
if list_82:
|
|
|
|
|
|
print(f"✅ 82爬虫获取数据: {len(list_82)} 条")
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
2026-02-03 17:15:42 +08:00
|
|
|
|
# 🛠️ [补全] 82爬虫没有文件数概念,手动补0,防止入库报错
|
|
|
|
|
|
for item in list_82:
|
|
|
|
|
|
if 'num_files' not in item:
|
|
|
|
|
|
item['num_files'] = 0
|
2026-02-08 10:53:00 +08:00
|
|
|
|
if 'status' not in item:
|
|
|
|
|
|
item['status'] = 'Unknown'
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
2026-02-03 17:15:42 +08:00
|
|
|
|
all_results.extend(list_82)
|
2026-02-08 10:53:00 +08:00
|
|
|
|
else:
|
|
|
|
|
|
print("⚠️ 82爬虫运行完成,但未返回数据")
|
|
|
|
|
|
|
2026-02-03 17:15:42 +08:00
|
|
|
|
except Exception as e:
|
2026-02-08 10:53:00 +08:00
|
|
|
|
print(f"❌ 82爬虫执行严重失败: {e}")
|
2026-02-03 17:15:42 +08:00
|
|
|
|
traceback.print_exc()
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
2026-02-03 17:15:42 +08:00
|
|
|
|
# ==========================
|
|
|
|
|
|
# 4. 汇总返回
|
|
|
|
|
|
# ==========================
|
2026-02-08 10:53:00 +08:00
|
|
|
|
duration = (datetime.now() - start_time).total_seconds()
|
2026-02-03 17:15:42 +08:00
|
|
|
|
logging.info(f">>> 任务完成,共获取 {len(all_results)} 条数据")
|
2026-02-08 10:53:00 +08:00
|
|
|
|
print(f"--- [任务结束] 总耗时: {duration:.2f}秒 | 总计获取: {len(all_results)} 台设备 ---")
|
2026-01-08 13:53:19 +08:00
|
|
|
|
|
2026-01-08 14:26:34 +08:00
|
|
|
|
return {
|
2026-02-03 17:15:42 +08:00
|
|
|
|
'device_list': all_results,
|
|
|
|
|
|
'target_time': None, # 具体时间已在 item['target_time'] 里
|
2026-02-08 10:53:00 +08:00
|
|
|
|
'temp_file_path': None # 废弃旧逻辑
|
2026-01-08 14:26:34 +08:00
|
|
|
|
}
|