示例#1
0
    def __init__(self):
        XqaMessagingHandler.__init__(self)
        MessagingHandler.__init__(self)

        logging.info(self.__class__.__name__)
        self._stopping = False

        self._cmd_test_size_queue = 'queue://xqa.test.size'
        self._size_test_response_received = False
        self._cmd_test_xquery_queue = 'queue://xqa.test.xquery'
        self._xquery_test_response_received = False

        self._test_xquery_correlation_id = None
示例#2
0
    def on_start(self, event):
        message_broker_url = 'amqp://%s:%s@%s:%s/' % (
            configuration.message_broker_user,
            configuration.message_broker_password,
            configuration.message_broker_host,
            configuration.message_broker_port_amqp)
        connection = event.container.connect(
            message_broker_url, reconnect=XqaMessagingHandler.XqaBackoff())
        self.container = event.reactor

        self.size_receiver = event.container.create_receiver(
            connection, configuration.message_broker_shard_size_topic)
        self.size_sender = event.container.create_sender(connection, None)

        self.insert_uuid_receiver = event.container.create_receiver(
            connection, self._insert_uuid)

        self.xquery_receiver = event.container.create_receiver(
            connection, configuration.message_broker_shard_xquery_topic)
        self.xquery_sender = event.container.create_sender(connection, None)

        self.cmd_stop_receiver = event.container.create_receiver(
            connection, configuration.message_broker_cmd_stop_topic)

        self.insert_event_sender = event.container.create_sender(
            connection,
            configuration.message_broker_db_amqp_insert_event_queue)

        logging.debug('receivers up')
示例#3
0
 def _cmd_test_xquery(self):
     self._test_xquery_correlation_id = str(uuid4())
     message = Message(
         address=self._cmd_test_xquery_queue,
         correlation_id=self._test_xquery_correlation_id,
         creation_time=XqaMessagingHandler.now_timestamp_seconds())
     self.cmd_test_xquery_sender.send(message)
示例#4
0
    def _insert(self, event):
        logging.info(
            '%s creation_time=%s; correlation_id=%s; address=%s; reply_to=%s; expiry_time=%s, body=%s',
            ">", event.message.creation_time, event.message.correlation_id,
            event.message.address, event.message.reply_to,
            event.message.expiry_time, event.message.body)

        message = Message(
            address=event.message.reply_to,
            correlation_id=event.message.correlation_id,
            creation_time=XqaMessagingHandler.now_timestamp_seconds(),
            subject='a/b/c.xml',
            body=
            '<copyrightStatement>© Bodleian Libraries, University of Oxford</copyrightStatement>'
            .encode('UTF-8'))

        logging.info(
            '%s creation_time=%s; correlation_id=%s; address=%s; reply_to=%s; subject=%s; expiry_time=%s; digest(body)=%s',
            "<", message.creation_time, message.correlation_id,
            message.address, message.reply_to, message.subject,
            message.expiry_time,
            hashlib.sha256(message.body).hexdigest())

        self.shard_size_sender.send(message)

        self._size_test_response_received = True
示例#5
0
    def __init__(self):
        XqaMessagingHandler.__init__(self)
        MessagingHandler.__init__(self)
        self._stopping = False
        self._uuid = str(uuid4()).split('-')[0]
        self._service_id = '%s/%s' % (self.__class__.__name__.lower(),
                                      self._uuid)
        self._insert_uuid = '%s.%s' % (
            configuration.message_broker_shard_insert_uuid_queue, self._uuid)

        logging.info(self._service_id)
        logging.debug('-message_broker_host=%s' %
                      configuration.message_broker_host)
        logging.debug('-configuration.storage_mainmem=%s' %
                      configuration.storage_mainmem)

        self._storage_service = StorageService()
示例#6
0
    def _send_cmd_stop(self):
        message = Message(
            address=configuration.message_broker_cmd_stop_topic,
            correlation_id=str(uuid4()),
            creation_time=XqaMessagingHandler.now_timestamp_seconds())

        logging.info(
            '%s creation_time=%s; correlation_id=%s; address=%s; reply_to=%s; expiry_time=%s',
            "<", message.creation_time, message.correlation_id,
            message.address, message.reply_to, message.expiry_time)

        self.cmd_stop_sender.send(message)
示例#7
0
    def _size(self, event):
        message = Message(
            address=configuration.message_broker_shard_size_topic,
            correlation_id=event.message.correlation_id,
            creation_time=XqaMessagingHandler.now_timestamp_seconds(),
            reply_to=self.shard_size_receiver.remote_source.address)

        self.shard_size_sender.send(message)

        logging.info(
            '%s creation_time=%s; correlation_id=%s; address=%s; reply_to=%s; expiry_time=%s; body=%s',
            "<", message.creation_time, message.correlation_id,
            message.address, message.reply_to, message.expiry_time,
            message.body)
示例#8
0
    def _xquery(self, event):
        logging.info(
            '%s creation_time=%s; correlation_id=%s; address=%s; reply_to=%s; body=%s',
            '>', event.message.creation_time, event.message.correlation_id,
            event.message.address, event.message.reply_to, event.message.body)

        message = Message(
            address=event.message.reply_to,
            correlation_id=event.message.correlation_id,
            creation_time=XqaMessagingHandler.now_timestamp_seconds(),
            body=(self.xquery_body(event)))

        logging.info(
            '%s creation_time=%s; correlation_id=%s; address=%s; reply_to=%s; body=%s',
            '<', message.creation_time, message.correlation_id,
            message.address, message.reply_to, message.body)

        self.xquery_sender.send(message)
示例#9
0
    def _insert_event(self, message, state):
        creation_time = XqaMessagingHandler.now_timestamp_seconds()

        insert_event = """{ "serviceId": "%s", "creationTime": %s, "correlationId": "%s", "digest": "%s", "storage_size": "%s" , "state": "%s" }""" % \
                       (self._service_id,
                        Shard.standardise_creation_time_with_other_services(creation_time),
                        message.correlation_id,
                        hashlib.sha256(message.body).hexdigest(),
                        self._storage_service.storage_size(),
                        state)

        message = Message(
            address=configuration.message_broker_db_amqp_insert_event_queue,
            correlation_id=str(uuid4()),
            creation_time=creation_time,
            body=insert_event.encode('utf-8'))

        self.insert_event_sender.send(message)
示例#10
0
    def _size(self, event):
        logging.info(
            '%s creation_time=%s; correlation_id=%s; address=%s; reply_to=%s',
            '>', event.message.creation_time, event.message.correlation_id,
            event.message.address, event.message.reply_to)

        message = Message(
            address=event.message.reply_to,
            correlation_id=event.message.correlation_id,
            reply_to=self._insert_uuid,
            creation_time=XqaMessagingHandler.now_timestamp_seconds(),
            body=self._storage_service.storage_size())

        logging.info(
            '%s creation_time=%s; correlation_id=%s; address=%s; reply_to=%s; body=%s',
            '<', message.creation_time, message.correlation_id,
            message.address, message.reply_to, message.body)

        self.size_sender.send(message)
示例#11
0
 def _cmd_test_size(self):
     message = Message(
         address=self._cmd_test_size_queue,
         correlation_id=str(uuid4()),
         creation_time=XqaMessagingHandler.now_timestamp_seconds())
     self.cmd_test_size_sender.send(message)