Ejemplo n.º 1
0
class BusManager:
    def __init__(self):
        pass

    def SetHost(self, host, router):
        self.M = Messenger()
        self.M.start()
        self.M.timeout = 3
        self.M.route("amqp:/*", "amqp://%s/$1" % host)
        if router:
            self.address = "amqp:/_topo/0/%s/$management" % router
        else:
            self.address = "amqp:/_local/$management"
        self.subscription = self.M.subscribe("amqp:/#")
        self.reply = self.subscription.address

    def Disconnect(self):
        self.M.stop()

    def GetObject(self, cls):
        request = Message()
        response = Message()

        request.address = self.address
        request.reply_to = self.reply
        request.correlation_id = 1
        request.properties = {u'operation':u'GET', u'type':cls}
        request.body = {'attributeNames': []}

        self.M.put(request)
        self.M.send()
        self.M.recv()
        self.M.get(response)

        if response.properties['status-code'] != 200:
            raise Exception("Agent reports: %d %s" % (response.properties['status-code'], response.properties['status-description']))

        entities = []
        results = response.body
        for e in results:
            entities.append(AmqpEntity(e))

        return entities
    def _do_dump(self, args=None):

        if not (self.issuer and self.key and self.namespace and self.queuename):
            print "Service bus is not configured"
            return
            
        messenger = Messenger()

        address_syntax = "amqps://{issuer}:{key}@{namespace}.servicebus.windows.net/{queuename}"
        address = address_syntax.format(issuer = self.issuer,
                                        key = urllib.quote(self.key, ""),
                                        namespace = self.namespace,
                                        queuename = self.queuename)
        censored_address = address_syntax.format(issuer = self.issuer,
                                                 key = "XXX",
                                                 namespace = self.namespace,
                                                 queuename = self.queuename)

        print "Subscribing to %s" % censored_address
        messenger.subscribe(address)

        # https://github.com/Azure/azure-service-bus-samples/blob/master/proton-c-queues-and-topics/receiver.c
        messenger.incoming_window = 10

        messenger.start()
        while True:
            messenger.recv()
            while messenger.incoming:
                message = Message()
                tracker = messenger.get(message)
                if args == "verbose":
                    print "-" * 32
                    pprint.pprint(message.address)
                    pprint.pprint(message.delivery_count)
                    pprint.pprint(message.annotations)
                    pprint.pprint(message.properties)
                    pprint.pprint(message.body)
                else:
                    print message.delivery_count, message.properties
                messenger.accept(tracker)
        messenger.stop()