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; }