コード例 #1
0
ファイル: actionrun.py プロジェクト: zhengpingwan/Tron
    def emit_triggers(self):
        triggers = self.triggers_to_emit()
        if not triggers:
            return

        log.info(f"{self} publishing triggers: [{', '.join(triggers)}]")
        job_id = '.'.join(self.job_run_id.split('.')[:-1])
        for trigger in triggers:
            EventBus.publish(f"{job_id}.{self.action_name}.{trigger}")
コード例 #2
0
ファイル: actionrun.py プロジェクト: pombredanne/Tron
    def emit_triggers(self):
        triggers = self.triggers_to_emit()
        if not triggers:
            return

        log.info(f"{self} publishing triggers: [{', '.join(triggers)}]")
        job_id = '.'.join(self.job_run_id.split('.')[:-1])
        for trigger in triggers:
            EventBus.publish(f"{job_id}.{self.action_name}.{trigger}")
コード例 #3
0
ファイル: actionrun.py プロジェクト: dennistu1994/Tron
 def _done(self, target, exit_status=0):
     if self.machine.check(target):
         if self.triggered_by:
             EventBus.clear_subscriptions(self.__hash__())
         self.exit_status = exit_status
         self.end_time = timeutils.current_time()
         log.info(f"{self} completed with {target}, transitioned to "
                  f"{self.state}, exit status: {exit_status}")
         return self.transition_and_notify(target)
     else:
         log.debug(
             f"{self} cannot transition from {self.state} via {target}")
コード例 #4
0
    def publish(self, event):
        if not EventBus.instance:
            return dict(error='EventBus disabled')

        if EventBus.has_event(event):
            msg = f"event {event} already published"
            log.warning(msg)
            return dict(response=msg)

        if not EventBus.publish(event):
            msg = f'could not publish {event}'
            log.error(msg)
            return dict(error=msg)

        return dict(response='OK')
コード例 #5
0
ファイル: actionrun.py プロジェクト: zhengpingwan/Tron
    def setup_subscriptions(self):
        remaining_triggers = self.remaining_triggers
        if not remaining_triggers:
            return

        if self.trigger_timeout_timestamp:
            now = timeutils.current_time().timestamp()
            delay = max(self.trigger_timeout_timestamp - now, 1)
            self.trigger_timeout_call = reactor.callLater(
                delay, self.trigger_timeout_reached)
        else:
            log.error(f"{self} has no trigger_timeout_timestamp")

        for trigger in remaining_triggers:
            EventBus.subscribe(trigger, self.__hash__(), self.trigger_notify)
コード例 #6
0
ファイル: controller.py プロジェクト: Yelp/Tron
    def publish(self, event):
        if not EventBus.instance:
            return dict(error='EventBus disabled')

        if EventBus.has_event(event):
            msg = f"event {event} already published"
            log.warning(msg)
            return dict(response=msg)

        if not EventBus.publish(event):
            msg = f'could not publish {event}'
            log.error(msg)
            return dict(error=msg)

        return dict(response='OK')
コード例 #7
0
    def test_setup_eventbus_dir(self, time):
        os.rmdir(self.logdir.name)

        time.time = mock.Mock(return_value=1.0)
        eb = EventBus.create(self.logdir.name)
        assert os.path.exists(self.logdir.name)
        assert os.path.exists(os.path.join(self.logdir.name, "current"))

        time.time = mock.Mock(return_value=2.0)
        eb.event_log = {'foo': 'bar'}
        eb.sync_save_log("test")

        new_eb = EventBus.create(self.logdir.name)
        new_eb.sync_load_log()
        assert new_eb.event_log == eb.event_log
コード例 #8
0
ファイル: actionrun.py プロジェクト: pombredanne/Tron
    def setup_subscriptions(self):
        remaining_triggers = self.remaining_triggers
        if not remaining_triggers:
            return

        if self.trigger_timeout_timestamp:
            now = timeutils.current_time().timestamp()
            delay = max(self.trigger_timeout_timestamp - now, 1)
            self.trigger_timeout_call = reactor.callLater(
                delay, self.trigger_timeout_reached
            )
        else:
            log.error(f"{self} has no trigger_timeout_timestamp")

        for trigger in remaining_triggers:
            EventBus.subscribe(trigger, self.__hash__(), self.trigger_notify)
