8
8
from celery .beat import PersistentScheduler
9
9
from apscheduler .schedulers .asyncio import AsyncIOScheduler
10
10
from apscheduler .triggers .interval import IntervalTrigger
11
+ from apscheduler .triggers .cron import CronTrigger
11
12
12
13
from openagent .agent .config import TaskConfig
13
14
@@ -32,24 +33,33 @@ def init_scheduled_tasks(self, tasks_config: dict, task_runner):
32
33
if task_config .schedule .type == "queue" :
33
34
self ._init_celery_task (task_id , task_config , task_runner )
34
35
else :
35
- # Default to local scheduler
36
36
async def task_wrapper (query , delay_variation ):
37
37
if delay_variation > 0 :
38
38
delay = random .uniform (0 , delay_variation )
39
39
logger .debug (f"Task '{ task_id } ' sleeping for { delay } seconds" )
40
40
await asyncio .sleep (delay )
41
41
await task_runner (query )
42
42
43
- self .scheduler .add_job (
44
- func = task_wrapper ,
45
- trigger = IntervalTrigger (seconds = task_config .interval ),
46
- args = [task_config .query , task_config .delay_variation ],
47
- id = task_id ,
48
- name = f"Task_{ task_id } " ,
49
- )
50
- logger .info (
51
- f"Scheduled local task '{ task_id } ' with interval: { task_config .interval } seconds and delay variation: { task_config .delay_variation } seconds"
52
- )
43
+ if task_config .cron :
44
+ self .scheduler .add_job (
45
+ func = task_wrapper ,
46
+ trigger = CronTrigger .from_crontab (task_config .cron ),
47
+ args = [task_config .query , task_config .delay_variation ],
48
+ id = task_id ,
49
+ name = f"Task_{ task_id } " ,
50
+ )
51
+ logger .info (f"Scheduled cron task '{ task_id } ' with cron expression: { task_config .cron } " )
52
+ else :
53
+ self .scheduler .add_job (
54
+ func = task_wrapper ,
55
+ trigger = IntervalTrigger (seconds = task_config .interval ),
56
+ args = [task_config .query , task_config .delay_variation ],
57
+ id = task_id ,
58
+ name = f"Task_{ task_id } " ,
59
+ )
60
+ logger .info (
61
+ f"Scheduled local task '{ task_id } ' with interval: { task_config .interval } seconds and delay variation: { task_config .delay_variation } seconds"
62
+ )
53
63
54
64
# Start the local scheduler if we have any local tasks
55
65
if any (task .schedule .type == "local" for task in tasks_config .values ()):
0 commit comments