예제 #1
0
    def bootstrap(self):
        log.info("Running trigger loop")
        self.connection = yield from asyncio_redis.Pool.create(
            host='localhost',
            port=6379,
            encoder=asyncio_redis.encoders.BytesEncoder(),
            poolsize=3)
        self.tq_storage = TaskStorage(self.current_loop, self.connection)

        # Setup subscription to action results
        self.subscription = yield from self.connection.start_subscribe()
        yield from self.subscription.psubscribe(
            [SETTINGS.METRICS_CHANNEL.format('*').encode('utf-8')])
예제 #2
0
 def test_lock_trigger(self):
     connection = yield from asyncio_redis.Pool.create(
         host='localhost',
         port=6379,
         db=2,
         encoder=asyncio_redis.encoders.BytesEncoder(),
         poolsize=3)
     yield from connection.flushdb()
     tq_storage = TaskStorage(self.loop, connection)
     value = yield from tq_storage.lock_trigger('T1')
     self.assertEquals(value, 1)
     value = yield from tq_storage.lock_trigger('T1')
     self.assertEquals(value, 2)
     value = yield from tq_storage.lock_trigger('T1')
     self.assertEquals(value, 3)
예제 #3
0
    def bootstrap(self):
        log.info("Running scheduler loop")
        self.connection = yield from asyncio_redis.Pool.create(
            host='localhost',
            port=6379,
            encoder=asyncio_redis.encoders.BytesEncoder(),
            poolsize=5)

        self.tq_storage = TaskStorage(self.current_loop, self.connection)

        # Update objects in storage
        self.install_bootstrap()

        # Initialize worker-scheduler feedback subscription
        self.subscription = yield from self.connection.start_subscribe()
        yield from self.subscription.subscribe(
            [SETTINGS.WORKER_TO_SCHEDULER_CHANNEL])
        self.sleep_task = asyncio.Task(self.sleep())

        # Run scheduled history cleanup
        yield from self._cleanup_scheduled_history()
예제 #4
0
    def test_unlock_trigger(self):
        connection = yield from asyncio_redis.Pool.create(
            host='localhost',
            port=6379,
            db=2,
            encoder=asyncio_redis.encoders.BytesEncoder(),
            poolsize=3)
        yield from connection.flushdb()
        tq_storage = TaskStorage(self.loop, connection)
        value = yield from tq_storage.lock_trigger('T2')
        value = yield from tq_storage.lock_trigger('T2')
        value = yield from tq_storage.lock_trigger('T2')
        self.assertEquals(value, 3)

        yield from tq_storage.unlock_trigger('T2')
        value = yield from connection.hget(SETTINGS.TRIGGER_STATES,
                                           'T2'.encode('utf-8'))
        self.assertEquals(value, b'0')

        value = yield from tq_storage.lock_trigger('T2')
        self.assertEquals(value, 1)
예제 #5
0
    def test_get_metric_last_values(self):
        connection = yield from asyncio_redis.Pool.create(
            host='localhost',
            port=6379,
            db=2,
            encoder=asyncio_redis.encoders.BytesEncoder(),
            poolsize=3)
        yield from connection.flushdb()
        tq_storage = TaskStorage(self.loop, connection)

        yield from connection.hset(
            SETTINGS.LAST_VALUES_HASH, 'M1'.encode('utf-8'),
            ujson.dumps({
                'value': 36.6,
                'timestamp': 1
            }).encode('utf-8'))
        values = yield from tq_storage.get_metric_last_values(['M1'])
        self.assertDictEqual(values, {'M1': 36.6})

        yield from connection.hset(
            SETTINGS.LAST_VALUES_HASH, 'M2'.encode('utf-8'),
            ujson.dumps({
                'value': True,
                'timestamp': 2
            }).encode('utf-8'))
        values = yield from tq_storage.get_metric_last_values(['M1', 'M2'])
        self.assertDictEqual(values, {'M1': 36.6, 'M2': True})

        yield from connection.hset(SETTINGS.LAST_VALUES_HASH,
                                   'M3'.encode('utf-8'),
                                   'wrong bytes'.encode('utf-8'))
        values = yield from tq_storage.get_metric_last_values(
            ['M1', 'M2', 'M3'])
        self.assertDictEqual(values, {'M1': 36.6, 'M2': True, 'M3': None})

        values = yield from tq_storage.get_metric_last_values(
            ['X1', 'M2', 'X3'])
        self.assertDictEqual(values, {'X1': None, 'M2': True, 'X3': None})