コード例 #9
0
ファイル: actionrun.py プロジェクト: pombredanne/Tron
 def _done(self, target, exit_status=0):
     if self.machine.check(target):
         if self.triggered_by:
             EventBus.clear_subscriptions(self.__hash__())
         self.clear_trigger_timeout()
         self.exit_status = exit_status
         self.end_time = timeutils.current_time()
         log.info(
             f"{self} completed with {target}, transitioned to "
             f"{self.state}, exit status: {exit_status}"
         )
         return self.transition_and_notify(target)
     else:
         log.debug(
             f"{self} cannot transition from {self.state} via {target}"
         )
コード例 #10
0
ファイル: actionrun.py プロジェクト: dennistu1994/Tron
    def emit_triggers(self):
        if isinstance(self.trigger_downstreams, bool):
            shortdate = self.render_template("{shortdate}")
            triggers = [f"shortdate.{shortdate}"]
        elif isinstance(self.trigger_downstreams, dict):
            triggers = [
                f"{k}.{self.render_template(v)}"
                for k, v in self.trigger_downstreams.items()
            ]
        else:
            log.error(f"{self} trigger_downstreams must be true or dict")
            return

        log.info(f"{self} publishing triggers: [{', '.join(triggers)}]")
        job_id = '.'.join(self.job_run_id.split('.')[:-1])
        for trigger in triggers:
            EventBus.publish(f"{job_id}.{self.action_name}.{trigger}")
コード例 #11
0
    def discard(self, event):
        if not EventBus.instance:
            return dict(error='EventBus disabled')

        if not EventBus.discard(event):
            msg = f"could not discard {event}"
            log.error(msg)
            return dict(error=msg)

        return dict(response='OK')
コード例 #12
0
ファイル: controller.py プロジェクト: Yelp/Tron
    def discard(self, event):
        if not EventBus.instance:
            return dict(error='EventBus disabled')

        if not EventBus.discard(event):
            msg = f"could not discard {event}"
            log.error(msg)
            return dict(error=msg)

        return dict(response='OK')
コード例 #13
0
ファイル: mcp.py プロジェクト: Yelp/Tron
 def configure_eventbus(self, enabled):
     if enabled:
         if not EventBus.instance:
             EventBus.create(f"{self.working_dir}/_events")
             EventBus.start()
     else:
         EventBus.shutdown()
コード例 #14
0
 def configure_eventbus(self, enabled):
     if enabled:
         if not EventBus.instance:
             EventBus.create(f"{self.working_dir}/_events")
             EventBus.start()
     else:
         EventBus.shutdown()
コード例 #15
0
ファイル: actionrun.py プロジェクト: dennistu1994/Tron
 def remaining_triggers(self):
     return [
         trigger
         for trigger in map(self.render_template, self.triggered_by or [])
         if not EventBus.has_event(trigger)
     ]
コード例 #16
0
ファイル: actionrun.py プロジェクト: pombredanne/Tron
 def cleanup(self):
     self.clear_observers()
     if self.triggered_by:
         EventBus.clear_subscriptions(self.__hash__())
     self.clear_trigger_timeout()
     self.cancel()
コード例 #17
0
ファイル: actionrun.py プロジェクト: pombredanne/Tron
 def remaining_triggers(self):
     return [
         trig for trig in self.rendered_triggers
         if not EventBus.has_event(trig)
     ]
コード例 #18
0
ファイル: mcp.py プロジェクト: Yelp/Tron
 def shutdown(self):
     EventBus.shutdown()
     self.state_watcher.shutdown()
コード例 #19
0
ファイル: actionrun.py プロジェクト: zhengpingwan/Tron
 def remaining_triggers(self):
     return [
         trig for trig in self.rendered_triggers
         if not EventBus.has_event(trig)
     ]
コード例 #20
0
ファイル: actionrun.py プロジェクト: dennistu1994/Tron
 def cleanup(self):
     self.clear_observers()
     if self.triggered_by:
         EventBus.clear_subscriptions(self.__hash__())
     self.cancel()
コード例 #21
0
 def teardown(self):
     EventBus.shutdown()
     self.log_dir.cleanup()
コード例 #22
0
 def setup(self):
     self.log_dir = tempfile.TemporaryDirectory(prefix="tron_eventbus_test")
     self.eventbus = EventBus.create(self.log_dir.name)
     self.eventbus.enabled = True
コード例 #23
0
ファイル: actionrun.py プロジェクト: dennistu1994/Tron
 def setup_subscriptions(self):
     for trigger_pattern in self.triggered_by or []:
         trigger = self.render_template(trigger_pattern)
         EventBus.subscribe(trigger, self.__hash__(), self.trigger_notify)
コード例 #24
0
 def shutdown(self):
     EventBus.shutdown()
     self.state_watcher.shutdown()