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=?'); }