/** * Akce pro inicializaci mineru (vytvoření metasource) * @param int $id * @throws BadRequestException */ public function actionInitMiner($id) { //najdeme miner a zkontroluejem oprávnění $miner = $this->findMinerWithCheckAccess($id); //zkontrolujeme stav metasource if ($miner->metasource) { //jde o miner s existujícím metasource => zkontrolujeme jeho stav switch ($miner->metasource->state) { case Metasource::STATE_AVAILABLE: $this->redirect('openMiner', ['id' => $id]); return; case Metasource::STATE_PREPARATION: $metasourceTasks = $miner->metasource->metasourceTasks; if (!empty($metasourceTasks)) { foreach ($metasourceTasks as $metasourceTaskItem) { if (empty($metasourceTaskItem->attributes)) { //TODO tohle je potřeba opravit (došlo ke změně konstrukce MetasourceTask, žádný attribute už tam není) $metasourceTask = $metasourceTaskItem; break; } } } break; case Metasource::STATE_UNAVAILABLE: throw new BadRequestException('Requested miner is not available!'); } } if (empty($metasourceTask)) { //jde o miner bez metasource $metasourceTask = $this->metasourcesFacade->startMinerMetasourceInitialization($miner, $this->minersFacade); } $this->template->miner = $miner; $this->template->metasourceTask = $metasourceTask; }
/** * Akce pro vytvoření nového uživatelského účtu na základě zaslaných hodnot * @SWG\Post( * tags={"Miners"}, * path="/miners", * summary="Create new miner", * security={{"apiKey":{}},{"apiKeyHeader":{}}}, * produces={"application/json", "application/xml"}, * consumes={"application/json", "application/xml"}, * @SWG\Parameter( * description="Miner", * name="miner", * required=true, * @SWG\Schema(ref="#/definitions/MinerInput"), * in="body" * ), * @SWG\Response( * response=201, * description="Miner created successfully, returns details of Miner.", * @SWG\Schema(ref="#/definitions/MinerResponse") * ), * @SWG\Response( * response=422, * description="Sent values are not acceptable!", * @SWG\Schema(ref="#/definitions/InputErrorResponse") * ) * ) */ public function actionCreate() { //prepare Miner from input values /** @var Miner $miner */ $miner = new Miner(); /** @var array $data */ $data = $this->input->getData(); $miner->name = $data['name']; $miner->type = $data['type']; $miner->datasource = $this->datasource; if (!empty($this->ruleSet)) { $miner->ruleSet = $this->ruleSet; } $miner->created = new \DateTime(); $miner->user = $this->getCurrentUser(); $this->minersFacade->saveMiner($miner); $metasourceTask = $this->metasourcesFacade->startMinerMetasourceInitialization($miner, $this->minersFacade); while ($metasourceTask && $metasourceTask->state != MetasourceTask::STATE_DONE) { $metasourceTask = $this->metasourcesFacade->initializeMinerMetasource($miner, $metasourceTask); usleep(100); } $this->metasourcesFacade->deleteMetasourceTask($metasourceTask); //send response $this->actionRead($miner->minerId); }