/**
  * 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);
 }