summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2010-04-13 17:43:12 +0000
committerAlan Conway <aconway@apache.org>2010-04-13 17:43:12 +0000
commit45eed7cebb326d9cc9655420d57852904f517a3d (patch)
tree6a879ca995f4505b53ee6b6e155729de58bfe484
parentaae820278915bedf57ce4881caf9e29afe186d32 (diff)
downloadqpid-python-45eed7cebb326d9cc9655420d57852904f517a3d.tar.gz
qpid_cpp_benchmark: print send/receive stats side-by-side
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@933719 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/tests/Statistics.cpp3
-rwxr-xr-xqpid/cpp/src/tests/qpid_cpp_benchmark45
2 files changed, 29 insertions, 19 deletions
diff --git a/qpid/cpp/src/tests/Statistics.cpp b/qpid/cpp/src/tests/Statistics.cpp
index 87cab2926c..a3852e64af 100644
--- a/qpid/cpp/src/tests/Statistics.cpp
+++ b/qpid/cpp/src/tests/Statistics.cpp
@@ -81,7 +81,7 @@ void ThroughputAndLatency::report(ostream& o) const {
o << fixed << setprecision(2)
<< '\t' << min << '\t' << max << '\t' << total/messages;
else
- o << "Can't compute latency for 0 messages.";
+ o << "\t<0 messages, can't compute latency>";
}
ReporterBase::ReporterBase(ostream& o, int batch, bool wantHeader)
@@ -109,6 +109,7 @@ void ReporterBase::message(const messaging::Message& m) {
/** Print overall report. */
void ReporterBase::report() {
+ if (!overall.get()) overall = create();
header();
overall->report(out);
out << endl;
diff --git a/qpid/cpp/src/tests/qpid_cpp_benchmark b/qpid/cpp/src/tests/qpid_cpp_benchmark
index 177231f026..e4ff659393 100755
--- a/qpid/cpp/src/tests/qpid_cpp_benchmark
+++ b/qpid/cpp/src/tests/qpid_cpp_benchmark
@@ -42,6 +42,9 @@ op.add_option("--content-size", default=1024, type="int", metavar="BYTES",
help="message size in bytes (default %default)")
op.add_option("--ack-frequency", default=0, metavar="N", type="int",
help="receiver ack's every N messages, 0 means unconfirmed")
+op.add_option("--no-report-header", dest="report_header", default=True,
+ action="store_false", help="don't print header on report")
+op.add_option("--repeat", default=1, metavar="N", help="repeat N times", type="int")
def start_receive(queue, opts, ready_queue):
return Popen(["qpid_receive",
@@ -51,7 +54,8 @@ def start_receive(queue, opts, ready_queue):
"--print-content=no",
"--report-total",
"--ack-frequency", str(opts.ack_frequency),
- "--ready-address", ready_queue
+ "--ready-address", ready_queue,
+ "--report-header=no"
],
stdout=PIPE, stderr=STDOUT)
@@ -63,7 +67,9 @@ def start_send(queue, opts):
"--send-eos", str(opts.receivers),
"--content-size", str(opts.content_size),
"--rate", str(opts.send_rate),
- "--report-total"],
+ "--report-total",
+ "--report-header=no"
+ ],
stdout=PIPE, stderr=STDOUT)
def wait_for_output(p):
@@ -79,11 +85,16 @@ def delete_queues(queues, broker):
except qpid.messaging.exceptions.SendError:pass # Ignore "no such queue"
c.close()
-def skip_first_line(text): return "\n".join(text.split("\n")[1:])
-
-def print_output(processes):
- print wait_for_output(processes.pop(0)),
- for p in processes: print skip_first_line(wait_for_output(p)),
+def print_output(senders, receivers, want_header):
+ send_stats = sum([wait_for_output(p).split("\n")[:-1] for p in senders],[])
+ recv_stats = sum([wait_for_output(p).split("\n")[:-1] for p in receivers],[])
+ def empty_if_none(s):
+ if s: return s
+ else: return ""
+ stats = map(lambda s,r: empty_if_none(s)+"\t\t"+empty_if_none(r),
+ send_stats, recv_stats)
+ if want_header: print "send-tp\t\trecv-tp\tl-min\tl-max\tl-avg"
+ for s in stats: print s;
class ReadyReceiver:
"""A receiver for ready messages"""
@@ -105,17 +116,15 @@ def main():
opts, args = op.parse_args()
ready_queue="%s-ready"%(opts.queue_name)
queues = ["%s-%s"%(opts.queue_name, i) for i in xrange(opts.queues)]
- delete_queues(queues, opts.broker)
- ready_receiver = ReadyReceiver(ready_queue, opts.broker)
- receivers = [start_receive(q, opts, ready_queue) for q in queues for i in xrange(opts.receivers)]
- ready_receiver.wait(len(receivers)) # Wait for receivers to be ready.
- senders = [start_send(q, opts) for q in queues for i in xrange(opts.senders)]
- print "Send"
- print_output(senders)
- print "\nReceive"
- print_output(receivers)
- print
- delete_queues(queues, opts.broker)
+ for i in xrange(opts.repeat):
+ delete_queues(queues, opts.broker)
+ ready_receiver = ReadyReceiver(ready_queue, opts.broker)
+ receivers = [start_receive(q, opts, ready_queue)
+ for q in queues for i in xrange(opts.receivers)]
+ ready_receiver.wait(len(receivers)) # Wait for receivers to be ready.
+ senders = [start_send(q, opts) for q in queues for i in xrange(opts.senders)]
+ print_output(senders, receivers, opts.report_header)
+ delete_queues(queues, opts.broker)
if __name__ == "__main__": main()