blob: 317fa10a50971ad0a154fdc6448aaed21f13c60a [file] [log] [blame]
#!/usr/bin/perl
#
## 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.
use strict;
use warnings;
#use Data::Dumper;
sub addStat($$$)
{
my ($stats, $key, $value) = @_;
#print "$key $value\n";
$stats->{$key}->{total} = 0 if (!defined $stats->{$key}->{total});
$stats->{$key}->{count} = 0 if (!defined $stats->{$key}->{count});
return if (!($value =~ m|^-?\d+\.?\d*$|));
#print "$key\n";
$stats->{$key}->{total} += $value if $value >= 0;
$stats->{$key}->{count}++ if $value >= 0;
push(@{$stats->{$key}->{values}}, $value) if $value >= 0;
}
sub displayStat($)
{
my ($stats) = @_;
printf("%25s %10s %10s %10s %10s %10s %10s %10s %10s\n",
'key', 'total', 'count', 'mean', 'median', '95th', '99th', 'min', 'max');
foreach my $key (
'tls_handshake', 'ua_begin', 'ua_first_read', 'ua_read_header_done', 'cache_open_read_begin',
'cache_open_read_end', 'cache_open_write_begin', 'cache_open_write_end', 'dns_lookup_begin',
'dns_lookup_end', 'server_connect', 'server_connect_end', 'server_first_read',
'server_read_header_done', 'server_close', 'ua_close', 'sm_finish', 'plugin_active', 'plugin_total'
)
{
my $count = $stats->{$key}->{count};
my $total = $stats->{$key}->{total};
if (!defined $stats->{$key}->{values}) {
next;
#print "$key\n";
#die $key;
}
my @sorted = sort {$a <=> $b} @{$stats->{$key}->{values}};
my $median = $sorted[int($count / 2)];
my $p95th = $sorted[int($count * .95)];
my $p99th = $sorted[int($count * .99)];
my $min = $sorted[0];
my $max = $sorted[$count - 1];
my $mean = 0;
$mean = $total / $count if $count > 0;
printf("%25s %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f\n",
$key, $total, $count, $mean, $median, $p95th, $p99th, $min, $max);
}
print "NOTE: Times are in seconds\n";
}
{
my %stats;
while (<>) {
chomp;
s/unique id/unique_id/;
s/server state/server_state/;
s/client state/client_state/;
if (m|Slow Request: .+ (tls_handshake: .+)|) {
my %data = split(/: | /, $1);
foreach my $key (keys %data) {
next if (!defined $data{$key});
#print "$key $data{$key}\n";
addStat(\%stats, $key, $data{$key});
}
}
}
displayStat(\%stats);
}