1e1e5957e8
- Ips.vue: el-select 添加 width: 280px,修复网段下拉框过窄 - Ips.vue: query 参数 networkId → network_id(与 FastAPI snake_case 一致) - Scan.vue: el-select 用 network.id 代替整个 network 对象作为 value,修复切换网段不生效 - enhanced_scan_service.py: 替换失效的 scapy ARP 扫描为 arp-scan 命令;扫描结果自动创建缺失 IP 记录
56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
from celery import Celery
|
|
from celery.schedules import crontab
|
|
from app.core.config import settings
|
|
|
|
# 创建 Celery 应用
|
|
celery_app = Celery(
|
|
'ipam_tasks',
|
|
broker=settings.CELERY_BROKER_URL,
|
|
backend=settings.CELERY_RESULT_BACKEND
|
|
)
|
|
|
|
# 配置
|
|
celery_app.conf.update(
|
|
task_serializer='json',
|
|
accept_content=['json'],
|
|
result_serializer='json',
|
|
timezone='Asia/Shanghai',
|
|
enable_utc=True,
|
|
task_track_started=True,
|
|
task_time_limit=30 * 60, # 任务超时30分钟
|
|
worker_prefetch_multiplier=1,
|
|
worker_max_tasks_per_child=1000,
|
|
)
|
|
|
|
# 必须在配置后导入并注册任务
|
|
from app.tasks.scan_tasks import register_tasks
|
|
_tasks = register_tasks(celery_app)
|
|
|
|
# 导出任务函数
|
|
scan_network_task = _tasks['scan_network_task']
|
|
scan_single_ip_task = _tasks['scan_single_ip_task']
|
|
full_network_scan = _tasks['full_network_scan']
|
|
update_all_statistics = _tasks['update_all_statistics']
|
|
quick_status_update = _tasks['quick_status_update']
|
|
|
|
# 定时任务配置
|
|
celery_app.conf.beat_schedule = {
|
|
# 每小时执行一次全量扫描
|
|
'full-scan-every-hour': {
|
|
'task': 'app.tasks.scan_tasks.full_network_scan',
|
|
'schedule': 3600.0, # 每小时
|
|
'args': (True, True, True) # ping, arp, dns
|
|
},
|
|
# 每天凌晨2点执行一次完整扫描
|
|
'full-scan-daily': {
|
|
'task': 'app.tasks.scan_tasks.full_network_scan',
|
|
'schedule': crontab(hour=2, minute=0),
|
|
'args': (True, True, True)
|
|
},
|
|
# 每15分钟更新一次统计
|
|
'update-stats-every-15min': {
|
|
'task': 'app.tasks.scan_tasks.update_all_statistics',
|
|
'schedule': 900.0, # 15分钟
|
|
},
|
|
}
|