diff --git a/lib/Extra/OmniPITR.pm b/lib/Extra/OmniPITR.pm new file mode 100644 index 0000000000000000000000000000000000000000..0a906b1f1d575e660546f2f808c2e5573e663efb --- /dev/null +++ b/lib/Extra/OmniPITR.pm @@ -0,0 +1,136 @@ +package Extra::OmniPITR; + +use strict; +use warnings; + +use base 'Resmon::Module'; +use File::Spec; + +use Resmon::ExtComm qw(run_command cache_command); + +=pod + +=head1 NAME + +Extra::OmniPITR - a sample/template resmon module + +=head1 SYNOPSIS + + Extra::OmniPITR { + archive-queue : omnipitr_path => /opt/omnipitr/bin, log_path => /var/log/postgresql/omnipitr-archive-^Y-^m-^d.log, state_path => /var/lib/postgresql/9.1/omnipitr/state -U postgres + last-archive-age : omnipitr_path => /opt/omnipitr/bin, log_path => /var/log/postgresql/omnipitr-archive-^Y-^m-^d.log, state_path => /var/lib/postgresql/9.1/omnipitr/state + } + +=head1 DESCRIPTION + +This module is for monitoring the status of OmniPITR (https://github.com/omniti-labs) using its built in omnipitr-monitor module. All options that omnipitr-monitor has able to be passed as options in resmon.conf. For more details on the check arguments, see https://github.com/omniti-labs/omnipitr/blob/master/doc/omnipitr-monitor.pod + +Note: The 'error' check is not currently supported since this resmon module can only return an integer value at this time. + +=head1 CONFIGURATION + +=over + +=item check_name + +The name of the CHECK as defined in omnipitr for the --check (-c) option. + +=item omnipitr_path + +Path to the omnipitr binary folder (ex. /opt/omnipitr/bin). Assumes binaries are in $PATH otherwise. + +=item state_path + +Same as --state (-s) option + +=item log_path + +Same as --log (-l) option + +=item database + +Same as --database (-d) option + +=item host + +Same as --host (-h) option + +=item port + +Same as --port (-p) option + +=item username + +Same as username (-U) option + +=item psql_path + +Same as --psql-path (-pp) option + +=item temp_path + +Same as --temp-dir (-t) option + + +=back + +=head1 METRICS + +=over + +=item check_name + +The name of the CHECK as defined in omnipitr for the --check (-c) option. + +=item value + +Value returned by the check. Will be an integer representing either time in seconds or a count depending on which check you ran. + +=back + +=cut + +sub handler { + my $self = shift; + my $config = $self->{config}; # All configuration is in here + my $check = $self->{check_name}; # The check name is in here + + my $monitor_cmd = 'omnipitr-monitor'; + + if (defined($config->{omnipitr_path})) { + $monitor_cmd = File::Spec->catdir($config->{omnipitr_path}, $monitor_cmd); + } + + $monitor_cmd .= ' -c ' . $check ; + $monitor_cmd .= ' -s ' . $config->{state_path}; + if (defined($config->{log_path})) { + $monitor_cmd .= ' -l ' . $config->{log_path}; + } + if (defined($config->{database})) { + $monitor_cmd .= ' -d ' . $config->{database}; + } + if (defined($config->{host})) { + $monitor_cmd .= ' -h ' . $config->{host}; + } + if (defined($config->{port})) { + $monitor_cmd .= ' -p ' . $config->{port}; + } + if (defined($config->{username})) { + $monitor_cmd .= ' -U ' . $config->{username}; + } + if (defined($config->{psql_path})) { + $monitor_cmd .= ' -pp ' . $config->{psql_path}; + } + if (defined($config->{temp_path})) { + $monitor_cmd .= ' -t ' . $config->{temp_path}; + } + + my $value = run_command($monitor_cmd); + + return { + "check_name" => [$self->{check_name}, "s"], + "value" => [$value, "i"] + }; +}; + +1;