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
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')
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)
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
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()
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)
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)
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)
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)
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)
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)