first draft on cron module
This commit is contained in:
parent
ff050b3583
commit
60db9ff389
1 changed files with 37 additions and 0 deletions
37
src/core_modules/cron.py
Normal file
37
src/core_modules/cron.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
import datetime, time
|
||||||
|
from src import ModuleManager, utils
|
||||||
|
|
||||||
|
class Module(ModuleManager.BaseModule):
|
||||||
|
def on_load(self):
|
||||||
|
now = datetime.datetime.utcnow()
|
||||||
|
next_minute = now.replace(minute=now.minute+1, second=0, microsecond=0)
|
||||||
|
until = time.time()+(next_minute-now).total_seconds()
|
||||||
|
self.timers.add("cron", self._minute, 60, until)
|
||||||
|
|
||||||
|
def _minute(self, timer):
|
||||||
|
now = datetime.datetime.utcnow().replace(second=0, microsecond=0)
|
||||||
|
timer.redo()
|
||||||
|
|
||||||
|
current_schedule = [now.minute, now.hour]
|
||||||
|
|
||||||
|
events = self.events.on("cron")
|
||||||
|
for cron in events.get_hooks():
|
||||||
|
schedule = cron.get_kwarg("schedule").split(" ")
|
||||||
|
|
||||||
|
due = True
|
||||||
|
for i, schedule_part in enumerate(schedule):
|
||||||
|
current_part = current_schedule[i]
|
||||||
|
if schedule_part.startswith("*/"):
|
||||||
|
schedule_step = int(schedule_part.split("*/", 1)[1])
|
||||||
|
if (current_part%schedule_step) == 0:
|
||||||
|
continue
|
||||||
|
elif schedule_part == "*":
|
||||||
|
continue
|
||||||
|
elif int(current_part) == schedule_part:
|
||||||
|
continue
|
||||||
|
|
||||||
|
due = False
|
||||||
|
break
|
||||||
|
|
||||||
|
if due:
|
||||||
|
cron.call(events.make_event())
|
Loading…
Reference in a new issue