<?php

$g = 0;  # Graph number
$cpucolors['UserCPU'] = "#0000FF";
$cpucolors['NiceCPU'] = "#00FF00";
$cpucolors['SystemCPU'] = "#ff0000";
$cpucolors['IdleCPU'] = "#000000";
$cpucolors['WaitCPU'] = "#F5F800";
$cpucolors['IntCPU'] = "#FF7D00";
$cpucolors['SoftIRQCPU'] = "#AAABA1";
$cpucolors['KernelCPU'] = "#FF00FF";
$cpucolors['PageIN'] = "#0000FF";
$cpucolors['PageOUT'] = "#ff0000";
$cpucolors['SwapIN'] = "#0000FF";
$cpucolors['SwapOUT'] = "#ff0000";

#DEF:a="/data/cacti/rra/cfsyslog_cpu_system_5869.rrd":cpu_system:AVERAGE \


# First, split out CPU and other stats
$cpu = array ();
$cpukey = array();
$memkey = -1;
$mem_used = 0;
$swapkey = -1;
$swap_used = 0;
$load1key = -1;
$load1 = 0;
$load5 = 0;
$load15 = 0;
foreach ($NAME as $key=>$val) {
   if (strstr($val, "CPU") || strstr($val, "Page") || strstr($val, "Swap")) {
      $cpu[$key] = $val;
      $cpukey[$val] = $key;
   } else if (strcmp($val, "mem_used") == 0) {
      $memused = $val;
      $memkey = $key;
   } else if (strcmp($val, "swap_used") == 0) {
      $swapused = $val;
      $swapkey = $key;
   } else if (strcmp($val, "load1") == 0) {
      $load1 = $val;
      $load1key = $key;
   } else if (strcmp($val, "load5") == 0) {
      $load5 = $val;
      $load5key = $key;
   } else if (strcmp($val, "load15") == 0) {
      $load15 = $val;
      $load15key = $key;
   }
}

