def sendMessage(self, msg): """ Traite un message en l'envoyant sur le bus. @param msg: message à traiter @type msg: C{str} ou C{dict} @return: le C{Deferred} avec la réponse, ou C{None} si cela n'a pas lieu d'être (message envoyé en push) """ self._messages_sent += 1 if isinstance(msg, basestring): msg = json.loads(msg) try: if isinstance(msg["timestamp"], datetime): msg["timestamp"] = time.mktime(msg["timestamp"].timetuple()) except (KeyError, TypeError): pass # accumulation des messages de perf msg = self._accumulate_perf_msgs(msg) if msg is None: return defer.succeed(None) msg_text = json.dumps(msg) msg_type = msg["type"] exchange = msg_type ttl = None if msg_type in self._publications: exchange, ttl = self._publications[msg_type] routing_key = msg.get("routing_key", msg_type) persistent = msg.get("persistent", True) result = self.client.send(exchange, str(routing_key), msg_text, persistent, content_type="application/json", ttl=ttl) return result
def _saveToDb(self): """Sauvegarde tous les messages de la file dans la base de backup.""" def eb(f): LOGGER.error(_("Error trying to save a message to the backup " "database: %s"), get_error_message(f.value)) saved = [] while len(self.queue) > 0: msg = self.queue.popleft() d = self.retry.put(json.dumps(msg)) d.addErrback(eb) saved.append(d) return defer.gatherResults(saved)
def test_begin_with_backup(self): """ Les messages sauvegardés doivent être prioritaires sur les messages temps-réel """ msg1 = {"type": "perf", "value": "1"} msg2 = {"type": "perf", "value": "2"} yield self.bp.retry.put(json.dumps(msg1)) self.bp.queue.append(msg2) #yield self.bp.processQueue() # On attend un peu #yield wait(0.5) for msg in [msg1, msg2]: next_msg = yield self.bp._getNextMsg() self.assertEqual(next_msg, msg)
def get_from_buffer_in(): while len(self.buffer_in) > 0: msg = self.buffer_in.popleft() if isinstance(msg, dict): msg = json.dumps(msg) yield (msg,)