示例#1
0
 def __init__(self, parallel_server=None, server_id=None, scheduler=None,
              broker_client=None, initial_sleep_time=None, is_cluster_wide=False):
     self.parallel_server = parallel_server
     self.server_id = server_id
     self.scheduler = scheduler or Scheduler(self)
     self.broker_client = broker_client
     self.initial_sleep_time = initial_sleep_time
     self.is_cluster_wide = is_cluster_wide
     self.logger = logging.getLogger('zato_singleton')
示例#2
0
 def scheduler(self):
     return Scheduler()
示例#3
0
    def test_on_job_executed(self):

        job_types = SCHEDULER.JOB_TYPE.CRON_STYLE, SCHEDULER.JOB_TYPE.INTERVAL_BASED, SCHEDULER.JOB_TYPE.ONE_TIME
        extra_data_format = rand_string()
        name = rand_string()
        service = rand_string()
        extra = rand_string()
        cid = new_cid()
        id = rand_string()

        for _extra_data_format in (ZATO_NONE, extra_data_format):
            for job_type in job_types:
                for _name in (name, ENSURE_SINGLETON_JOB):

                    cb_kwargs = {
                        'service': service,
                        'extra': extra,
                    }

                    ctx = {
                        'name': _name,
                        'cb_kwargs': cb_kwargs,
                        'cid': cid,
                        'type': job_type,
                        'id': id,
                    }

                    async_msgs = []
                    publish_msgs = []

                    class _BrokerClient:
                        def invoke_async(self, msg):
                            async_msgs.append(msg)

                        def publish(self, msg):
                            publish_msgs.append(msg)

                    class _Singleton:
                        broker_client = _BrokerClient()

                    sched = Scheduler(_Singleton(), init=False)

                    sched.on_job_executed(ctx, _extra_data_format)

                    def check_publish_msg(msg):
                        self.assertEquals(msg['action'], SERVICE.PUBLISH.value)
                        self.assertEquals(
                            msg['service'],
                            'zato.scheduler.job.set-active-status')
                        self.assertEquals(msg['payload']['id'], id)
                        self.assertEquals(msg['payload']['is_active'], False)
                        self.assertEquals(len(msg['cid']), CID_LENGTH + 1)
                        self.assertEquals(msg['channel'],
                                          CHANNEL.SCHEDULER_AFTER_ONE_TIME)
                        self.assertEquals(msg['data_format'], DATA_FORMAT.JSON)

                    def check_async_msg(msg):

                        if msg['action'] == SCHEDULER_MSG.JOB_EXECUTED.value:
                            self.assertEquals(msg['service'], service)
                            self.assertEquals(msg['payload'], extra)
                            self.assertEquals(len(msg['cid']), CID_LENGTH + 1)

                    if _name == ENSURE_SINGLETON_JOB:
                        self.assertEquals(len(async_msgs), 0)

                        if job_type == SCHEDULER.JOB_TYPE.ONE_TIME:
                            self.assertEquals(len(async_msgs), 0)
                            self.assertEquals(len(publish_msgs), 2)
                            check_publish_msg(publish_msgs[1])

                        else:
                            self.assertEquals(len(async_msgs), 0)
                            self.assertEquals(len(publish_msgs), 1)

                        ensure_msg = publish_msgs[0]

                    else:
                        self.assertEquals(len(async_msgs), 1)
                        check_async_msg(async_msgs[0])

                        if job_type == SCHEDULER.JOB_TYPE.ONE_TIME:
                            self.assertEquals(len(publish_msgs), 1)
                            check_publish_msg(publish_msgs[0])
                        else:
                            self.assertEquals(len(publish_msgs), 0)
