Skip to content

Instantly share code, notes, and snippets.

@grepwood
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grepwood/126298cf11401779effa to your computer and use it in GitHub Desktop.
Save grepwood/126298cf11401779effa to your computer and use it in GitHub Desktop.
Lists mail queue count with InterWorx API
#!/usr/bin/perl -w
# Tough skin and sharp criticism ahead
use strict;
use warnings;
# Dependencies
use File::Slurp;
use Getopt::Std;
require RPC::XML;
require RPC::XML::Client;
my $satisfied = 0;
my $address = "";
my $email = "";
my $port = 2443;
my $options=();
getopts("ha:k:s:e:p:", \%main::options);
if (defined $main::options{h}) {
print "This program checks InterWorx mail queue\n";
print "Required arguments:\n";
print " -h see this message\n";
print " -a address of the NodeWorx server\n";
print " -s file where the super secret password is kept\n";
print " -e email of the authorized staffer or bot\n";
print " -k file where API key is held\n";
print "Provide either API key or email+password\n";
print "Optional settings:\n";
print " -p sets a port number, if not set, defaults to 2443\n";
exit 0;
}
if (defined $main::options{a}) {
$satisfied += 1;
$address = $main::options{a};
}
if (defined $main::options{s}) {
$satisfied += 2;
$main::secret_file = $main::options{s};
}
if (defined $main::options{e}) {
$satisfied += 4;
$email = $main::options{e};
}
if (defined $main::options{k}) {
$satisfied += 8;
$main::key_file = $main::options{k};
}
if (defined $main::options{p}) {
$port = $main::options{p};
}
if (($satisfied != 7 ) && ( $satisfied != 9)) {
print "ls_mailq perl script is missing argument(s)\n";
print "Try with -h to see what is required\n";
exit -1;
} elsif (($satisfied & 14) == 14) {
print "ls_mailq can only work with email+pass or API key\n";
exit -2;
}
my $cli = RPC::XML::Client->new("https://$address:$port/xmlrpc");
# Let's prepare $apikey for when we use email+address
if(($satisfied & 6) == 6) {
open my $secret_file_info, $main::secret_file or die "Could not open $main::secret_file: $!\n";
my $password = <$secret_file_info>;
close $secret_file_info;
chomp $password;
$main::WishIWroteThisInC = RPC::XML::struct->new({
'email' => RPC::XML::string->new("$email"),
'password' => RPC::XML::string->new("$password")
});
} elsif(($satisfied & 8) == 8) {
# Let's prepare $apikey for when we use an actual API key
open my $key_file_info, $main::key_file or die "Could not open $main::key_file: $!\n";
$main::WishIWroteThisInC = read_file($main::key_file);
close $key_file_info;
chomp $main::WishIWroteThisInC;
}
my $apikey = $main::WishIWroteThisInC;
my $ctrl_name = RPC::XML::string->new('/nodeworx/mail/queue');
my $action = RPC::XML::string->new('listStats');
my $input = RPC::XML::struct->new({});
my $resp = $cli->send_request('iworx.route',
$apikey,
$ctrl_name,
$action,
$input);
my $results = $resp->value();
if(ref($resp) ne 'RPC::XML::struct') {
print "Failed to send valid call\n";
print "Got: ",ref($resp),"\n";
print "Expected: RPC::XML::struct\n";
if (ref($results->{payload}) eq 'ARRAY') {
my @payload = @{$results->{payload}};
foreach (@payload) {
my @key = @{$_};
print "@key" . "\n";
}
} else {
print $results->{payload}, "\n";
}
exit -4;
} elsif ($results->{status} != 0) {
print "Bad response status\n";
print "Got: ",$results->{stats},"\n";
print "Expected: 0\n";
if (ref($results->{payload}) eq 'ARRAY') {
my @payload = @{$results->{payload}};
foreach (@payload) {
my @key = @{$_};
print "@key" . "\n";
}
} else {
print $results->{payload}, "\n";
}
exit -8;
}
print $address," mail queue summary with InterWorx API\n";
print "Remote: ",$results->{payload}[0]{count},"\n";
print "Local: ",$results->{payload}[1]{count},"\n";
print "Todo: ",$results->{payload}[2]{count},"\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment