/** * * @return Gpf_Db_Task */ protected function getPendingTask($lastRunTaskId, $inclusion_type, $inclusion_tasks) { $sql = new Gpf_SqlBuilder_SelectBuilder(); $sql->select->addAll(Gpf_Db_Table_Tasks::getInstance()); $sql->from->add(Gpf_Db_Table_Tasks::getName()); $sql->where->add(Gpf_Db_Table_Tasks::DATEFINISHED, '=', null); $sql->where->add(Gpf_Db_Table_Tasks::TYPE, '=', Gpf_Db_Task::TYPE_CRON); if ($inclusion_type == self::INCLUDE_TASKS) { $sql->where->add(Gpf_Db_Table_Tasks::CLASSNAME, 'IN', $inclusion_tasks); } else { if ($inclusion_type == self::EXCLUDE_TASKS) { $sql->where->add(Gpf_Db_Table_Tasks::CLASSNAME, 'NOT IN', $inclusion_tasks); } } $andCondition = new Gpf_SqlBuilder_CompoundWhereCondition(); $andCondition->add(Gpf_Db_Table_Tasks::IS_EXECUTING, '<>', Gpf::YES, 'OR'); $orCondition = new Gpf_SqlBuilder_CompoundWhereCondition(); $orCondition->add(Gpf_Db_Table_Tasks::IS_EXECUTING, '=', Gpf::YES); $orCondition->add(Gpf_Db_Table_Tasks::DATECHANGED, '<', Gpf_Common_DateUtils::getDateTime(time() - self::MAX_TASK_RUN_TIME_WITHOUT_UPDATE)); $andCondition->addCondition($orCondition, 'OR'); $sql->where->addCondition($andCondition); $sleepCondition = new Gpf_SqlBuilder_CompoundWhereCondition(); $sleepCondition->add(Gpf_Db_Table_Tasks::SLEEP_UNTIL, '=', null, 'OR'); $sleepCondition->add(Gpf_Db_Table_Tasks::SLEEP_UNTIL, '<=', Gpf_Common_DateUtils::now(), 'OR'); $sql->where->addCondition($sleepCondition); $sql->orderBy->add(Gpf_Db_Table_Tasks::WORKING_AREA_TO . '-' . Gpf_Db_Table_Tasks::WORKING_AREA_FROM, false); $sql->orderBy->add(Gpf_Db_Table_Tasks::DATECHANGED); $recordset = $sql->getAllRows(); if ($recordset->getSize() == 0) { return false; } if ($lastRunTaskId == null) { return $this->getTask($recordset->get(0)); } $recordId = $this->findLastRunTaskRecordsetPosition($recordset, $lastRunTaskId); if ($recordId === null) { return $this->getTask($recordset->get(0)); } if ($recordId == $recordset->getSize() - 1) { return false; } if ($recordset->get($recordId + 1) == null) { return false; } return $this->getTask($recordset->get($recordId + 1)); }
/** * @return Gpf_Db_Task */ private function getMaxFreeWorker() { $select = new Gpf_SqlBuilder_SelectBuilder(); $select->select->addAll(Gpf_Db_Table_Tasks::getInstance()); $select->from->add(Gpf_Db_Table_Tasks::getName()); $select->where->add(Gpf_Db_Table_Tasks::CLASSNAME, '=', $this->getClassName()); $select->where->add(Gpf_Db_Table_Tasks::DATEFINISHED, '=', null); $select->orderBy->add(Gpf_Db_Table_Tasks::WORKING_AREA_TO . '-' . Gpf_Db_Table_Tasks::WORKING_AREA_FROM, false); $select->limit->set(0, 1); $workerId = $select->getOneRow()->get(Gpf_Db_Table_Tasks::ID); $task = new Gpf_Db_Task(); $task->setId($workerId); $task->load(); return $task; }
public function init() { $this->setTable(Gpf_Db_Table_Tasks::getInstance()); parent::init(); }