rendered paste body#!/usr/bin/perl
use strict;
use warnings;
sub average {
my ($summ, $count) = "0";
foreach (@{ $_["0"] }) {
$count++;
$summ = $summ + $_;
}
return sprintf "%.3f", $summ/$count;
}
my $file = "/var/log/nginx/somedomain.ru.nginx_perf.log";
my %data;
my @result;
open PERF,'<',$file or die "Error: $!!\n";
while (<PERF>) {
chomp;
next unless /" 200/;
if (/api\.php/) {
s/^\d{10}\.\d{3} (\d+.\d{3}).+$/\/vkontakte $1/g;
} else {
s/^\d{10}\.\d{3} (\d+.\d{3}) .+92.243.67.106((\w|[\/])+).*$/$2 $1/g;
}
s/(.+)\/id\/\d+.* (\d+.\d{3})/$1 $2/;
my ($url, $time) = split / /;
if (exists($data{"$url"})) {
push @{ $data{"$url"} }, $time;
} else {
$data{"$url"} = [ $time ];
}
}
close PERF;
foreach my $url (keys %data) {
my $avg = average \@{ $data{$url} };
my $num = $#{ $data{$url} } + "1";
my $output = $avg . "\t$num\t$url";
push @result, $output;
}
foreach (sort {$b cmp $a} @result) {
print;
print "\n";
}