diff options
Diffstat (limited to 'qpid/python/examples/reservations/inventory')
-rwxr-xr-x | qpid/python/examples/reservations/inventory | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/qpid/python/examples/reservations/inventory b/qpid/python/examples/reservations/inventory new file mode 100755 index 0000000000..10c2034efc --- /dev/null +++ b/qpid/python/examples/reservations/inventory @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +import optparse, traceback +from qpid.messaging import * +from qpid.util import URL +from qpid.log import enable, DEBUG, WARN +from common import * + +parser = optparse.OptionParser(usage="usage: %prog [options]", + description="machine inventory agent") +parser.add_option("-b", "--broker", default="localhost", + help="connect to specified BROKER (default %default)") +parser.add_option("-d", "--database", + help="database file for persistent machine status") +parser.add_option("-a", "--address", default="reservations", + help="address for reservation requests") +parser.add_option("-v", dest="verbose", action="store_true", + help="enable verbose logging") + +opts, args = parser.parse_args() + +if opts.verbose: + enable("qpid", DEBUG) +else: + enable("qpid", WARN) + +url = URL(opts.broker) +conn = Connection.open(url.host, url.port or AMQP_PORT, + username=url.user, password=url.password, + reconnect=True, + reconnect_delay=1) + +class Inventory(Dispatcher): + + def __init__(self): + self.agents = {} + + def running(self): + return True + + def do_status(self, msg): + id, status, owner = get_status(msg) + self.agents[id] = (status, owner) + + def do_query(self, msg): + patterns = msg.content["identity"] + result = [] + for id, (status, owner) in self.agents.items(): + if match(id, patterns): + r = Message(to = msg.reply_to, + properties = { + "type": "status" + }, + content = { + "identity": id, + "status": status, + "owner": owner + }) + result.append(r) + continue + if not result: + result.append(Message(to = msg.reply_to, + properties = {"type": "empty"})) + return result + + def ignored(self, msg): + type = msg.properties.get("type") + return type not in ("status", "query") + +try: + ssn = conn.session() + rcv = ssn.receiver(opts.address, capacity = 10) + snd = ssn.sender(opts.address) + snd.send(Message(reply_to = opts.address, + properties = {"type": "discover", "identity": ["*"]})) + + inv = Inventory() + inv.run(ssn) +except KeyboardInterrupt: + pass +finally: + conn.close() |