示例#4
0
    def test_on_job_executed(self):

        job_types = SCHEDULER.JOB_TYPE.CRON_STYLE, SCHEDULER.JOB_TYPE.INTERVAL_BASED, SCHEDULER.JOB_TYPE.ONE_TIME
        extra_data_format = rand_string()
        name = rand_string()
        service = rand_string()
        extra = rand_string()
        cid = new_cid()
        id = rand_string()

        for _extra_data_format in (ZATO_NONE, extra_data_format):
            for job_type in job_types:
                for _name in (name, ENSURE_SINGLETON_JOB):

                    cb_kwargs = {
                        'service': service,
                        'extra': extra,
                    }

                    ctx = {
                        'name': _name,
                        'cb_kwargs': cb_kwargs,
                        'cid': cid,
                        'type': job_type,
                        'id': id,
                    }

                    async_msgs = []
                    publish_msgs = []

                    class _BrokerClient:

                        def invoke_async(self, msg):
                            async_msgs.append(msg)

                        def publish(self, msg):
                            publish_msgs.append(msg)

                    class _Singleton:
                        broker_client = _BrokerClient()

                    sched = Scheduler(_Singleton(), init=False)

                    sched.on_job_executed(ctx, _extra_data_format)

                    def check_publish_msg(msg):
                        self.assertEquals(msg['action'], SERVICE.PUBLISH.value)
                        self.assertEquals(msg['service'], 'zato.scheduler.job.set-active-status')
                        self.assertEquals(msg['payload']['id'], id)
                        self.assertEquals(msg['payload']['is_active'], False)
                        self.assertEquals(len(msg['cid']), CID_LENGTH+1)
                        self.assertEquals(msg['channel'], CHANNEL.SCHEDULER_AFTER_ONE_TIME)
                        self.assertEquals(msg['data_format'], DATA_FORMAT.JSON)

                    def check_async_msg(msg):

                        if msg['action'] == SCHEDULER_MSG.JOB_EXECUTED.value:
                            self.assertEquals(msg['service'], service)
                            self.assertEquals(msg['payload'], extra)
                            self.assertEquals(len(msg['cid']), CID_LENGTH+1)

                    if _name == ENSURE_SINGLETON_JOB:
                        self.assertEquals(len(async_msgs), 0)

                        if job_type == SCHEDULER.JOB_TYPE.ONE_TIME:
                            self.assertEquals(len(async_msgs), 0)
                            self.assertEquals(len(publish_msgs), 2)
                            check_publish_msg(publish_msgs[1])

                        else:
                            self.assertEquals(len(async_msgs), 0)
                            self.assertEquals(len(publish_msgs), 1)

                        ensure_msg = publish_msgs[0]

                    else:
                        self.assertEquals(len(async_msgs), 1)
                        check_async_msg(async_msgs[0])

                        if job_type == SCHEDULER.JOB_TYPE.ONE_TIME:
                            self.assertEquals(len(publish_msgs), 1)
                            check_publish_msg(publish_msgs[0])
                        else:
                            self.assertEquals(len(publish_msgs), 0)
示例#5
0
    def test_on_job_executed(self):

        job_types = SCHEDULER.JOB_TYPE.CRON_STYLE, SCHEDULER.JOB_TYPE.INTERVAL_BASED, SCHEDULER.JOB_TYPE.ONE_TIME
        extra_data_format = rand_string()
        name = rand_string()
        service = rand_string()
        extra = rand_string()
        cid = new_cid()
        id = rand_string()

        for _extra_data_format in (ZATO_NONE, extra_data_format):
            for job_type in job_types:
                for _name in (name, ENSURE_SINGLETON_JOB):

                    cb_kwargs = {"service": service, "extra": extra}

                    ctx = {"name": _name, "cb_kwargs": cb_kwargs, "cid": cid, "type": job_type, "id": id}

                    async_msgs = []
                    publish_msgs = []

                    class _BrokerClient:
                        def invoke_async(self, msg):
                            async_msgs.append(msg)

                        def publish(self, msg):
                            publish_msgs.append(msg)

                    class _Singleton:
                        broker_client = _BrokerClient()

                    sched = Scheduler(_Singleton(), init=False)

                    sched.on_job_executed(ctx, _extra_data_format)

                    def check_publish_msg(msg):
                        self.assertEquals(msg["action"], SERVICE.PUBLISH.value)
                        self.assertEquals(msg["service"], "zato.scheduler.job.set-active-status")
                        self.assertEquals(msg["payload"]["id"], id)
                        self.assertEquals(msg["payload"]["is_active"], False)
                        self.assertEquals(len(msg["cid"]), CID_LENGTH)
                        self.assertEquals(msg["channel"], CHANNEL.SCHEDULER_AFTER_ONE_TIME)
                        self.assertEquals(msg["data_format"], DATA_FORMAT.JSON)

                    def check_async_msg(msg):

                        if msg["action"] == SCHEDULER_MSG.JOB_EXECUTED.value:
                            self.assertEquals(msg["service"], service)
                            self.assertEquals(msg["payload"], extra)
                            self.assertEquals(len(msg["cid"]), CID_LENGTH)

                    if _name == ENSURE_SINGLETON_JOB:
                        self.assertEquals(len(async_msgs), 0)

                        if job_type == SCHEDULER.JOB_TYPE.ONE_TIME:
                            self.assertEquals(len(async_msgs), 0)
                            self.assertEquals(len(publish_msgs), 2)
                            check_publish_msg(publish_msgs[1])

                        else:
                            self.assertEquals(len(async_msgs), 0)
                            self.assertEquals(len(publish_msgs), 1)

                    else:
                        self.assertEquals(len(async_msgs), 1)
                        check_async_msg(async_msgs[0])

                        if job_type == SCHEDULER.JOB_TYPE.ONE_TIME:
                            self.assertEquals(len(publish_msgs), 1)
                            check_publish_msg(publish_msgs[0])
                        else:
                            self.assertEquals(len(publish_msgs), 0)