summaryrefslogtreecommitdiff
path: root/qpid/python/examples/reservations/inventory
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/python/examples/reservations/inventory')
-rwxr-xr-xqpid/python/examples/reservations/inventory100
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()