def evalaute_script_cron_triggers(tick, interval): second = tick * interval / 1000 for script in session.query(ScriptModel).all(): s = Script(script.uid) if script.enabled: for trigger in script.triggers: if trigger["type"] == "cron": # Evaluate cron expression try: cron = cronex.CronExpression( trigger["options"]["expression"]) time = tuple(list(datetime.now().timetuple())[:5]) if cron.check_trigger(time): # Execute script in seperate thread, such that the loop is not affected dispatch_task( "execute_script", {"script_uid": script.uid}, task_priority="NOW", ) except (ValueError): logger.error("CRON expression yielded error: {}", trigger["options"]["expression"])
def post(self, uid): """Create new script. This is a slow function.""" parser = reqparse.RequestParser() parser.add_argument("name") args = parser.parse_args() dispatch_task("create_script", {"name": args["name"]}, "NOW") return {"uid": for_uid(args["name"])}, 200
def run(arguments, event): for script in get_all_scripts(): for trigger in script["triggers"]: if trigger["type"] == "on_startup": dispatch_task( "execute_script", {"script_uid": script["uid"]}, task_priority="NOW", ) return
def main(): """Start main loop.""" logger.info("Starting main loop") starttime = time.time() i = 1 dispatch_task("trigger_on_startup") dispatch_task("create_default_settings") while IS_RUNNING: # execute_next_task() interval_trigger.tick() # Sleep for exactly one second, taking drift and execution time into account time.sleep(1 - ((time.time() - starttime) % 1)) i += 1 logger.info("Exiting main loop")
def evalaute_script_interval_triggers(tick, interval): second = tick * interval / 1000 for script in session.query(ScriptModel).all(): s = Script(script.uid) if script.enabled: for trigger in script.triggers: if trigger["type"] == "interval": if second % int(trigger["options"]["interval"]) == 0: dispatch_task( "execute_script", {"script_uid": script.uid}, task_priority="NOW", ) # Check that the script is enabled to run and that the interval is above 0 """if script.interval != 0 and script.enabled:
def delete(self): """Delete script.""" dispatch_task("delete_script", {"uid": self.uid}, task_priority="NOW")
def execute(self): dispatch_task("execute_script", {"script_uid": self.uid}, task_priority="NOW")
def install_requirements(self): """Install requirements.txt""" dispatch_task("install_pip_requirements", {"script_uid": self.uid}, task_priority="NOW")
def prune_script_logs(): dispatch_task("prune_logs", {})