public function extend(IcingaDoctrine_Query $query, array $params)
 {
     // target, host or service
     $target = $params["target"];
     // alias for the table to join from
     $alias = $params["alias"];
     $this->user = $this->getContext()->getUser()->getNsmUser();
     $aliasAbbr = "cv";
     $impl = ++Api_Views_Extender_CustomVariableExtenderModel::$impl;
     switch ($target) {
         case 'host':
             $aliasAbbr = "h_cv_{$impl}";
             $target = IcingaIPrincipalConstants::TYPE_CUSTOMVAR_HOST;
             break;
         case 'service':
             $aliasAbbr = "s_cv_{$impl}";
             $target = IcingaIPrincipalConstants::TYPE_CUSTOMVAR_SERVICE;
             break;
     }
     $targetVals = $this->user->getTargetValues($target, true)->toArray();
     if (empty($targetVals)) {
         return;
     }
     $keymap = array("cv_name" => "varname", "cv_value" => "varvalue");
     $pairs = array();
     $CVcredentials = array();
     // build correct array with the data we need
     foreach ($targetVals as $targetData) {
         if (isset($targetData["tv_pt_id"]) and isset($targetData["tv_key"])) {
             $tvid = $targetData["tv_pt_id"];
             if ($targetData["tv_key"] == "cv_name") {
                 $CVcredentials[$tvid]["name"] = $targetData["tv_val"];
             } else {
                 if ($targetData["tv_key"] == "cv_value") {
                     $CVcredentials[$tvid]["value"] = $targetData["tv_val"];
                 }
             }
         }
     }
     // make a join for each CV permission
     $query->leftJoin("{$alias}.customvariables " . $aliasAbbr);
     // now we build the sql data
     foreach ($CVcredentials as $tvid => $cvdata) {
         // skip incomplete sets
         if (!isset($cvdata["name"]) || !isset($cvdata["value"])) {
             continue;
         }
         $pairs[] = "({$aliasAbbr}.varname LIKE '" . $cvdata["name"] . "' and {$aliasAbbr}.varvalue LIKE '" . $cvdata["value"] . "')";
     }
     if ($target == IcingaIPrincipalConstants::TYPE_CUSTOMVAR_SERVICE) {
         $pairs[] = $params["alias"] . '.service_object_id IS NULL';
     }
     $query->orWhere(join(" OR ", $pairs));
 }
 public function getSummaryStatusValues($type, $field = 'latency')
 {
     $this->checkObjectType($type);
     $table = null;
     $joinTable = null;
     $prefix = null;
     if ($type === IcingaConstants::TYPE_HOST) {
         $table = 'IcingaHoststatus';
         $joinTable = 'host';
         $prefix = 'host';
     } else {
         $table = 'IcingaServicestatus';
         $joinTable = 'service';
         $prefix = 'service';
     }
     $data = IcingaDoctrine_Query::create()->from($table . ' ' . $prefix)->select(sprintf($prefix . '.active_checks_enabled, COUNT(%1$s) as count, SUM(%1$s) as sum,MAX(%1$s) as max,MIN(%1$s) as min', $field))->having($prefix . '.active_checks_enabled = ?', '1')->innerJoin($prefix . "." . $joinTable)->disableAutoIdentifierFields(true)->execute(array(), Doctrine::HYDRATE_SCALAR);
     if (is_array($data) && count($data) === 1) {
         $data = $data[0];
         $result[$prefix . "_" . $field . "_min"] = sprintf('%.3f', $data[$prefix . "_min"]);
         $result[$prefix . "_" . $field . "_avg"] = sprintf('%.3f', $data[$prefix . "_sum"] / $data[$prefix . "_count"]);
         $result[$prefix . "_" . $field . "_max"] = sprintf('%.3f', $data[$prefix . "_max"]);
         return $result;
     } else {
         if (is_array($data) && count($data) === 0) {
             $result[$prefix . "_" . $field . "_min"] = "--";
             $result[$prefix . "_" . $field . "_avg"] = "--";
             $result[$prefix . "_" . $field . "_max"] = "--";
             return $result;
         }
     }
 }
 public function __toDQL(IcingaDoctrine_Query $q, $dqlOnly = false)
 {
     $field = $this->getField();
     $value = $this->getValue();
     $match = $this->getMatch();
     if ($match == IcingaApiConstants::MATCH_LIKE || $match == IcingaApiConstants::MATCH_NOT_LIKE) {
         $value = str_replace("*", "%", $value);
     }
     if (strtolower($q->getConnection()->getDriverName()) == "oracle") {
         $value = str_replace("'", "''", $value);
     } else {
         $value = preg_replace("/'/", "\\'", $value);
     }
     $field = preg_replace("/(.*?) +AS +.+ */i", "\$1", $field);
     $statementSkeleton = $field . " " . $match . " '" . $value . "' ";
     return $statementSkeleton;
 }
 public function getAvailabiltyForObjects($objects, Api_SLA_SLAFilterModel $filter = null)
 {
     if (!$filter) {
         $filter = $this->getContext()->getModel("SLA.SLAFilterModel", "SLA");
     }
     $filter->setObjectId($objects);
     $query = IcingaDoctrine_Query::create("icinga")->select("*")->from("IcingaSlahistory sla");
     $filter->apply($query);
 }
 public function createRequestDescriptor($connName = NULL)
 {
     if (!$connName) {
         $connName = $this->database;
     }
     $DBALMetaManager = $this->getContext()->getModel("DBALMetaManager", "Api");
     $DBALMetaManager->switchIcingaDatabase($connName);
     return IcingaDoctrine_Query::create();
 }
 public function extend(IcingaDoctrine_Query $query, array $params)
 {
     $target = $params["target"];
     $column = $params["column"];
     $ornull = isset($params["ornull"]) && $params["ornull"] == true ? true : false;
     $user = $this->getContext()->getUser()->getNsmUser();
     $targetVals = $user->getTargetValues($target, true)->toArray();
     if (empty($targetVals)) {
         return false;
     }
     $dqlParts = array();
     $dqlValues = array();
     foreach ($targetVals as $currentTarget) {
         $dqlParts[] = "{$column} LIKE '" . $currentTarget["tv_val"] . "'";
     }
     if ($ornull == true) {
         $dqlParts[] = "{$column} IS NULL";
     }
     $dql = "(" . implode(" OR ", $dqlParts) . ")";
     $query->orWhere($dql);
 }
 /**
  * Applies this filter to a IcingaDoctrine_Query or exports it (depending
  * if the $dqlOnly is set)
  *
  * @param IcingaDoctrine_Query   The query to apply this filter to
  * @param Boolean    True to only return the dql
  *
  *
  * @author Jannis Moßhammer <*****@*****.**>
  **/
 public function __toDQL(IcingaDoctrine_Query $q, $dqlOnly)
 {
     $connection = $q->getConnection();
     $v = $this->formatValues($connection);
     $dql = $connection->quoteIdentifier($this->field) . " " . $this->operator;
     if (is_array($v)) {
         $dql .= " (" . implode(",", $v) . ")";
     } else {
         $dql .= " " . $v;
     }
     if ($dqlOnly) {
         return $dql;
     } else {
         $q->where($dql);
     }
     return;
 }
 /**
  * Creates an @see IcingaDoctrine_Query object and returns it
  * @return IcingaDoctrineQuery
  *
  * @author Jannis Moßhammer <*****@*****.**>
  **/
 protected function createRequestDescriptor()
 {
     $DBALMetaManager = AgaviContext::getInstance()->getModel("DBALMetaManager", "Api");
     $DBALMetaManager->switchIcingaDatabase($this->connectionName);
     $connection = $this->getContext()->getDatabaseConnection($this->connectionName);
     $query = IcingaDoctrine_Query::create($connection);
     $query->setConnection($connection);
     Doctrine_Manager::getInstance()->setCurrentConnection($this->connectionName);
     return $query;
 }
 private function applyCustomCredential($dql, IcingaDoctrine_Query $query, array $targetValues)
 {
     if (empty($targetValues)) {
         return;
     }
     $dql = $this->replaceCredentialTokens($dql, $targetValues);
     $query->parseDqlQuery($dql);
 }
 public function getServicegroups($objectId)
 {
     $records = IcingaDoctrine_Query::create()->select('sg.servicegroup_id, sg.alias as alias, o.name1 as name, o.object_id as servicegroup_object_id')->from('IcingaServicegroups sg')->innerJoin('sg.object o')->innerJoin('sg.members m with m.service_object_id = ?', $objectId);
     return $records->execute(null, Doctrine::HYDRATE_ARRAY);
 }
 protected function getDataForInstance()
 {
     $instances = IcingaDoctrine_Query::create()->select('p.programstatus_id, p.instance_id, p.status_update_time, i.instance_name')->from('IcingaProgramstatus p')->innerJoin('p.instance i')->execute();
     $checkTime = 300;
     $diff = 0;
     $out = array();
     $status = false;
     foreach ($instances as $instance) {
         $date = (int) strtotime($instance->status_update_time);
         $diff = time() - $date;
         if ($diff < $checkTime && $instance->is_currently_running) {
             $status = true;
         } else {
             $status = false;
         }
         $out[] = array('instance' => $instance->instance->instance_name, 'status' => $status, 'last_check' => $instance->status_update_time, 'start' => $instance->program_start_time, 'diff' => $diff, 'check' => $checkTime);
     }
     return $out;
 }
 public function addOrderColumn($column, $direction = 'ASC')
 {
     $this->query->addOrderBy($this->aliasToColumn($column) . " " . $direction);
 }
 /**
  * Refresh data in the container
  */
 public function refresh()
 {
     $query = IcingaDoctrine_Query::create()->from('IcingaProgramstatus p')->limit(1);
     if ($this->instance) {
         $query->innerJoin('p.instance i with i.instance_name=?', array($this->instance));
     }
     $row = $query->execute()->getFirst();
     $this->data = array();
     if ($row) {
         $this->applicable = true;
         foreach ($row as $key => $value) {
             $this->data[$key] = $value;
         }
     }
 }
 public function initialize(AgaviContext $context, array $parameters = array())
 {
     parent::initialize($context, $parameters);
     $this->serviceQuery = IcingaDoctrine_Query::create()->select('ss.servicestatus_id, ss.last_state_change')->from('IcingaServicestatus ss')->innerJoin('ss.instance i')->innerJoin('i.programstatus p')->andWhere('ss.service_object_id=?');
     $this->hostQuery = IcingaDoctrine_Query::create()->select()->from('IcingaHoststatus hs')->innerJoin('hs.instance i')->innerJoin('i.programstatus p')->andWhere('hs.host_object_id=?');
 }