diff options
Diffstat (limited to 'man/html/diskmodel/model.pl')
-rw-r--r-- | man/html/diskmodel/model.pl | 164 |
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); + } +} |