diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /src/perl/LogSummary/LogSummary.pm | |
download | pcp-debian/3.9.10.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'src/perl/LogSummary/LogSummary.pm')
-rw-r--r-- | src/perl/LogSummary/LogSummary.pm | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/perl/LogSummary/LogSummary.pm b/src/perl/LogSummary/LogSummary.pm new file mode 100644 index 0000000..a5f2c36 --- /dev/null +++ b/src/perl/LogSummary/LogSummary.pm @@ -0,0 +1,117 @@ +package PCP::LogSummary; + +use strict; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); + +require Exporter; + +@ISA = qw(Exporter); +@EXPORT = qw(new metric_instance); +@EXPORT_OK = qw( ); +$VERSION = '1.01'; + +sub new +{ + my ( $self, $archive, $metricsref, $start, $finish ) = @_; + my $opts = '-F -N -z -biImMy -p6'; + my @metrica = @{$metricsref}; + my $metrics = ' '; + my %results; + + foreach my $m (@metrica) { $metrics .= $m . ' '; } + if (defined($start)) { $opts .= " -S'$start'"; } + if (defined($finish)) { $opts .= " -T'$finish'"; } + + open SUMMARY, "pmlogsummary $opts $archive $metrics |" + || die "pmlogsummary: $!\n"; + + # metric,[inst],stocavg,timeavg,minimum,mintime,maximum,maxtime,count,units + LINE: while (<SUMMARY>) { + # print "Input line: $_\n"; + m/^(\S.+),(.*),(\S+),(\S+),(\S+),(.+),(\S+),(.+),(\S+),(.*)$/ + || next LINE; + + # If counter metric doesn't cover 90% of archive, metric name + # is preceded by an asterix. Chop this off and set a flag. + my $metric = $1; + $metric =~ s/^\*//; + my $asterix = ($metric ne $1); + + my %result; + $result{'average'} = $3; + $result{'timeavg'} = $4; + $result{'minimum'} = $5; + $result{'mintime'} = $6; + $result{'maximum'} = $7; + $result{'maxtime'} = $8; + $result{'samples'} = $9; + $result{'units'} = $10; + $result{'ninety%'} = $asterix; + + my $key = $1; + if ($2 ne "") { $key .= $2; } + $results{$key} = \%result; + + # print "key=", $key, " average=$3\n"; + } + close SUMMARY; + return \%results; +} + +sub metric_instance +{ + my ( $metric, $instance ) = @_; + return "$metric\[\"$instance\"\]"; +} + +1; +__END__ + +=head1 NAME + +PCP::LogSummary - Perl interface for pmlogsummary(1) + +=head1 SYNOPSIS + + use PCP::LogSummary; + + my $summary = new PCP::LogSummary($log, \@metrics, $start, $end); + +=head1 DESCRIPTION + +The PCP::LogSummary module is a wrapper around the Performance Co-Pilot +pmlogsummary(1) command. +Its primary purpose is to automate the production of post-processed +pmlogsummary data, in particular to automate the step where the +summarised data is imported into a spreadsheet for further anaylsis. +This has proven to often be an iterative process - done manually it +involves much cutting+pasting, and can be a significant time waster. + +=head2 EXPORT + +new + +metric_instance + +=head1 SEE ALSO + +pmlogsummary(1). + +The PCP mailing list pcp@mail.performancecopilot.org can be used for +questions about this module. + +Further details can be found at http://www.performancecopilot.org + +=head1 AUTHOR + +Nathan Scott, E<lt>nathans@debian.orgE<gt> + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2008 by Aconex + +This library is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2 (see +the "COPYING" file in the PCP source tree for further details). + +=cut |