Esempio n. 1
0
    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
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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,)