Last active
August 29, 2015 14:07
-
-
Save grepwood/126298cf11401779effa to your computer and use it in GitHub Desktop.
Lists mail queue count with InterWorx API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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