summaryrefslogtreecommitdiff
path: root/src/perl/LogSummary/exceldemo.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/perl/LogSummary/exceldemo.pl')
-rw-r--r--src/perl/LogSummary/exceldemo.pl89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/perl/LogSummary/exceldemo.pl b/src/perl/LogSummary/exceldemo.pl
new file mode 100644
index 0000000..1aed252
--- /dev/null
+++ b/src/perl/LogSummary/exceldemo.pl
@@ -0,0 +1,89 @@
+# A demo script which interfaces the LogSummary Perl module to the
+# WriteExcel module, with some real data, to show what it can do.
+# Author: Nathan Scott <nathans@debian.org>
+# Note: No #! line, as this pulls in an external dependency that
+# we really don't want in packaging tools like rpm.
+
+use strict;
+use warnings;
+use PCP::LogSummary;
+use Spreadsheet::WriteExcel;
+
+my @app = ('aconex.response_time.samples', 'aconex.response_time.adjavg');
+my @db = ('kernel.all.cpu.user', 'kernel.all.cpu.sys', 'kernel.all.cpu.intr');
+my @dbdisk = ('disk.dev.idle', 'disk.dev.read_bytes');
+
+my ( $dblog1, $dblog2 ) = ('t/db/20081125', 't/db/20081126');
+my $dbdisk_before = PCP::LogSummary->new($dblog1, \@dbdisk);
+my $dbdisk_after = PCP::LogSummary->new($dblog2, \@dbdisk);
+my $dbcpu_before = PCP::LogSummary->new($dblog1, \@db);
+my $dbcpu_after = PCP::LogSummary->new($dblog2, \@db);
+
+my ( $applog1, $applog2 ) = ('t/app/20081125', 't/app/20081126');
+my $app_before = PCP::LogSummary->new($applog1, \@app);
+my $app_after = PCP::LogSummary->new($applog2, \@app);
+
+my $workbook = Spreadsheet::WriteExcel->new('new-dxb-dbserver.xls');
+
+my $heading = $workbook->add_format();
+$heading->set_bold();
+$heading->set_italic();
+my $subheading = $workbook->add_format();
+$subheading->set_italic();
+$subheading->set_bg_color('silver');
+my $unitscolumn = $workbook->add_format();
+$unitscolumn->set_align('center');
+
+my $sheet = $workbook->add_worksheet();
+my ( $precol, $postcol, $units ) = ( 1, 2, 3 );
+$sheet->set_column('A:A', 32); # metric names column
+$sheet->set_column('B:B', 14); # column for "Before" values
+$sheet->set_column('C:C', 14); # column for "After" values
+$sheet->set_column('D:D', 12); # metrics units column
+
+my $row = 0;
+$sheet->write($row, 0, 'Dubai Database Storage Upgrade', $heading);
+$row = 2;
+$sheet->write($row, 0, 'Metrics', $subheading);
+$sheet->write($row, $precol, 'Before', $subheading);
+$sheet->write($row, $postcol, 'After', $subheading);
+$sheet->write($row, $units, 'Units', $subheading);
+
+foreach my $m ( @app ) {
+ my $metric = metric_instance($m, 'dxb');
+ $row++;
+ $sheet->write($row, 0, $metric);
+ $sheet->write($row, $precol, $$app_before{$metric}{'average'});
+ $sheet->write($row, $postcol, $$app_after{$metric}{'average'});
+ $sheet->write($row, $units, $$app_after{$metric}{'units'}, $unitscolumn);
+}
+foreach my $m ( @dbdisk ) {
+ my $metric = metric_instance($m, 'G:'); # Windows drive letter
+ $row++;
+ $sheet->write($row, 0, $metric);
+ $sheet->write($row, $precol, $$dbdisk_before{$metric}{'average'});
+ $sheet->write($row, $postcol, $$dbdisk_after{$metric}{'average'});
+ $sheet->write($row, $units, $$dbdisk_after{$metric}{'units'}, $unitscolumn);
+}
+
+# Report CPU metrics as a single utilisation value
+{
+ my $syscpu1 = $$dbcpu_before{'kernel.all.cpu.sys'};
+ my $intcpu1 = $$dbcpu_before{'kernel.all.cpu.intr'};
+ my $usrcpu1 = $$dbcpu_before{'kernel.all.cpu.user'};
+ my $syscpu2 = $$dbcpu_after{'kernel.all.cpu.sys'};
+ my $intcpu2 = $$dbcpu_after{'kernel.all.cpu.intr'};
+ my $usrcpu2 = $$dbcpu_after{'kernel.all.cpu.user'};
+ my $ncpu = 4;
+
+ my $cpu_before = $ncpu * ( $$syscpu1{'average'} +
+ $$intcpu1{'average'} + $$usrcpu1{'average'} );
+ my $cpu_after = $ncpu * ( $$syscpu2{'average'} +
+ $$intcpu2{'average'} + $$usrcpu2{'average'} );
+
+ $row++;
+ $sheet->write($row, 0, 'kernel.all.cpu');
+ $sheet->write($row, $precol, $cpu_before * 100.0);
+ $sheet->write($row, $postcol, $cpu_after * 100.0);
+ $sheet->write($row, $units, 'percent', $unitscolumn);
+}