1 # -*- encoding: utf-8 -*-
5 # Focus on this gem's capabilities.
6 # require 'memory_profiler'
7 require 'memory-profiler'
9 if Kernel.respond_to?(:require_relative)
10 require_relative("stomp_adhoc_common")
11 require_relative("payload_generator")
13 $LOAD_PATH << File.dirname(__FILE__)
14 require "stomp_adhoc_common"
15 require("payload_generator")
19 # Round 2 of testing around issue #121.
23 attr_reader :client, :session
26 def initialize(topic = false)
27 @client, @session, @topic = nil, nil, topic
29 @queue = make_destination("issue121/test_02")
33 @cmin, @cmax = 1292, 67782 # From the issue discussion
34 PayloadGenerator::initialize(min= @cmin, max= @cmax)
37 mps = 5.6 # see issue discussion
38 @to, @nmts, @nts, @umps = 0.0, Time.now.to_f, @nmsgs, mps
45 client_hdrs = {"accept-version" => "1.1,1.2",
49 client_hash = { :hosts => [
50 {:login => login(), :passcode => passcode(), :host => host(), :port => port()},
52 :connect_headers => client_hdrs,
55 @client = Stomp::Client.new(client_hash)
56 puts "START: Client Connect complete"
57 raise "START: Connection failed!!" unless @client.open?
58 raise "START: Unexpected protocol level!!" if @client.protocol() == Stomp::SPL_10
59 cf = @client.connection_frame()
60 puts "START: Connection frame\n#{cf}"
61 raise "START: Connect error!!: #{cf.body}" if @client.connection_frame().command == Stomp::CMD_ERROR
62 @session = @client.connection_frame().headers['session']
63 puts "START: Queue/Topic Name: #{@queue}"
64 puts "START: Session: #{@session}"
65 puts "START: NMSGS: #{@nmsgs}"
66 puts "START: Block: #{@block}"
67 puts "START: Wanted Messages Per Second: #{@umps}"
68 puts "START: Sleep Time: #{@tslt}"
81 fet = sprintf(@ffmts, et)
82 favgsz = sprintf(@ffmts, avgsz)
83 fmps = sprintf(@ffmts, mps)
87 puts "\tNumber of payloads generated: #{@nts}"
88 puts "\tMin Length: #{@cmin}, Max Length: #{@cmax}"
89 puts "\tAVG_SIZE: #{favgsz}, ELAPS_SEC: #{fet}(seconds)"
90 puts "\tNMSGS_PER_SEC: #{fmps}"
93 puts "SHUT: Shutdown complete"
104 puts "PUB: NEXT MESSAGE NUMBER: #{nm}"; $stdout.flush
105 mo = PayloadGenerator::payload()
107 hs = {:session => @session}
111 @client.publish(@queue,
114 puts "PUB: HAVE_RECEIPT:\nID: #{m.headers['receipt-id']}"
120 @client.publish(@queue, mo, hs)
123 puts "PUB: start user sleep"
124 sleep @tslt # see issue discussion
125 puts "PUB: end user sleep"
127 end # @nmsgs.times do
129 puts "PUB: end of publish"
136 # :limit => is max number of classes to report on
137 MemoryProfiler::start_daemon( :limit=>25, :delay=>10, :marshal_size=>true, :sort_by=>:absdelta )
140 rpt = MemoryProfiler.start( :limit=> 25 ) do
141 e = Issue121Examp02.new
144 # No subscribes here, just publish
145 # See discussion in issue #121
148 puts MemoryProfiler.format(rpt)
152 MemoryProfiler::stop_daemon