#!/usr/bin/perl -w

=head1 NAME

iostat.hd_only - Plugin for watching io-bound traffic (in KiloBytes) on disks

=head1 CONFIGURATION

No configuration

=head1 NOTES

=head2 DESCRIPTION

Similar to the iostat script, but will only report usage on hdisks
physically installed in the server.

=head2 RESTRICTIONS

Same as the iostat script, see its RESTRICTIONS.

Note: If you have virtual paths, typical when gigabit fiber cards are
installed and attached to an ESS (Shark) or some sort of large disk
array, this will not include any information for them.  This only
collects information for hdisks physically located in the machine, no
virtual drives are included.

=head1 AUTHOR

Unknown author

=head1 LICENSE

GPLv2

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

use strict;
use POSIX;

my($arg) = shift;

if($arg && $arg eq "autoconf") {
    if ( (-e "/usr/bin/iostat" && -X "/usr/bin/iostat") &&
	 (-e '/usr/sbin/lspv' && -X '/usr/sbin/lspv')) {
        print "yes\n";
        exit 0;
    } else {
        print "no (need /usr/bin/iostat and /usr/sbin/lspv)\n";
        exit 0;
    }
}

if($arg && $arg eq "config")
  {
    print "graph_title IOstat (Internal Disks Only)\n";
    print "graph_args --base 1024 --logarithmic\n";
    print "graph_vlabel KB / \${graph_period}\n";
    print "graph_category disk\n";
    my(@info) = getDiskIO("disk only");
    my($line);
    foreach $line (@info)
      {
        print "$line.label $line\n";
        print "$line.type COUNTER\n";
        print "$line.max 100000\n";
      }
    exit 0;
  }

my(@info) = getDiskIO('');
my($line);
foreach $line (@info)
  {print "$line";}


sub getDiskIO
{
  my($diskOnly) = @_;
  my($line,@lineArray,@diskArray,$writes,$reads,$diskLine);
  if($diskOnly && $diskOnly eq 'disk only')
    {
      open DISKLIST, "/usr/sbin/lspv|grep hdisk|grep -v none|";
      while($line = <DISKLIST>)
        {
          @lineArray = split(/ +/,$line);
          push(@diskArray,"$lineArray[0]_read","$lineArray[0]_write");
        }
    }
  else
    {
      open DISKLIST, "/usr/sbin/lspv|grep hdisk|grep -v none|";
      while($line = <DISKLIST>)
        {
          @lineArray = split(/ +/,$line);
          $diskLine = `/usr/bin/iostat|grep $lineArray[0]`;
          @lineArray = split(/ +/,$diskLine);
          $writes = $lineArray[5];
          chomp($writes);
          $reads = $lineArray[4];
          chomp($reads);

          push(@diskArray,"$lineArray[0]_read.value $reads\n","$lineArray[0]_write.value $writes\n");
        }
    }
  return @diskArray
}

