Example #1
0
 public static function getNextJobPriority($jobType)
 {
     //$priorities = array(1 => 33, 2 => 27, 3 => 20, 4 => 13, 5 => 7);
     $priorities = kConf::get('priority_percent');
     $createdAt = time() - kConf::get('priority_time_range');
     //		$createdAt = kConf::get('priority_time_range');
     $c = new Criteria();
     $c->add(BatchJobPeer::CREATED_AT, $createdAt, Criteria::GREATER_THAN);
     $c->add(BatchJobPeer::JOB_TYPE, $jobType);
     $c->add(BatchJobPeer::STATUS, BatchJob::BATCHJOB_STATUS_PENDING);
     $c->clearSelectColumns();
     $c->addSelectColumn('MAX(' . BatchJobPeer::PRIORITY . ')');
     $stmt = BatchJobPeer::doSelectStmt($c, myDbHelper::getConnection(myDbHelper::DB_HELPER_CONN_PROPEL2));
     $maxPriority = $stmt->fetchColumn();
     // gets the current queues
     $c = new Criteria();
     $c->add(BatchJobPeer::CREATED_AT, $createdAt, Criteria::GREATER_THAN);
     $c->add(BatchJobPeer::JOB_TYPE, $jobType);
     $c->add(BatchJobPeer::STATUS, BatchJob::BATCHJOB_STATUS_PENDING, Criteria::GREATER_THAN);
     $c->addGroupByColumn(BatchJobPeer::PRIORITY);
     // To prevent stress on the master DB - use the slave for checking the queue sizes
     $queues = BatchJobPeer::doCountGroupBy($c, myDbHelper::getConnection(myDbHelper::DB_HELPER_CONN_PROPEL2));
     // copy the queues and calcs the total
     $total = 0;
     $queues_size = array();
     foreach ($queues as $queue) {
         $queues_size[$queue['PRIORITY']] = $queue[BatchJobPeer::COUNT];
         $total += $queue[BatchJobPeer::COUNT];
     }
     // go over the priorities and see if its percent not used
     foreach ($priorities as $priority => $top_percent) {
         if ($priority > $maxPriority) {
             continue;
         }
         if (!isset($queues_size[$priority])) {
             return $priority;
         }
         $percent = $queues_size[$priority] / ($total / 100);
         if ($percent < $top_percent) {
             return $priority;
         }
     }
     return 1;
 }