Execute the engine - currently simple executes all workflows.

def execute(self, debug=False):
        """
        Execute the engine - currently simple executes all workflows.
        """

        if debug:
            # Set some default times for execution (debugging)
            start_time = datetime(year=2016, month=10, day=19, hour=12, minute=28, tzinfo=UTC)
            duration = timedelta(seconds=5)
            end_time = start_time + duration

            relative_interval = RelativeTimeInterval(0, 0)
            time_interval = TimeInterval(start_time, end_time)
            # workflow_id = "lda_localisation_model_predict"
        else:
            duration = 0  # not needed
            relative_interval = self.hyperstream.config.online_engine.interval
            time_interval = relative_interval.absolute(utcnow())

        for _ in range(self.hyperstream.config.online_engine.iterations):
            if not debug:
                # if this takes more than x minutes, kill myself
                signal.alarm(self.hyperstream.config.online_engine.alarm)

            logging.info("Online engine starting up.")

            # self.hyperstream.workflow_manager.set_requested_intervals(workflow_id, TimeIntervals([time_interval]))
            self.hyperstream.workflow_manager.set_all_requested_intervals(TimeIntervals([time_interval]))
            self.hyperstream.workflow_manager.execute_all()

            logging.info("Online engine shutting down.")
            logging.info("")

            sleep(self.hyperstream.config.online_engine.sleep)

            if debug:
                time_interval += duration
            else:
                time_interval = TimeInterval(time_interval.end, utcnow() + timedelta(seconds=relative_interval.end))