Example #1
0
File: Logs.php Project: scalr/scalr
 /**
  * @param   int         $farmId
  * @param   string      $serverId
  * @param   string      $eventId
  * @param   int         $scriptId
  * @param   string      $eventServerId
  * @param   int         $schedulerId
  * @param   string      $byDate
  * @param   string      $fromTime
  * @param   string      $toTime
  * @param   string      $status
  * @param   string      $event
  * @param   JsonData    $sort
  * @param   int         $start
  * @param   int         $limit
  * @param   string      $query
  * @throws  Scalr_Exception_Core
  * @throws  Scalr_Exception_InsufficientPermissions
  */
 public function xListOrchestrationLogsAction($farmId = 0, $serverId = '', $eventId = '', $scriptId = 0, $eventServerId = '', $schedulerId = 0, $byDate = '', $fromTime = '', $toTime = '', $status = '', $event = '', JsonData $sort, $start = 0, $limit = 20, $query = '')
 {
     $this->request->restrictAccess(Acl::RESOURCE_LOGS_ORCHESTRATION_LOGS);
     $o = new Entity\OrchestrationLog();
     $f = new Entity\Farm();
     $criteria = [Entity\Farm::STMT_FROM => "{$o->table()} JOIN {$f->table('f')} ON {$f->columnId('f')} = {$o->columnFarmId}", Entity\Farm::STMT_WHERE => $this->request->getFarmSqlQuery() . " AND {$f->columnEnvId('f')} = " . $this->db->qstr($this->getEnvironmentId())];
     if ($farmId) {
         $criteria[] = ['farmId' => $farmId];
     }
     if ($serverId) {
         $criteria[] = ['serverId' => $serverId];
     }
     if ($eventId) {
         $criteria[] = ['eventId' => $eventId];
     }
     if ($eventServerId) {
         $criteria[] = ['eventServerId' => $eventServerId];
     }
     if ($scriptId) {
         /* @var $script Script */
         $script = Script::findPk($scriptId);
         if ($script && $this->request->hasPermissions($script)) {
             $scriptName = preg_replace("/[^A-Za-z0-9]+/", "_", $script->name);
             $criteria[] = ['scriptName' => $scriptName];
         }
     }
     if ($query || $event) {
         $logEntity = new OrchestrationLog();
         $eventEntity = new Event();
         $criteria[AbstractEntity::STMT_FROM] = $criteria[AbstractEntity::STMT_FROM] . "\n                LEFT JOIN {$eventEntity->table('e')}\n                ON {$logEntity->columnEventId} = {$eventEntity->columnEventId('e')}\n            ";
         if ($event && $query) {
             $query = $this->db->qstr('%' . $query . '%');
             $criteria[AbstractEntity::STMT_WHERE] = $criteria[AbstractEntity::STMT_WHERE] . " AND (\n                    {$eventEntity->columnType('e')} = {$this->db->qstr($event)}\n                    OR ({$logEntity->columnType} LIKE {$query}\n                    AND {$logEntity->columnScriptName} LIKE {$query})\n                )";
         } else {
             if ($event) {
                 $criteria[AbstractEntity::STMT_WHERE] = $criteria[AbstractEntity::STMT_WHERE] . " AND (\n                    {$eventEntity->columnType('e')} = {$this->db->qstr($event)}\n                )";
             } else {
                 $query = $this->db->qstr('%' . $query . '%');
                 $criteria[AbstractEntity::STMT_WHERE] = $criteria[AbstractEntity::STMT_WHERE] . " AND (\n                    ({$eventEntity->columnType('e')} LIKE {$query}\n                    OR {$logEntity->columnType} LIKE {$query}\n                    OR {$logEntity->columnScriptName} LIKE {$query})\n                )";
             }
         }
     }
     if ($schedulerId) {
         $criteria[] = ['taskId' => $schedulerId];
     }
     if ($byDate) {
         try {
             $tz = $this->user->getSetting(Scalr_Account_User::SETTING_UI_TIMEZONE) ?: 'UTC';
             $tz = new DateTimeZone($tz);
             $dtS = new DateTime($byDate, $tz);
             $dtE = new DateTime($byDate, $tz);
             if ($fromTime) {
                 $dtS = DateTime::createFromFormat('Y-m-d H:i', "{$byDate} {$fromTime}", $tz);
             }
             if ($toTime) {
                 $dtE = DateTime::createFromFormat('Y-m-d H:i', "{$byDate} {$toTime}", $tz);
             } else {
                 $dtE = $dtE->add(new DateInterval('P1D'));
             }
             if ($dtS && $dtE) {
                 Scalr_Util_DateTime::convertTimeZone($dtS);
                 Scalr_Util_DateTime::convertTimeZone($dtE);
                 $criteria[] = ['added' => ['$gt' => $dtS]];
                 $criteria[] = ['added' => ['$lt' => $dtE]];
             }
         } catch (Exception $e) {
         }
     }
     if ($status === 'success') {
         $criteria[] = ['execExitCode' => 0];
     } else {
         if ($status === 'failure') {
             $criteria[] = ['execExitCode' => ['$ne' => 0]];
         }
     }
     $logs = OrchestrationLog::find($criteria, null, Scalr\UI\Utils::convertOrder($sort, ['id' => false], ['id', 'added']), $limit, $start, true);
     $data = $this->prepareOrchestrationLogData($logs);
     $this->response->data(['data' => $data, 'total' => $logs->totalNumber]);
 }