<?php
################################################
#
# PNP v0.6 Template for Plugin check_tsm.pl
#
# Thomas Sesselmann <t.sesselmann@dkfz.de> 2010
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
#
# Changelog:
# v0.9  2010.10.22 (ts)
#
####


### Admin Schedules - ALL=6; Completed=6; Failed=0; Missed=0; Started=0;
if ( preg_match('/admin_schedules/i',$servicedesc) ) {

  $opt[1] = " -l0 --vertical-label 'Number' --title '$hostname / $servicedesc' ";
  $def[1] = "";

  $max_i = 5;
  #$col = array( '',"000",  "bfb", "fbb", "fb4",  "bbf" );
  #$typ = array( '',"LINE2","AREA","AREA","STACK","STACK" );
  $col = array( '',"eee", "0f0",  "e00",  "db0",  "00f" );
  $typ = array( '',"AREA","LINE2","LINE2","LINE2","LINE1" );

  for ( $i=1; $i <= $max_i; $i++ ) {
    $def[1] .= "DEF:val$i=$rrdfile:$DS[$i]:AVERAGE ";
  }

  for ( $i=1; $i <= $max_i; $i++ ) {
    #$def[1] .= "AREA:#ccf:'$NAME[1] ' ";
    $def[1] .= "$typ[$i]:val$i#$col[$i]:'".sprintf("%-12s",$NAME[$i])."' ";
    $def[1] .= "GPRINT:val$i:MAX:'MAX\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:MIN:'MIN\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:AVERAGE:'AVG\: %6.1lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:LAST:'LAST\: %4.0lf$UNIT[$i]\\n' ";
  }

### Client Schedules - ALL=247; Completed=170; Failed=5; InProgress=0; Missed=71; Pending=1; Severed=0; Started=0;
} elseif ( preg_match('/client_schedules/i',$servicedesc) ) {

  $opt[1] = " -l0 --vertical-label 'Number' --title '$hostname / $servicedesc' ";
  $def[1] = "";

  $max_i = 7;
  $col = array( '',"000", "0f0",  "e00",  "444",  "00f",  "db0",  "afa" );
  $typ = array( '',"LINE1","LINE2","LINE2","LINE1","LINE1","LINE2","LINE2" );

  for ( $i=1; $i <= $max_i; $i++ ) {
    $def[1] .= "DEF:val$i=$rrdfile:$DS[$i]:AVERAGE ";
  }

  $def[1] .= "AREA:val1#eee:'' ";
  for ( $i=1; $i <= $max_i; $i++ ) {
    #$def[1] .= "AREA:#ccf:'$NAME[1] ' ";
    $def[1] .= "$typ[$i]:val$i#$col[$i]:'".sprintf("%-12s",$NAME[$i])."' ";
    $def[1] .= "GPRINT:val$i:MAX:'MAX\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:MIN:'MIN\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:AVERAGE:'AVG\: %6.1lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:LAST:'LAST\: %4.0lf$UNIT[$i]\\n' ";
  }


### All Data - data=48076407MB; files=118820880;
} elseif ( preg_match('/all_data/i',$servicedesc) ) {

  $opt[1] = " --vertical-label 'Bytes' --title '$hostname / $servicedesc' ";
  $ds_name[1] = "Data";
  $def[1] = "";
  $opt[2] = " --vertical-label 'Number of files' --title '$hostname / $servicedesc' ";
  $ds_name[2] = "Files";
  $def[2] = "";

  $def[1] .= "DEF:data_MB=$rrdfile:$DS[1]:AVERAGE ";
  $def[1] .= "CDEF:data=data_MB,1048576,* ";
  $def[2] .= "DEF:files=$rrdfile:$DS[2]:AVERAGE ";

  $def[1] .= "AREA:data#cfc:'' ";
  $def[1] .= "LINE2:data#0c0:'$NAME[1] ' ";
  $def[1] .= "GPRINT:data:MAX:'MAX\: %5.4lg%sB' ";
  $def[1] .= "GPRINT:data:MIN:'MIN\: %5.4lg%sB' ";
  $def[1] .= "GPRINT:data:AVERAGE:'AVG\: %5.4lg%sB' ";
  $def[1] .= "GPRINT:data:LAST:'LAST\: %5.4lg%sB\\n' ";

  $def[2] .= "AREA:files#ddf:'' ";
  $def[2] .= "LINE2:files#00f:'$NAME[2] ' ";
  $def[2] .= "GPRINT:files:MAX:'MAX\: %5.4lg%s' ";
  $def[2] .= "GPRINT:files:MIN:'MIN\: %5.4lg%s' ";
  $def[2] .= "GPRINT:files:AVERAGE:'AVG\: %5.4lg%s' ";
  $def[2] .= "GPRINT:files:LAST:'LAST\: %5.4lg%s\\n' ";


### HSM Data - 	backup_data=98403MB backup_files=95 hsm_data=1MB hsm_files=9
} elseif ( preg_match('/_node[_-]/i',$servicedesc) ) {

  $opt[1] = " --vertical-label 'Bytes' --title '$hostname / $servicedesc' ";
  $ds_name[1] = "Data";
  $def[1] = "";
  $opt[2] = " --vertical-label 'Number of files' --title '$hostname / $servicedesc' ";
  $ds_name[2] = "Files";
  $def[2] = "";
  $opt[3] = " --vertical-label 'Bytes' --title '$hostname / $servicedesc' ";
  $ds_name[3] = "Data";
  $def[3] = "";
  $opt[4] = " --vertical-label 'Number of files' --title '$hostname / $servicedesc' ";
  $ds_name[4] = "Files";
  $def[4] = "";

  $def[1] .= "DEF:b_data_MB=$rrdfile:$DS[1]:AVERAGE ";
  $def[1] .= "CDEF:b_data=b_data_MB,1048576,* ";
  $def[2] .= "DEF:b_files=$rrdfile:$DS[2]:AVERAGE ";
  $def[1] .= "DEF:s_data_MB=$rrdfile:$DS[3]:AVERAGE ";
  $def[1] .= "CDEF:s_data=s_data_MB,1048576,* ";
  $def[2] .= "DEF:s_files=$rrdfile:$DS[4]:AVERAGE ";

  $def[3] .= $def[1];
  $def[4] .= $def[2];

  $a = "AREA:b_data#fed:'' ";
  $a .= "LINE2:b_data#a30:'".sprintf("%-12s","Backup Data")."' ";
  $a .= "GPRINT:b_data:MAX:'MAX\: %5.4lg%sB' ";
  $a .= "GPRINT:b_data:MIN:'MIN\: %5.4lg%sB' ";
  $a .= "GPRINT:b_data:AVERAGE:'AVG\: %5.4lg%sB' ";
  $a .= "GPRINT:b_data:LAST:'LAST\: %5.4lg%sB\\n' ";
  $def[1] .= "$a";

  $a = "AREA:s_data#cfc:'' ";
  $a .= "LINE2:s_data#0a0:'".sprintf("%-12s","HSM Data")."' ";
  $a .= "GPRINT:s_data:MAX:'MAX\: %5.4lg%sB' ";
  $a .= "GPRINT:s_data:MIN:'MIN\: %5.4lg%sB' ";
  $a .= "GPRINT:s_data:AVERAGE:'AVG\: %5.4lg%sB' ";
  $a .= "GPRINT:s_data:LAST:'LAST\: %5.4lg%sB\\n' ";
  $def[1] .= "$a";
  $def[3] .= "$a";

  $a = "AREA:b_files#fee:'' ";
  $a .= "LINE2:b_files#a09:'".sprintf("%-12s","Backup Files")."' ";
  $a .= "GPRINT:b_files:MAX:'MAX\: %5.4lg%s' ";
  $a .= "GPRINT:b_files:MIN:'MIN\: %5.4lg%s' ";
  $a .= "GPRINT:b_files:AVERAGE:'AVG\: %5.4lg%s' ";
  $a .= "GPRINT:b_files:LAST:'LAST\: %5.4lg%s\\n' ";
  $def[2] .= "$a";

  $a = "AREA:s_files#ddf:'' ";
  $a .= "LINE2:s_files#11f:'".sprintf("%-12s","HSM Files")."' ";
  $a .= "GPRINT:s_files:MAX:'MAX\: %5.4lg%s' ";
  $a .= "GPRINT:s_files:MIN:'MIN\: %5.4lg%s' ";
  $a .= "GPRINT:s_files:AVERAGE:'AVG\: %5.4lg%s' ";
  $a .= "GPRINT:s_files:LAST:'LAST\: %5.4lg%s\\n' ";
  $def[2] .= "$a";
  $def[4] .= "$a";


# ### Moved_Data - ARCHIVE=0MB; BACKUP=691302MB; EXPIRATION=0MB; FULL_DBBACKUP=107464MB; INCR_DBBACKUP=0MB; MIGRATION=46699MB; NAS_Backup_to_TSM_Storage=0MB; RECLAMATION=0MB; RESTORE=0MB; RETRIEVE=0MB; STGPOOL_BACKUP=12773MB;
} elseif ( preg_match('/moved_data/',$servicedesc) ) {

  $opt[1] = " -l0 --vertical-label 'Bytes' --title '$hostname / $servicedesc' ";
  $def[1] = "";

  $max_i = 10;
  $col = array( '',"00f",  "0e0",  "afa",  "aa0",  "0aa",  "db0",  "a0a",   "aaa",   "e00",   "e77",   "000" );
  $typ = array( '',"LINE2","LINE2","LINE1","LINE1","LINE1","LINE2","LINE2", "LINE1", "LINE2", "LINE1", "LINE1" );

  for ( $i=1; $i <= $max_i; $i++ ) {
    $def[1] .= "DEF:val${i}_MB=$rrdfile:$DS[$i]:AVERAGE ";
    $def[1] .= "CDEF:val${i}=val${i}_MB,1048576,* ";
  }

  $def[1] .= "AREA:val1#eee:'' ";
  for ( $i=1; $i <= $max_i; $i++ ) {
    #$def[1] .= "AREA:#ccf:'$NAME[1] ' ";
    $def[1] .= "$typ[$i]:val$i#$col[$i]:'".sprintf("%-25s",$NAME[$i])."' ";
    $def[1] .= "GPRINT:val$i:MAX:'MAX\: %4.0lf%sB' ";
    $def[1] .= "GPRINT:val$i:MIN:'MIN\: %4.0lf%sB' ";
    $def[1] .= "GPRINT:val$i:AVERAGE:'AVG\: %6.1lf%sB' ";
    $def[1] .= "GPRINT:val$i:LAST:'LAST\: %4.0lf%sB\\n' ";
  }


### DB-Utilisation - util=87.30;90;95; max=87.30; cap=177000MB;
### Log-Utilisation - util=41.70;90;95; max=55.30; cap=6000MB;
} elseif ( preg_match('/(db|log)_util/',$servicedesc) ) {
  #TODO
  $opt[1] = " --vertical-label 'Percent' --title '$hostname / $servicedesc' ";
  $ds_name[1] = "Used_Percent";
  $def[1] = "";
  $opt[2] = " --vertical-label 'Bytes' --title '$hostname / $servicedesc' ";
  $ds_name[2] = "Size";
  $def[2] = "";

  $def[1] .= "DEF:util=$rrdfile:$DS[1]:AVERAGE ";
  $def[1] .= "DEF:max=$rrdfile:$DS[2]:AVERAGE ";
  $def[2] .= "DEF:size_MB=$rrdfile:$DS[3]:AVERAGE ";
  $def[2] .= "CDEF:size=size_MB,1048576,* ";

  $def[1] .= "AREA:util#cfc:'' ";
  $def[1] .= "LINE1:max#000:'".sprintf("%-12s",$NAME[2])."' ";
  $def[1] .= "GPRINT:max:MAX:'MAX\: %5.1lf%s' ";
  $def[1] .= "GPRINT:max:MIN:'MIN\: %5.1lf%s' ";
  $def[1] .= "GPRINT:max:AVERAGE:'AVG\: %5.2lf%s' ";
  $def[1] .= "GPRINT:max:LAST:'LAST\: %5.1lf%s\\n' ";
  $def[1] .= "LINE2:util#0c0:'".sprintf("%-12s",$NAME[1])."' ";
  $def[1] .= "GPRINT:util:MAX:'MAX\: %5.1lf%s' ";
  $def[1] .= "GPRINT:util:MIN:'MIN\: %5.1lf%s' ";
  $def[1] .= "GPRINT:util:AVERAGE:'AVG\: %5.2lf%s' ";
  $def[1] .= "GPRINT:util:LAST:'LAST\: %5.1lf%s\\n' ";

  if ($WARN[1] != "") { $def[1] .= "HRULE:$WARN[1]#db0:\"Warning Level\" "; }
  if ($CRIT[1] != "") { $def[1] .= "HRULE:$CRIT[1]#e00:\"Critical Level\" "; }

  $def[2] .= "AREA:size#ddf:'' ";
  $def[2] .= "LINE2:size#00f:'".sprintf("%-12s",$NAME[3])."' ";
  $def[2] .= "GPRINT:size:MAX:'MAX\: %5.4lg%sB' ";
  $def[2] .= "GPRINT:size:MIN:'MIN\: %5.4lg%sB' ";
  $def[2] .= "GPRINT:size:AVERAGE:'AVG\: %5.4lg%sB' ";
  $def[2] .= "GPRINT:size:LAST:'LAST\: %5.4lg%sB\\n' ";


# ### Disk Pool - BACKUPBIG=0; BACKUPPOOL=22; MSPPOOL=73; SQL_METADATA=0;
# } elseif ( preg_match('/disk_pool/',$servicedesc) ) {
#   #TODO
# 
# ### Tape Pool - ACT_SQL_util=0 ACT_SQL_tapes=1;2;4;0;4 ARCHIVLTO_util=35 ARCHIVLTO_tapes=1;0;2;0;2 TLOCBIG_util=60 TLOCBIG_tapes=380;378;380;0;380 TLOCSTAND_util=40 TLOCSTAND_tapes=68;78;80;0;80
# } elseif ( preg_match('/tape_pool/',$servicedesc) ) {
#   #TODO
# 
### Lib_Tapes - ALL=1144; Cleaner=0; Private=1001; Scratch=143;
} elseif ( preg_match('/lib_tapes/',$servicedesc) ) {

  $opt[1] = " -l0 --vertical-label 'Number' --title '$hostname / $servicedesc' ";
  $ds_name[1] = "ALL";
  $def[1] = "";

  $max_i = 4;
  #$col = array( '',"000", "db0",  "00e",  "0f0", "00f",  "db0",  "afa" );
  #$typ = array( '',"LINE1","LINE2","LINE1","STACK","LINE1","LINE1","LINE1" );
  $col = array( '',"000", "db0",  "00e",  "0f0", "00f",  "db0",  "afa" );
  $typ = array( '',"LINE1","LINE2","LINE2","LINE2","LINE1","LINE1","LINE1" );

  for ( $i=1; $i <= $max_i; $i++ ) {
    $def[1] .= "DEF:val$i=$rrdfile:$DS[$i]:AVERAGE ";
  }

  $def[1] .= "AREA:val1#eee:'' ";
  #$def[1] .= "AREA:val3#ddf:'' ";
  #$def[1] .= "STACK:val4#dfd:'' ";
  for ( $i=1; $i <= $max_i; $i++ ) {
    #$def[1] .= "AREA:#ccf:'$NAME[1] ' ";
    $def[1] .= "$typ[$i]:val$i#$col[$i]:'".sprintf("%-12s",$NAME[$i])."' ";
    $def[1] .= "GPRINT:val$i:MAX:'MAX\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:MIN:'MIN\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:AVERAGE:'AVG\: %6.1lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:LAST:'LAST\: %4.0lf$UNIT[$i]\\n' ";
  }

  ## display only scratch tapes
  $opt[2] = " -l0 --vertical-label 'Number' --title '$hostname / $servicedesc' ";
  $ds_name[2] = "Scratch Tapes";
  $def[2] = "";
  $i = 4;
  $def[2] .= "DEF:val$i=$rrdfile:$DS[$i]:AVERAGE ";
  $def[2] .= "AREA:val$i#cec:'' ";
  $def[2] .= "$typ[$i]:val$i#$col[$i]:'".sprintf("%-12s",$NAME[$i])."' ";
  $def[2] .= "GPRINT:val$i:MAX:'MAX\: %4.0lf$UNIT[$i]' ";
  $def[2] .= "GPRINT:val$i:MIN:'MIN\: %4.0lf$UNIT[$i]' ";
  $def[2] .= "GPRINT:val$i:AVERAGE:'AVG\: %6.1lf$UNIT[$i]' ";
  $def[2] .= "GPRINT:val$i:LAST:'LAST\: %4.0lf$UNIT[$i]\\n' ";


### Tapes - ALL=152; DESTROYED=0; OFFSITE=0; READONLY=0; READWRITE=152; UNAVAILABLE=0;
} elseif ( preg_match('/tapes/',$servicedesc) ) {

  $opt[1] = " -l0 --vertical-label 'Number' --title '$hostname / $servicedesc' ";
  $def[1] = "";

  $max_i = 6;
  $col = array( '',"000",  "e00",  "00e",  "c0c", "0f0",  "db0",  "afa" );
  $typ = array( '',"LINE1","LINE2","LINE2","LINE2","LINE2","LINE1","LINE1" );

  for ( $i=1; $i <= $max_i; $i++ ) {
    $def[1] .= "DEF:val$i=$rrdfile:$DS[$i]:AVERAGE ";
  }

  $def[1] .= "AREA:val1#eee:'' ";
  #$def[1] .= "AREA:val3#ddf:'' ";
  #$def[1] .= "STACK:val4#dfd:'' ";
  for ( $i=1; $i <= $max_i; $i++ ) {
    #$def[1] .= "AREA:#ccf:'$NAME[1] ' ";
    $def[1] .= "$typ[$i]:val$i#$col[$i]:'".sprintf("%-12s",$NAME[$i])."' ";
    $def[1] .= "GPRINT:val$i:MAX:'MAX\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:MIN:'MIN\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:AVERAGE:'AVG\: %6.1lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:LAST:'LAST\: %4.0lf$UNIT[$i]\\n' ";
  }


# ### Drives - drives=15;15;14;0;15; empty=14;
} elseif ( preg_match('/drives/',$servicedesc) ) {

  $opt[1] = " -l0 --vertical-label 'Number' --title '$hostname / $servicedesc' ";
  $def[1] = "";

  #drives=15;15;14;0;15 empty=11 unavailable=0 loaded=4 unloaded=0 reserved=0 unknown=0
  $max_i = 7;
  $col = array( '',"00f",  "cfc",  "f77",  "ccf", "fbf",  "bff",  "db0" );
  $typ = array( '',"LINE1","AREA","STACK","STACK","STACK","STACK","STACK" );

  for ( $i=1; $i <= $max_i; $i++ ) {
    switch ( $i ) {
      case 1:  $def[1] .= "DEF:val$i=$rrdfile:$DS[$i]:MIN "; break;
      #case 2:  $def[1] .= "DEF:val$i=$rrdfile:$DS[$i]:MIN "; break;
      default: $def[1] .= "DEF:val$i=$rrdfile:$DS[$i]:AVERAGE ";
    }
  }

  for ( $i=1; $i <= $max_i; $i++ ) {
    switch ( $i ) {
      case 1:  $def[1] .= "$typ[$i]:val$i#$col[$i]:'".sprintf("%-24s","Avail. Drives")."' "; break;
      default: $def[1] .= "$typ[$i]:val$i#$col[$i]:'".sprintf("Drive State %-12s",$NAME[$i])."' ";            
    }
    $def[1] .= "GPRINT:val$i:MAX:'MAX\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:MIN:'MIN\: %4.0lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:AVERAGE:'AVG\: %6.1lf$UNIT[$i]' ";
    $def[1] .= "GPRINT:val$i:LAST:'LAST\: %4.0lf$UNIT[$i]\\n' ";
  }
  $def[1] .= "LINE3:val1#00f:'' ";

  if ($WARN[1] != "") { $def[1] .= "HRULE:$WARN[1]#db0:'Warning Level' "; }
  if ($CRIT[1] != "") { $def[1] .= "HRULE:$CRIT[1]#e00:'Critical Level' "; }

### Default
}else{
  foreach ($DS as $i) {

    $vertlabel  = "";
    $lowerlimit = "";
    $upperlimit = "";

    if ( $MIN[$i] != "" ) { $lowerlimit = "-l $MIN[$i]"; }
    if ( $MAX[$i] != "" ) { $upperlimit = "-u $MAX[$i]"; }
    if ( $UNIT[$i] == "%%" ) { 
      $vertlabel = "%"; 
    } else { 
      $vertlabel = $UNIT[$i];
    }

    $opt[$i] = " $lowerlimit $upperlimit --vertical-label '$vertlabel' --title '$hostname / $servicedesc' ";

    $def[$i] = "";
    $def[$i] .= "DEF:val=$rrdfile:$DS[$i]:AVERAGE ";

    $def[$i] .= "AREA:val#ccf:'$NAME[$i] ' ";
    $def[$i] .= "LINE1:val#000:'' ";
    $def[$i] .= "GPRINT:val:MAX:'MAX\: %.4lg%s$UNIT[$i]' ";
    $def[$i] .= "GPRINT:val:MIN:'MIN\: %.4lg%s$UNIT[$i]' ";
    $def[$i] .= "GPRINT:val:AVERAGE:'AVG\: %.4lg%s$UNIT[$i]' ";
    $def[$i] .= "GPRINT:val:LAST:'LAST\: %.4lg%s$UNIT[$i]\\n' ";

    if ($WARN[$i] != "") { $def[$i] .= "HRULE:$WARN[$i]#db0:'Warning Level' "; }
    if ($CRIT[$i] != "") { $def[$i] .= "HRULE:$CRIT[$i]#e00:'Critical Level' "; }

    $def[$i] .= "COMMENT:'\\n' ";
    $def[$i] .= "COMMENT:'TSM Template\\r' ";
    $def[$i] .= "COMMENT:'Check Command $TEMPLATE[$i]\\r' ";
  }
}
?>
