88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
|
|
"""
|
|||
|
|
Update existing job to use predefined task and add new event sync job
|
|||
|
|
"""
|
|||
|
|
import asyncio
|
|||
|
|
import sys
|
|||
|
|
from pathlib import Path
|
|||
|
|
|
|||
|
|
# Add backend to path
|
|||
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|||
|
|
|
|||
|
|
from sqlalchemy import text, update
|
|||
|
|
from app.database import engine
|
|||
|
|
from app.models.db.scheduled_job import ScheduledJob, JobType
|
|||
|
|
|
|||
|
|
|
|||
|
|
async def update_jobs():
|
|||
|
|
"""Update existing job and add new event sync job"""
|
|||
|
|
async with engine.begin() as conn:
|
|||
|
|
print("🔄 Updating scheduled jobs...")
|
|||
|
|
|
|||
|
|
# 1. Update existing job to use predefined task
|
|||
|
|
result = await conn.execute(text("""
|
|||
|
|
UPDATE scheduled_jobs
|
|||
|
|
SET
|
|||
|
|
job_type = 'predefined',
|
|||
|
|
predefined_function = 'sync_solar_system_positions',
|
|||
|
|
function_params = '{"days": 7, "source": "nasa_horizons_cron"}'::jsonb,
|
|||
|
|
description = '每日同步太阳系天体位置数据(使用内置任务)'
|
|||
|
|
WHERE id = 1
|
|||
|
|
RETURNING id, name
|
|||
|
|
"""))
|
|||
|
|
updated = result.fetchone()
|
|||
|
|
if updated:
|
|||
|
|
print(f"✅ Updated job ID {updated[0]}: {updated[1]} -> predefined task")
|
|||
|
|
|
|||
|
|
# 2. Add new celestial events sync job (disabled)
|
|||
|
|
result = await conn.execute(text("""
|
|||
|
|
INSERT INTO scheduled_jobs (
|
|||
|
|
name,
|
|||
|
|
job_type,
|
|||
|
|
predefined_function,
|
|||
|
|
function_params,
|
|||
|
|
cron_expression,
|
|||
|
|
description,
|
|||
|
|
is_active
|
|||
|
|
)
|
|||
|
|
VALUES (
|
|||
|
|
'天体事件同步',
|
|||
|
|
'predefined',
|
|||
|
|
'sync_celestial_events',
|
|||
|
|
'{"days_ahead": 30}'::jsonb,
|
|||
|
|
'0 3 * * *',
|
|||
|
|
'每日凌晨3点同步未来30天的天体事件(预留功能,暂未实现)',
|
|||
|
|
false
|
|||
|
|
)
|
|||
|
|
ON CONFLICT DO NOTHING
|
|||
|
|
RETURNING id, name
|
|||
|
|
"""))
|
|||
|
|
new_job = result.fetchone()
|
|||
|
|
if new_job:
|
|||
|
|
print(f"✅ Added new job ID {new_job[0]}: {new_job[1]} (disabled)")
|
|||
|
|
else:
|
|||
|
|
print("ℹ️ Event sync job already exists")
|
|||
|
|
|
|||
|
|
# 3. Show all jobs
|
|||
|
|
print("\n📋 Current scheduled jobs:")
|
|||
|
|
result = await conn.execute(text("""
|
|||
|
|
SELECT
|
|||
|
|
id,
|
|||
|
|
name,
|
|||
|
|
job_type,
|
|||
|
|
predefined_function,
|
|||
|
|
is_active,
|
|||
|
|
cron_expression
|
|||
|
|
FROM scheduled_jobs
|
|||
|
|
ORDER BY id
|
|||
|
|
"""))
|
|||
|
|
|
|||
|
|
for row in result.fetchall():
|
|||
|
|
status = "🟢 启用" if row[4] else "🔴 禁用"
|
|||
|
|
job_type_display = "内置任务" if row[2] == 'predefined' else "自定义代码"
|
|||
|
|
print(f" {status} ID {row[0]}: {row[1]}")
|
|||
|
|
print(f" 类型: {job_type_display} | 函数: {row[3]} | CRON: {row[5]}")
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
asyncio.run(update_jobs())
|