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