#!/usr/bin/perl
#%# family=auto
#%# capabilities=autoconf suggest

use strict;
use JMX::Jmx4Perl;
use JMX::Jmx4Perl::Request;   # Type constants are exported here

if ( $ARGV[0] and $ARGV[0] eq "autoconf")
{
	print "yes\n";
	exit 0;
}

### Settings and connection Testing

my $jmx = new JMX::Jmx4Perl(url => $ENV{oxJolokiaUrl},
user => $ENV{oxJolokiaUser},
password => $ENV{oxJolokiaPassword});

### Test if a connection can be made
my $request = new JMX::Jmx4Perl::Request({type => AGENT_VERSION});
my $response = $jmx->request($request);
if ($response->is_error()){
	my $status = $response->status();
	if ($status == 404) {
		die "Link to servlet might not be set correctly, this can be done by altering /etc/munin/plugin-conf.d/ox and setting the correct path to your jolokia servlet";
	}
	elsif ($status == 401) {
		die "Credentials to login might be not set correctly. The credentials are set inside /opt/open-xchange/etc/jolokia.properties on the OX, for munin, those need to be altered at /etc/munin/plugin-conf.d/ox";
	}
	else {
		die "Something went wrong ",$status;
	}
}

###

if ( $ARGV[0] and $ARGV[0] eq "suggest")
{
	$request = new JMX::Jmx4Perl::Request(SEARCH,
		"com.openexchange.pooling:*,name=DB Pool*");
	$response = $jmx->request($request);
	if ($response->is_ok()){
		my @array = @{$response->value()};
		foreach my $entry (@array){
			my $re1='.*?';	# Non-greedy match on filler
			my $re2='(DB Pool)';	# Word 1
			my $re3='.*?';	# Non-greedy match on filler
			my $re4='(\\d+)';	# Integer Number 1
			my $re=$re1.$re2.$re3.$re4;
			if ($entry =~ m/$re/is){
				my $int1=$2;
				print "$int1\n";
			}
		}
	}
	exit 0;
}

$Database=$0;
$Database =~ s/.*_//;
$Database += 0;


if ( $ARGV[0] and $ARGV[0] eq "config")
{
	print "graph_title Database $Database Times\n";
	print "graph_args --base 1000 -l 0\n";
	print "graph_category Open Xchange\n";
	print "graph_vlabel time in ms\n";
	print "a.label MinUseTime\n";
	print "a.draw LINE1\n";
	print "a.max 9223372036854775806\n";
	print "b.label AvgUseTime\n";
	print "b.draw LINE1\n";
	print "c.label MaxUseTime\n";
	print "c.draw LINE1\n";
	exit 0;
}

$request = new JMX::Jmx4Perl::Request(READ,
	"com.openexchange.pooling:,name=DB Pool $Database",
	"MinUseTime");
$response = $jmx->request($request);
if ($response->is_ok()){
	print "a.value $response->value()\n";
}

$request = new JMX::Jmx4Perl::Request(READ,
	"com.openexchange.pooling:,name=DB Pool $Database",
	"AvgUseTime");
$response = $jmx->request($request);
if ($response->is_ok()){
	print "b.value $response->value()\n";
}

$request = new JMX::Jmx4Perl::Request(READ,
	"com.openexchange.pooling:,name=DB Pool $Database",
	"MaxUseTime");
$response = $jmx->request($request);
if ($response->is_ok()){
	print "c.value $response->value()\n";
}
