X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=FS%2FFS%2FCron%2Fcheck.pm;h=9d3ffbdbd61e0a27be04a27f1bf3b07bbddcff63;hb=74e058c8a010ef6feb539248a550d0bb169c1e94;hp=7e4655f758725d33de8cc53206511cd1f41a778a;hpb=bc5eaa0c8d078da493d6101cbd98c7319003f748;p=freeside.git diff --git a/FS/FS/Cron/check.pm b/FS/FS/Cron/check.pm index 7e4655f75..9d3ffbdbd 100644 --- a/FS/FS/Cron/check.pm +++ b/FS/FS/Cron/check.pm @@ -6,6 +6,9 @@ use vars qw( @ISA @EXPORT_OK $DEBUG $FS_RUN $error_msg ); use Exporter; use LWP::UserAgent; +use HTTP::Request; +use URI::Escape; +use Email::Send; use FS::Conf; use FS::Record qw(qsearch); use FS::cust_pay_pending; @@ -13,6 +16,7 @@ use FS::cust_pay_pending; @ISA = qw( Exporter ); @EXPORT_OK = qw( check_queued check_selfservice check_apache check_bop_failures + check_sg check_sg_login check_sgng alert error_msg ); @@ -44,6 +48,79 @@ sub check_selfservice { return 1; } +sub check_sg { + my $conf = new FS::Conf; + #different trigger if they ever stop using multicustomer_hack ? + return 1 unless $conf->exists('sg-multicustomer_hack'); + + my $ua = new LWP::UserAgent; + $ua->agent("FreesideCronCheck/0.1 " . $ua->agent); + + my $USER = $conf->config('sg-ping_username'); + my $PASS = $conf->config('sg-ping_password'); + my $req = new HTTP::Request GET=>"https://$USER:$PASS\@localhost/sg/ping.cgi"; + my $res = $ua->request($req); + + return 1 if $res->is_success + && $res->content =~ /OK/ + && $res->content !~ /error/i; #doh, the error message includes "OK" + + $error_msg = $res->is_success ? $res->content : $res->status_line; + return 0; +} + +sub check_sg_login { + my $conf = new FS::Conf; + #different trigger if they ever stop using multicustomer_hack ? + return 1 unless $conf->exists('sg-multicustomer_hack'); + + my $ua = new LWP::UserAgent; + $ua->agent("FreesideCronCheck/0.1 " . $ua->agent); + + my $USER = $conf->config('sg-ping_username'); + my $PASS = $conf->config('sg-ping_password'); + my $USERNAME = $conf->config('sg-login_username'); + my $req = new HTTP::Request + GET=>"https://$USER:$PASS\@localhost/sg/start.cgi?". + 'username='. uri_escape($USERNAME); + my $res = $ua->request($req); + + return 1 if $res->is_success + && $res->content =~ /[\da-f]{32}/i #session_id + && $res->content !~ /error/i; + + $error_msg = $res->is_success ? $res->content : $res->status_line; + return 0; +} + +sub check_sgng { + my $conf = new FS::Conf; + #different trigger if they ever stop using multicustomer_hack ? + return 1 unless $conf->exists('sg-multicustomer_hack'); + + eval 'use RPC::XML; use RPC::XML::Client;'; + if ($@) { $error_msg = $@; return 0; }; + + my $cli = RPC::XML::Client->new('https://localhost/selfservice/xmlrpc.cgi'); + my $resp = $cli->send_request('FS.SelfService.XMLRPC.ping'); + + return 1 if ref($resp) + && ! $resp->is_fault + && ref($resp->value) + && $resp->value->{'pong'} == 1; + + #hua + $error_msg = ref($resp) + ? ( $resp->is_fault + ? $resp->string + : ( ref($resp->value) ? $resp->value->{'error'} + : $resp->value + ) + ) + : $resp; + return 0; +} + sub _check_fsproc { my $arg = shift; _check_pidfile( "freeside-$arg.pid" ); @@ -72,7 +149,7 @@ sub check_apache { } #and now for something entirely different... -my $num_consecutive_bop_failures = 40; +my $num_consecutive_bop_failures = 60; sub check_bop_failures { return 1 if grep { $_->statustext eq 'captured' }