# Register routine with plugin registery
$DATAFUNCS{'rrd_mysql'} = \&data_rrd_mysql;

# Take the MySQL status message and create rrd databases for interesting
# stats.

# RRA to be created for each RRD
# "daily" 5min avg last 48hr
# "weekly" 30min avg last 12days
# "monthly 2hr avg last 48days
# "yearly" 24hr avg last 576days
$RRAS = "RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:576 RRA:AVERAGE:0.5:24:576 " . 
        "RRA:AVERAGE:0.5:288:576";

$RRDTOOL = "/usr/local/rrdtool/bin/rrdtool";
$RRDDIR  = "/home/spong/var/rrd";

sub data_rrd_mysql {
   my( $host, $service, $color, $start, $time, $sum, $message ) = @_;

   if ($service ne 'mysql' ) { return; }
   $time = time;
   my( $line, $rawfs, $used, $pct, $name, %namemap, $target );

   &main::save_data('>', "$RRDDIR/$host/.rrd-mysql", "");

   my ($threads) = undef;
   my ($tables) = undef;
   my ($avg) = undef;

   # Bugger, different versions of MySQL have different ways of doing this...
   if ( $message =~ /[Tt]hreads:\s+(\d+).*?Open\s+tables:\s+(\d+)(.*?avg:\s+([.0-9]+))?\s*$/ ) {
      $threads = $1;
      $tables = $2;
      $avg = $4 || 0;
   }
   
   if(defined $threads && defined $tables && defined $avg) {   
      # If .rrd file not found, built it
      if ( ! -f "$RRDDIR/$host/mysql.rrd" ) {
        &debug("$RRDDIR/$host/mysql.rrd not found creating it",4);
        {  local $SIG{'PIPE'} = 'IGNORE';
           local $SIG{'CHLD'} = 'IGNORE';

           eval {
              system "$RRDTOOL create $RRDDIR/$host/mysql.rrd " . 
                     "DS:threads:GAUGE:600:0:100 DS:tables:GAUGE:600:0:U " .
                     "DS:avg:GAUGE:600:0:U $RRAS";
           };
         }
         if (@?) { &error("Error: rrdtool create: $@"); }
      }

      # Update the .rrd file
      &debug("Updating $host MySQL rrd file",4);
      {  local $SIG{'PIPE'} = 'IGNORE';
         local $SIG{'CHLD'} = 'IGNORE';
         system "$RRDTOOL update $RRDDIR/$host/mysql.rrd " .
                "$time:$threads:$tables:$avg";
         if ($@) { &error("Error: rrdtool update: $@"); }
      }
   } else {
     &debug("Type mysql true but not parseable: $message",4);
   }
}

# I'm include perl code, I need this line.
1;

