#!/usr/bin/ruby # # 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. # require 'qmf' require 'socket' class App < Qmf::ConsoleHandler def agent_added(agent) puts "AgentAdded: label=#{agent.label} key=#{agent.key}" end def agent_deleted(agent) puts "AgentDeleted: #{agent.label}" end def new_package(package) puts "NewPackage: #{package}" end def new_class(class_key) puts "NewClass: #{class_key}" end def object_update(object, hasProps, hasStats) puts "ObjectUpdate: #{object.object_class.class_name} props=#{hasProps} stats=#{hasStats}" puts " agent-key=#{object.object_id.agent_key}" puts " package=#{object.object_class.package_name}" end def event_received(event); end def agent_heartbeat(agent, timestamp) puts "AgentHeartbeat: #{agent.label} time=#{timestamp/1000000000}" end def method_response(resp); end def broker_info(broker); end def dump_schema packages = @qmfc.packages puts "----- Packages -----" packages.each do |p| puts p puts " ----- Object Classes -----" classes = @qmfc.classes(p) classes.each do |c| puts " #{c.name}" puts " ---- Properties ----" props = c.properties props.each do |prop| puts " #{prop.name}" end puts " ---- Statistics ----" stats = c.statistics stats.each do |stat| puts " #{stat.name}" end puts " ---- Methods ----" methods = c.methods methods.each do |method| puts " #{method.name}" puts " ---- Args ----" args = method.arguments args.each do |arg| puts " #{arg.name}" end end end puts " ----- Event Classes -----" classes = @qmfc.classes(p, Qmf::CLASS_EVENT) classes.each do |c| puts " #{c.name}" puts " ---- Args ----" args = c.arguments args.each do |arg| puts " #{arg.name}" end end end puts "-----" end def main @settings = Qmf::ConnectionSettings.new @settings.host = ARGV[0] if ARGV.size > 0 @settings.port = ARGV[1].to_i if ARGV.size > 1 @connection = Qmf::Connection.new(@settings) @qmfc = Qmf::Console.new(self) @broker = @qmfc.add_connection(@connection) @broker.wait_for_stable ##dump_schema agents = @qmfc.agents() puts "---- Agents ----" agents.each do |a| puts " => #{a.label}" end puts "----" for idx in 0...20 blist = @qmfc.objects(Qmf::Query.new(:class => "broker")) puts "---- Brokers ----" blist.each do |b| puts " ---- Broker ----" puts " systemRef: #{b.systemRef}" puts " port : #{b.port}" puts " uptime : #{b.uptime / 1000000000}" puts " properties : #{b.properties}" puts " statistics : #{b.statistics}" for rep in 0...1 puts " Pinging..." ret = b.echo(45, 'text string') puts " status=#{ret.status} text=#{ret.exception.asString} seq=#{ret.args.sequence} body=#{ret.args.body}" end end puts "----" elist = @qmfc.objects(:package => "org.apache.qpid.broker", :class => "exchange", 'durable' => true) puts "---- Durable Exchanges ----" elist.each do |e| puts "Exchange: #{e.name}" end puts "----" qlist = @qmfc.objects(Qmf::Query.new(:package => "org.apache.qpid.broker", :class => "queue")) puts "---- Queues ----" qlist.each do |q| puts " ---- Queue ----" puts " name : #{q.name}" end puts "----" sleep(5) end sleep(5) puts "Deleting connection..." @qmfc.del_connection(@broker) puts " done" sleep end end app = App.new app.main