public function getNextPendingJob($type = null)
    {
        // Filter jobs by type
        $type = $type ?: QueuedJob::QUEUED;
        $list = QueuedJobDescriptor::get()
            ->filter('JobType', $type)
            ->sort('ID', 'ASC');

        // see if there's any blocked jobs that need to be resumed
        /** @var QueuedJobDescriptor $waitingJob */
        $waitingJob = $list
            ->filter('JobStatus', QueuedJob::STATUS_WAIT)
            ->first();
        if ($waitingJob) {
            return $waitingJob;
        }

        // If there's an existing job either running or pending, the lets just return false to indicate
        // that we're still executing
        $runningJob = $list
            ->filter('JobStatus', [QueuedJob::STATUS_INIT, QueuedJob::STATUS_RUN])
            ->first();
        if ($runningJob) {
            return false;
        }

        // Otherwise, lets find any 'new' jobs that are waiting to execute
        /** @var QueuedJobDescriptor $newJob */
        $newJob = $list
            ->filter('JobStatus', QueuedJob::STATUS_NEW)
            ->where(sprintf(
                '"StartAfter" < \'%s\' OR "StartAfter" IS NULL',
                DBDatetime::now()->getValue()
            ))
            ->first();

        return $newJob;
    }
public function getNextPendingJob($type = null)
    {
        // Filter jobs by type
        $type = $type ?: QueuedJob::QUEUED;
        $list = QueuedJobDescriptor::get()
            ->filter('JobType', $type)
            ->sort('ID', 'ASC');

        // see if there's any blocked jobs that need to be resumed
        /** @var QueuedJobDescriptor $waitingJob */
        $waitingJob = $list
            ->filter('JobStatus', QueuedJob::STATUS_WAIT)
            ->first();
        if ($waitingJob) {
            return $waitingJob;
        }

        // If there's an existing job either running or pending, the lets just return false to indicate
        // that we're still executing
        $runningJob = $list
            ->filter('JobStatus', [QueuedJob::STATUS_INIT, QueuedJob::STATUS_RUN])
            ->first();
        if ($runningJob) {
            return false;
        }

        // Otherwise, lets find any 'new' jobs that are waiting to execute
        /** @var QueuedJobDescriptor $newJob */
        $newJob = $list
            ->filter('JobStatus', QueuedJob::STATUS_NEW)
            ->where(sprintf(
                '"StartAfter" < \'%s\' OR "StartAfter" IS NULL',
                DBDatetime::now()->getValue()
            ))
            ->first();

        return $newJob;
    }
public function getNextPendingJob ( $ type = null ) { // Filter jobs by type $ type = $ type ? : QueuedJob :: QUEUED ; $ list = QueuedJobDescriptor :: get ( ) -> filter ( 'JobType' , $ type ) -> sort ( 'ID' , 'ASC' ) ; // see if there's any blocked jobs that need to be resumed /** @var QueuedJobDescriptor $waitingJob */ $ waitingJob = $ list -> filter ( 'JobStatus' , QueuedJob :: STATUS_WAIT ) -> first ( ) ; if ( $ waitingJob ) { return $ waitingJob ; } // If there's an existing job either running or pending, the lets just return false to indicate // that we're still executing $ runningJob = $ list -> filter ( 'JobStatus' , [ QueuedJob :: STATUS_INIT , QueuedJob :: STATUS_RUN ] ) -> first ( ) ; if ( $ runningJob ) { return false ; } // Otherwise, lets find any 'new' jobs that are waiting to execute /** @var QueuedJobDescriptor $newJob */ $ newJob = $ list -> filter ( 'JobStatus' , QueuedJob :: STATUS_NEW ) -> where ( sprintf ( '"StartAfter" < \'%s\' OR "StartAfter" IS NULL' , DBDatetime :: now ( ) -> getValue ( ) ) ) -> first ( ) ; return $ newJob ; }
Check the current job queues and see if any of the jobs currently in there should be started. If so,
return the next job that should be executed

@param string $type Job type

@return QueuedJobDescriptor|false
Check the current job queues and see if any of the jobs currently in there should be started . If so return the next job that should be executed