#!@@PERL@@
# -*- perl -*-

=head1 NAME

mysql_queries - Munin plugin to display MySQL query rate.

=head1 APPLICABLE SYSTEMS

Any MySQL platform

=head1 CONFIGURATION

  [mysql*]
     user root
     env.mysqlopts <options-for-mysqladmin-here>
     env.mysqladmin <optional-override-of-mysqladmin-path>

It is most usual that root must run the mysqladmin command.

Only use the .env settings if you need to override the defaults.

=head1 INTERPRETATION

To Be Written

=head1 BUGS

None known

=head1 AUTHOR

Copyright 2003-2008 - Per Andreas Buer

=head1 LICENSE

GPLv2

=head1 VERSION

  $Id$

=head1 MAGIC MARKERS

  #%# family=manual
  #%# capabilities=autoconf

=cut

use strict;

my $MYSQLADMIN = $ENV{mysqladmin} || "mysqladmin";
my $COMMAND    = "$MYSQLADMIN $ENV{mysqlopts} extended-status";

my %WANTED = ( "Com_delete"  => "delete", 
			   "Com_insert"  => "insert",
               "Com_select"  => "select", 
               "Com_update"  => "update",
               "Com_replace" => "replace",
               "Qcache_hits" => "cache_hits",
             );

my $arg = shift();

if ($arg eq 'config') {
    print_config();
    exit();
} elsif ($arg eq 'autoconf') {
    unless (test_service() ) {
        print "yes\n";
    } else {
        print "no\n";
    }
    exit 0;
}


open(SERVICE, "$COMMAND |")
  or die("Could not execute '$COMMAND': $!");

while (<SERVICE>) {
    my ($k, $v) = (m/(\w+).*?(\d+(?:\.\d+)?)/);
    next unless ($k);
    if (exists $WANTED{$k} ) {
	print("$WANTED{$k}.value $v\n");
    }
}

close(SERVICE);


sub print_config {

    my $num = 0;

    print("graph_title MySQL queries
graph_args --base 1000
graph_vlabel queries / \${graph_period}
graph_category mysql
graph_info Note that this is a old plugin which is no longer installed by default.  It is retained for compatability with old installations.
graph_total total\n");

    for my $key (keys %WANTED) {
        my $title = $WANTED{$key};
        print("$title.label ${title}\n",
              "$title.min 0\n",
              "$title.type DERIVE\n",
              "$title.max 500000\n",
              "$title.draw ", ($num) ? "STACK" : "AREA" ,  "\n",
             );
        $num++;
    }
    
}


sub test_service {
    system ("$MYSQLADMIN --version >/dev/null 2>/dev/null");
    if ($? == 0)
    {
	system ("$COMMAND >/dev/null 2>/dev/null");
	if ($? == 0)
	{
	    print "yes\n";
	}
	else
	{
	    print "no (could not connect to mysql)\n";
	}
    }
    else
    {
	print "no (mysqladmin not found)\n";
    }
    exit 0;
}
