use FS::Record qw(qsearch);
use FS::queue;
use FS::queue_depend;
+use FS::queue_stat;
use FS::Log;
use FS::Cron::expire_user_pref qw( expire_user_pref );
foreach my $job ( @jobs ) {
+ my $start_date = time;
+
$log->debug('locking queue job', object => $job);
my %hash = $job->hash;
dbh->{'private_profile'} = {} if UNIVERSAL::can(dbh, 'sprintProfile');
#auto-use classes...
- if ( $ljob->job =~ /(FS::(part_export|cust_main|cust_pkg|Cron)::\w+)::/
+ if ( $ljob->job =~ /(FS::(part_export|cust_main|cust_pkg|part_pkg|Cron)::\w+)::/
|| $ljob->job =~ /(FS::\w+)::/
)
{
$log->info('starting job ('.$ljob->job.')');
warn 'running "&'. $ljob->job. '('. join(', ', @args). ")\n" if $DEBUG;
local $FS::UID::AutoCommit = 0; # so that we can clean up failures
- eval $eval; #throw away return value? suppose so
+ do {
+ # switch user only if a job user is available
+ local $FS::CurrentUser::CurrentUser = $ljob->access_user || $FS::CurrentUser::CurrentUser;
+ eval $eval; #throw away return value? suppose so
+ };
if ( $@ ) {
dbh->rollback;
my %hash = $ljob->hash;
dbh->commit; # for the job itself
}
+ if ( $ljob->job eq 'FS::cust_main::queued_bill' ) {
+ my $queue_stat = new FS::queue_stat {
+ 'jobnum' => $ljob->jobnum,
+ 'job' => $ljob->job,
+ 'custnum' => $ljob->custnum,
+ 'insert_date' => $ljob->_date,
+ 'start_date' => $start_date,
+ 'end_date' => time,
+ };
+ my $error = $queue_stat->insert;
+ die $error if $error;
+ dbh->commit; #for the stat
+ }
+
if ( UNIVERSAL::can(dbh, 'sprintProfile') ) {
open(PROFILE,">%%%FREESIDE_LOG%%%/queueprofile.$$.".time)
or die "can't open profile file: $!";