/** * Funkce pro načtení plných výsledků úlohy z PMML * * @return TaskState */ public function importResultsPMML() { #region zjištění jména souboru, který se má importovat (a kontrola, jestli tu nějaký takový soubor je) $importData = $this->task->getImportData(); $taskState = $this->task->getTaskState(); if (!empty($importData)) { $filename = array_shift($importData); if (file_exists($filename)) { //FIXME optimalizace načítání výsledků - vyřešení duplicitních cedentů (aby nedocházelo k jejich duplicitnímu importu $importedRulesCount = 0; $this->fullParseRulesPMML(simplexml_load_file($filename), $importedRulesCount, true); #region aktualizace TaskState $taskState->importData = $importData; $taskState->importState = Task::IMPORT_STATE_WAITING; if (empty($importData)) { if ($taskState->state == Task::STATE_SOLVED || $taskState->state == Task::STATE_INTERRUPTED) { $taskState->importState = Task::IMPORT_STATE_DONE; } } #endregion aktualizace TaskState //smažeme importovaný soubor FileSystem::delete($filename); } } #endregion return $taskState; }
/** * Funkce pro zastavení dolování * @return TaskState */ public function stopMining() { $taskState = $this->task->getTaskState(); if ($taskState->state == Task::STATE_SOLVED || $taskState->state != Task::STATE_IN_PROGRESS) { return $taskState; } try { $this->cancelRemoteMinerTask($this->getRemoteMinerTaskName()); $this->task->state = Task::STATE_INTERRUPTED; } catch (\Exception $e) { } return $this->task->getTaskState(); }
/** * Funkce pro připravení úlohy na základě jednoduchého pole s konfigurací (například přes API) * *@param Miner $miner * @param array $settingsArr * @param Task|null $updateTask=null * @return Task * @throws \InvalidArgumentException */ public function prepareSimpleTask(Miner $miner, $settingsArr, Task $updateTask = null) { //prepare apropriate task... if ($updateTask instanceof Task) { $task = $updateTask; if ($task->miner->minerId != $miner->minerId) { throw new \InvalidArgumentException('Invalid combination of miner and task!'); } } else { $task = new Task(); } //prepare task settings from $settings if (isset($settingsArr['succedent']) && !isset($settingsArr['consequent'])) { $settingsArr['consequent'] = $settingsArr['succedent']; } $taskSettings = ['limitHits' => max(1, @$settingsArr['limitHits']), 'rule0' => ['id' => 0, 'groupFields' => true, 'antecedent' => ['type' => 'cedent', 'connective' => ['id' => 2, 'name' => 'AND', 'type' => 'and'], 'level' => 1, 'children' => $this->prepareSimpleTaskAttributesArr(@$settingsArr['antecedent'])], 'IMs' => $this->prepareSimpleTaskIMsArr(@$settingsArr['IMs']), 'specialIMs' => $this->prepareSimpleTaskSpecialIMsArr(@$settingsArr['specialIMs']), 'succedent' => ['type' => 'cedent', 'connective' => ['id' => 2, 'name' => 'AND', 'type' => 'and'], 'level' => 1, 'children' => $this->prepareSimpleTaskAttributesArr($settingsArr['consequent'])]], 'rules' => 1, 'debug' => false, 'strict' => false, 'taskMode' => 'task', 'taskName' => $settingsArr['name']]; //configure task object $task->miner = $miner; $task->type = $miner->type; $task->name = $settingsArr['name']; $task->state = Task::STATE_NEW; $task->setTaskSettings($taskSettings); return $task; }