summaryrefslogtreecommitdiff
path: root/man/html/diskmodel/model.pl
diff options
context:
space:
mode:
Diffstat (limited to 'man/html/diskmodel/model.pl')
-rw-r--r--man/html/diskmodel/model.pl164
1 files changed, 164 insertions, 0 deletions
diff --git a/man/html/diskmodel/model.pl b/man/html/diskmodel/model.pl
new file mode 100644
index 0000000..58f2f20
--- /dev/null
+++ b/man/html/diskmodel/model.pl
@@ -0,0 +1,164 @@
+#
+# Script generating a summary spreadsheet from production data
+#
+use strict;
+use warnings;
+use PCP::LogSummary;
+use Spreadsheet::WriteExcel;
+
+my $workbook = Spreadsheet::WriteExcel->new('model.xls');
+my $naslog = "nasdata"; # PCP archive for NAS host
+my $dblog = "dbdata"; # PCP archive for database host
+
+# Setup some spreadsheet metadata - fonts, colors, etc
+#
+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 $centercolumn = $workbook->add_format();
+$centercolumn->set_align('center');
+my $centerboldcolumn = $workbook->add_format();
+$centerboldcolumn->set_align('center');
+$centerboldcolumn->set_bold();
+
+# Create a worksheet, configure a few columns
+#
+my $sheet = $workbook->add_worksheet();
+$sheet->set_column('A:A', 28); # metric names column
+$sheet->set_column('B:B', 6); # instances column
+$sheet->set_column('C:C', 14); # column for raw values
+$sheet->set_column('D:D', 12); # metrics units column
+$sheet->set_column('E:E', 18); # average size column
+$sheet->set_column('F:F', 14); # read/write ratio column
+
+sub iops_ratio
+{
+ my ( $reads, $writes ) = @_;
+ my $total = $writes + $reads;
+ $writes /= $total;
+ $writes *= 100;
+ $writes = int($writes + 0.5);
+ $reads /= $total;
+ $reads *= 100;
+ $reads = int($reads + 0.5);
+ return "$reads:$writes";
+}
+
+# Write data - starting at row 0 and column 0, moving across and down
+#
+my $row = 0;
+$sheet->write($row, 0, 'NAS (NFS) Workload Modelling', $heading);
+$row++;
+$sheet->write($row, 0, 'Metrics', $subheading);
+$sheet->write($row, 1, '', $subheading);
+$sheet->write($row, 2, '', $subheading);
+$sheet->write($row, 3, '', $subheading);
+$sheet->write($row, 4, 'Average I/O Size', $subheading);
+$sheet->write($row, 5, 'I/O Ratio', $subheading);
+
+my @nas = ('disk.dev.read', 'disk.dev.read_bytes', 'disk.dev.write',
+ 'disk.dev.write_bytes', 'disk.dev.avactive');
+my $nasIO = PCP::LogSummary->new($naslog, \@nas, '@11:00', '@12:00');
+
+foreach my $m ( @nas ) {
+ my $device = 'sdi';
+ my $metric = metric_instance($m, $device);
+ $row++;
+ $sheet->write($row, 0, $m);
+ $sheet->write($row, 1, "[$device]");
+ $sheet->write($row, 2, $$nasIO{$metric}{'average'}, $centercolumn);
+ $sheet->write($row, 3, $$nasIO{$metric}{'units'});
+ if ($m eq 'disk.dev.read') {
+ my $thruput = metric_instance('disk.dev.read_bytes', $device);
+ my $result = $$nasIO{$thruput}{'average'} / $$nasIO{$metric}{'average'};
+ $sheet->write($row, 4, $result, $centerboldcolumn);
+
+ my $writers = metric_instance('disk.dev.write', $device);
+ my $writes = $$nasIO{$writers}{'average'};
+ my $reads = $$nasIO{$metric}{'average'};
+ $sheet->write($row, 5, iops_ratio($reads, $writes), $centerboldcolumn);
+ }
+ if ($m eq 'disk.dev.write') {
+ my $thruput = metric_instance('disk.dev.write_bytes', $device);
+ my $result = $$nasIO{$thruput}{'average'} / $$nasIO{$metric}{'average'};
+ $sheet->write($row, 4, $result, $centerboldcolumn);
+ }
+}
+$row += 2;
+
+$sheet->write($row, 0, 'DB (Interactive) Workload Modelling', $heading);
+$row++;
+$sheet->write($row, 0, 'Metrics', $subheading);
+$sheet->write($row, 1, '', $subheading);
+$sheet->write($row, 2, '', $subheading);
+$sheet->write($row, 3, '', $subheading);
+$sheet->write($row, 4, 'Average I/O Size', $subheading);
+$sheet->write($row, 5, 'I/O Ratio', $subheading);
+
+my @db = ('disk.dev.read', 'disk.dev.read_bytes', 'disk.dev.write',
+ 'disk.dev.write_bytes', 'disk.dev.queue_len', 'disk.dev.idle');
+my $dbIO = PCP::LogSummary->new($dblog, \@db, '@11:10', '@11:55');
+
+foreach my $m ( @db ) {
+ my $device = 'F:';
+ my $metric = metric_instance($m, $device);
+ $row++;
+ $sheet->write($row, 0, $m);
+ $sheet->write($row, 1, "[$device]");
+ $sheet->write($row, 2, $$dbIO{$metric}{'average'}, $centercolumn);
+ $sheet->write($row, 3, $$dbIO{$metric}{'units'});
+ if ($m eq 'disk.dev.read') {
+ my $thruput = metric_instance('disk.dev.read_bytes', $device);
+ my $result = $$dbIO{$thruput}{'average'} / $$dbIO{$metric}{'average'};
+ $sheet->write($row, 4, $result, $centerboldcolumn);
+
+ my $writers = metric_instance('disk.dev.write', $device);
+ my $writes = $$dbIO{$writers}{'average'};
+ my $reads = $$dbIO{$metric}{'average'};
+ $sheet->write($row, 5, iops_ratio($reads, $writes), $centerboldcolumn);
+ }
+ if ($m eq 'disk.dev.write') {
+ my $thruput = metric_instance('disk.dev.write_bytes', $device);
+ my $result = $$dbIO{$thruput}{'average'} / $$dbIO{$metric}{'average'};
+ $sheet->write($row, 4, $result, $centerboldcolumn);
+ }
+}
+$row += 2;
+
+$sheet->write($row, 0, 'DB (Business Intel) Workload Modelling', $heading);
+$row++;
+$sheet->write($row, 0, 'Metrics', $subheading);
+$sheet->write($row, 1, '', $subheading);
+$sheet->write($row, 2, '', $subheading);
+$sheet->write($row, 3, '', $subheading);
+$sheet->write($row, 4, 'Average I/O Size', $subheading);
+$sheet->write($row, 5, 'I/O Ratio', $subheading);
+
+my $dbBI = PCP::LogSummary->new($dblog, \@db, '@11:00', '@11:05');
+
+foreach my $m ( @db ) {
+ my $device = 'F:';
+ my $metric = metric_instance($m, $device);
+ $row++;
+ $sheet->write($row, 0, $m);
+ $sheet->write($row, 1, "[$device]");
+ $sheet->write($row, 2, $$dbBI{$metric}{'average'}, $centercolumn);
+ $sheet->write($row, 3, $$dbBI{$metric}{'units'});
+ if ($m eq 'disk.dev.read') {
+ my $thruput = metric_instance('disk.dev.read_bytes', $device);
+ my $result = $$dbBI{$thruput}{'average'} / $$dbBI{$metric}{'average'};
+ $sheet->write($row, 4, $result, $centerboldcolumn);
+ my $writers = metric_instance('disk.dev.write', $device);
+ my $writes = $$dbBI{$writers}{'average'};
+ my $reads = $$dbBI{$metric}{'average'};
+ $sheet->write($row, 5, iops_ratio($reads, $writes), $centerboldcolumn);
+ }
+ if ($m eq 'disk.dev.write') {
+ my $thruput = metric_instance('disk.dev.write_bytes', $device);
+ my $result = $$dbBI{$thruput}{'average'} / $$dbBI{$metric}{'average'};
+ $sheet->write($row, 4, $result, $centerboldcolumn);
+ }
+}