diff --git a/lib/Core/Powermta.pm b/lib/Core/Powermta.pm new file mode 100644 index 0000000000000000000000000000000000000000..5c489eb57036bee3d307e58e3625556cd2139f60 --- /dev/null +++ b/lib/Core/Powermta.pm @@ -0,0 +1,78 @@ +package Core::Powermta; + +use strict; +use warnings; + +use base 'Resmon::Module'; + +use Resmon::ExtComm qw(run_command); + +=pod + +=head1 NAME + +Core::Powermta - Monitor powermta statistics using sysctl + +=head1 SYNOPSIS + + Core::Powermta { + local : 'show_status' => 'status.traffic.total.out.msg,status.queue.smtp.rcp' + } + +=head1 DESCRIPTION + +This module uses the pmta command line tool and its DOM output format to check +on the status of the powermta mailer running on the local machine. + +=head1 CONFIGURATION + +=over + +=item 'show status' + +This configuration key takes a list of comma-separated MIB values to +look up with the `pmta show status` command, and will report their +values. + +=back + +=head1 METRICS + +The metrics returned by this module vary by check used: + +=head2 `SHOW STATUS` METRICS + +This method can reference any check supported by the `pmta show status` +command. + +=cut + +sub handler { + my $self = shift; + my $config = $self->{config}; + if(my $show_status_keys = $config->{show_status}) { + my $raw_lines = run_command(qw/pmta --dom show status/); + my @lines = split /\n/, $raw_lines; + if(!@lines) { + die "Error running `pmta --dom show status`!\n"; + } + my $mib_map = parse_pmta_output(\@lines); + my @show_status_keys = split /,/, $show_status_keys; + my $wanted_pairs = { map { $_ => $mib_map->{$_} } @show_status_keys }; + return $wanted_pairs; + } +}; + +sub parse_pmta_output { + my ($raw_lines) = @_; + chomp @$raw_lines; + my $mib_map; + for my $line (@$raw_lines) { + my ($key, $value) = $line =~ /([^=]+)\s*=\s*"?([^"]+)"?/; + next unless defined $value; + $mib_map->{$key} = $value; + } + return $mib_map; +} + +1;