if (count($cpu) > 0) {
   $g++;
   $ds_name[$g] = "CPU Usage";
   $opt[$g] = "--vertical-label 'Percent' --alt-autoscale-max --rigid --height=200 --width=500 --lower-limit=0 --slope-mode --title \"CPU Usage for $hostname\" ";
   
   $def[$g] = "";
   $key = $cpukey['UserCPU'];
   $def[$g] .= "DEF:UserCPU=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   if (array_key_exists ('NiceCPU', $cpukey)) {
      $key = $cpukey['NiceCPU'];
      $def[$g] .= "DEF:NiceCPU=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   }
   if (array_key_exists ('SystemCPU', $cpukey)) {
      $key = $cpukey['SystemCPU'];
      $def[$g] .= "DEF:SystemCPU=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   }
   if (array_key_exists ('IdleCPU', $cpukey)) {
      $key = $cpukey['IdleCPU'];
      $def[$g] .= "DEF:IdleCPU=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   }
   if (array_key_exists ('WaitCPU', $cpukey)) {
      $key = $cpukey['WaitCPU'];
      $def[$g] .= "DEF:WaitCPU=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   }
   if (array_key_exists ('KernelCPU', $cpukey)) {
      $key = $cpukey['KernelCPU'];
      $def[$g] .= "DEF:KernelCPU=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   }
   if (array_key_exists ('IntCPU', $cpukey)) {
      $key = $cpukey['IntCPU'];
      $def[$g] .= "DEF:IntCPU=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   }
   if (array_key_exists ('SoftIRQCPU', $cpukey)) {
      $key = $cpukey['SoftIRQCPU'];
      $def[$g] .= "DEF:SoftIRQCPU=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   }

   if (array_key_exists ('SystemCPU', $cpukey)) {
      $t = 'SystemCPU'; $key = $cpukey[$t];
      $def[$g] .= "AREA:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\" ";
      $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;

      $t = 'WaitCPU'; $key = $cpukey[$t];
      $def[$g] .= "AREA:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\":STACK ";
      $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
   
      $t = 'SoftIRQCPU'; $key = $cpukey[$t];
      $def[$g] .= "AREA:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\":STACK ";
      $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
   
      $t = 'IntCPU'; $key = $cpukey[$t];
      $def[$g] .= "AREA:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\":STACK ";
      $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
   
      $t = 'UserCPU'; $key = $cpukey[$t];
      $def[$g] .= "AREA:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\":STACK ";
      $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
   
      $t = 'NiceCPU'; $key = $cpukey[$t];
      $def[$g] .= "AREA:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\":STACK ";
      $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
   
      $t = 'KernelCPU'; $key = $cpukey[$t];
      $def[$g] .= "LINE:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\" ";
      $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
   } else {
      $t = 'UserCPU'; $key = $cpukey[$t];
      $def[$g] .= "AREA:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\" ";
      $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
      $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
   }

   $t = 'IdleCPU'; $key = $cpukey[$t];
   $def[$g] .= "LINE:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\" ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
}

# Memory Graph
if ($memkey != -1) {
   $g++;
   $ds_name[$g] = "Memory Usage";
   $opt[$g] = "--vertical-label 'Percent' --alt-autoscale-max --rigid --lower-limit=0 --upper-limit=110 --slope-mode --title \"Memory Usage for $hostname\" ";
   
   $def[$g] = "";
   $key = $memkey;
   $def[$g] .= "DEF:mem_used=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   
   $def[$g] .= "AREA:$NAME[$key]" . "#AFECED:\"$NAME[$key]\" ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
}

# Load Average graph
if ($load1key != -1) {
   $g++;
   $ds_name[$g] = "Load Averages";
   $opt[$g] = "--vertical-label 'Procs in RunQueue' --alt-autoscale-max --rigid --lower-limit=0 --slope-mode --title \"Load Averages for $hostname\" ";
   
   $def[$g] = "";
   $key = $load1key;
   $def[$g] .= "DEF:load1=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   $key = $load5key;
   $def[$g] .= "DEF:load5=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   $key = $load15key;
   $def[$g] .= "DEF:load15=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   
   $key = $load1key;
   $def[$g] .= "LINE:$NAME[$key]" . "#FF0000:\"$NAME[$key]\" ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;

   $key = $load5key;
   $def[$g] .= "LINE:$NAME[$key]" . "#00FF00:\"$NAME[$key]\" ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;

   $key = $load15key;
   $def[$g] .= "LINE:$NAME[$key]" . "#0000FF:\"$NAME[$key]\" ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
}

# Paging Graph
if ((count($cpu) > 0) && (array_key_exists('PageIN', $cpukey))) {
   $g++;
   $ds_name[$g] = "System Paging";
   $opt[$g] = "--vertical-label 'Blocks/sec' --alt-autoscale-max --lower-limit=0 --rigid --slope-mode --title \"Paging for $hostname\" ";
   
   $def[$g] = "";
   $key = $cpukey['PageIN'];
   $def[$g] .= "DEF:PageIN=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   $key = $cpukey['PageOUT'];
   $def[$g] .= "DEF:PageOUT=$RRDFILE[$key]:$DS[$key]:AVERAGE ";

   $t = 'PageIN'; $key = $cpukey[$t];
   $def[$g] .= "LINE:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\" ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;

   $t = 'PageOUT'; $key = $cpukey[$t];
   $def[$g] .= "LINE:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\":STACK ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
}

# Swapping Graph
if ((count($cpu) > 0) && (array_key_exists('SwapIN', $cpukey))) {
   $g++;
   $ds_name[$g] = "System Swapping";
   $opt[$g] = "--vertical-label 'Blocks/sec' --alt-autoscale-max --rigid --lower-limit=0 --slope-mode --title \"Swapping for $hostname\" ";
   
   $def[$g] = "";
   $key = $cpukey['SwapIN'];
   $def[$g] .= "DEF:SwapIN=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   $key = $cpukey['SwapOUT'];
   $def[$g] .= "DEF:SwapOUT=$RRDFILE[$key]:$DS[$key]:AVERAGE ";

   $t = 'SwapIN'; $key = $cpukey[$t];
   $def[$g] .= "AREA:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\" ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;

   $t = 'SwapOUT'; $key = $cpukey[$t];
   $def[$g] .= "STACK:$NAME[$key]" . "$cpucolors[$t]:\"$NAME[$key]\":STACK ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
}

# Swap Graph
if ($swapkey != -1) {
   $g++;
   $ds_name[$g] = "Swap Usage";
   $opt[$g] = "--vertical-label 'Percent' --alt-autoscale-max --rigid --lower-limit=0 --upper-limit=110 --slope-mode --title \"Swap Usage for $hostname\" ";
   
   $def[$g] = "";
   $key = $swapkey;
   $def[$g] .= "DEF:swap_used=$RRDFILE[$key]:$DS[$key]:AVERAGE ";
   
   $def[$g] .= "AREA:$NAME[$key]" . "#4444FF:\"$NAME[$key]\" ";
   $def[$g] .= "GPRINT:$NAME[$key]" . ":LAST:\"Cur\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":AVERAGE:\"Avg\: %6.2lf $UNIT[$key] \" " ;
   $def[$g] .= "GPRINT:$NAME[$key]" . ":MAX:\"Max\: %6.2lf $UNIT[$key] \\n\" " ;
}

?>
