X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fqueue.pm;h=1b52ac4fc93956c4f1f1cf3b90e4570f61d00858;hb=b7cf1606a66cca95e3540f803ffa66d223f23a40;hp=381e418c9358105d05656d9486ab7e4f82df2b8a;hpb=0afb8f9e5fa926907c43fa4a316b65e3aa834e71;p=freeside.git diff --git a/FS/FS/queue.pm b/FS/FS/queue.pm index 381e418c9..1b52ac4fc 100644 --- a/FS/FS/queue.pm +++ b/FS/FS/queue.pm @@ -1,17 +1,19 @@ package FS::queue; +use base qw(FS::Record); use strict; -use vars qw( @ISA @EXPORT_OK $DEBUG $conf $jobnums); +use vars qw( @EXPORT_OK $DEBUG $conf $jobnums); use Exporter; +use MIME::Base64; +use Storable qw( nfreeze thaw ); use FS::UID qw(myconnect); use FS::Conf; use FS::Record qw( qsearch qsearchs dbh ); #use FS::queue; use FS::queue_arg; use FS::queue_depend; -use FS::cust_svc; +use FS::CGI qw(rooturl); -@ISA = qw(FS::Record); @EXPORT_OK = qw( joblisting ); $DEBUG = 0; @@ -64,6 +66,20 @@ Job status (new, locked, or failed) Freeform text status message +=cut + +sub statustext { + my $self = shift; + if ( defined ( $_[0] ) ) { + $self->SUPER::statustext(@_); + } else { + my $value = $self->SUPER::statustext(); + my $rooturl = rooturl(); + $value =~ s/%%%ROOTURL%%%/$rooturl/g; + $value; + } +} + =item _date UNIX timestamp @@ -142,9 +158,11 @@ sub insert { } foreach my $arg ( @args ) { + my $freeze = ref($arg) ? 'Y' : ''; my $queue_arg = new FS::queue_arg ( { 'jobnum' => $self->jobnum, - 'arg' => $arg, + 'frozen' => $freeze, + 'arg' => $freeze ? encode_base64(nfreeze($arg)) : $arg,# always freeze? } ); $error = $queue_arg->insert; if ( $error ) { @@ -174,35 +192,18 @@ deleted as well sub delete { my $self = shift; - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my @del = qsearch( 'queue_arg', { 'jobnum' => $self->jobnum } ); - push @del, qsearch( 'queue_depend', { 'depend_jobnum' => $self->jobnum } ); - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $del ( @del ) { - $error = $del->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; + my $reportname = ''; + if ( $self->status =~/^done/ ) { + my $dropstring = rooturl(). '/misc/queued_report\?report='; + if ($self->statustext =~ /.*$dropstring([.\w]+)\>/) { + $reportname = "$FS::UID::cache_dir/cache.$FS::UID::datasrc/report.$1"; } } - $dbh->commit or die $dbh->errstr if $oldAutoCommit; + my $error = $self->SUPER::delete; + return $error if $error; + + unlink $reportname if $reportname; ''; @@ -231,7 +232,7 @@ sub check { $self->ut_numbern('jobnum') || $self->ut_anything('job') || $self->ut_numbern('_date') - || $self->ut_enum('status',['', qw( new locked failed )]) + || $self->ut_enum('status',['', qw( new locked failed done )]) || $self->ut_anything('statustext') || $self->ut_numbern('svcnum') ; @@ -254,36 +255,23 @@ Returns a list of the arguments associated with this job. sub args { my $self = shift; - map $_->arg, qsearch( 'queue_arg', - { 'jobnum' => $self->jobnum }, - '', - 'ORDER BY argnum' - ); + map { $_->frozen ? thaw(decode_base64($_->arg)) : $_->arg } + qsearch( 'queue_arg', + { 'jobnum' => $self->jobnum }, + '', + 'ORDER BY argnum' + ); } =item cust_svc Returns the FS::cust_svc object associated with this job, if any. -=cut - -sub cust_svc { - my $self = shift; - qsearchs('cust_svc', { 'svcnum' => $self->svcnum } ); -} - =item queue_depend Returns the FS::queue_depend objects associated with this job, if any. (Dependancies that must complete before this job can be run). -=cut - -sub queue_depend { - my $self = shift; - qsearch('queue_depend', { 'jobnum' => $self->jobnum } ); -} - =item depend_insert OTHER_JOBNUM Inserts a dependancy for this job - it will not be run until the other job @@ -347,7 +335,7 @@ If there is an error, returns the error, otherwise returns false. use vars qw($_update_statustext_dbh); sub update_statustext { my( $self, $statustext ) = @_; - return '' if $statustext eq $self->statustext; + return '' if $statustext eq $self->get('statustext'); #avoid rooturl expansion warn "updating statustext for $self to $statustext" if $DEBUG; $_update_statustext_dbh ||= myconnect; @@ -358,7 +346,7 @@ sub update_statustext { $sth->execute($statustext, $self->jobnum) or return $sth->errstr; $_update_statustext_dbh->commit or die $_update_statustext_dbh->errstr; - $self->statustext($statustext); + $self->set('statustext', $statustext); #avoid rooturl expansion ''; #my $new = new FS::queue { $self->hash };