public function getTemplateMatches() { $c = new Criteria(); $c->add(AutodiscoveryDeviceTemplateMatchPeer::DEVICE_ID, $this->getId()); $c->addDescendingOrderByColumn(AutodiscoveryDeviceTemplateMatchPeer::PERCENT); $c->addDescendingOrderByColumn(AutodiscoveryDeviceTemplateMatchPeer::COMPLEXITY); $matches = AutodiscoveryDeviceTemplateMatchPeer::doSelect($c); return $matches; }
/** * Retrieve multiple objects by pkey. * * @param array $pks List of primary keys * @param PropelPDO $con the connection to use * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ public static function retrieveByPKs($pks, PropelPDO $con = null) { if ($con === null) { $con = Propel::getConnection(AutodiscoveryDeviceTemplateMatchPeer::DATABASE_NAME, Propel::CONNECTION_READ); } $objs = null; if (empty($pks)) { $objs = array(); } else { $criteria = new Criteria(AutodiscoveryDeviceTemplateMatchPeer::DATABASE_NAME); $criteria->add(AutodiscoveryDeviceTemplateMatchPeer::ID, $pks, Criteria::IN); $objs = AutodiscoveryDeviceTemplateMatchPeer::doSelect($criteria, $con); } return $objs; }
/** * This is a method for emulating ON DELETE CASCADE for DBs that don't support this * feature (like MySQL or SQLite). * * This method is not very speedy because it must perform a query first to get * the implicated records and then perform the deletes by calling those Peer classes. * * This method should be used within a transaction if possible. * * @param Criteria $criteria * @param PropelPDO $con * @return int The number of affected rows (if supported by underlying database driver). */ protected static function doOnDeleteCascade(Criteria $criteria, PropelPDO $con) { // initialize var to track total num of affected rows $affectedRows = 0; // first find the objects that are implicated by the $criteria $objects = AutodiscoveryDevicePeer::doSelect($criteria, $con); foreach ($objects as $obj) { // delete related AutodiscoveryDeviceService objects $c = new Criteria(AutodiscoveryDeviceServicePeer::DATABASE_NAME); $c->add(AutodiscoveryDeviceServicePeer::DEVICE_ID, $obj->getId()); $affectedRows += AutodiscoveryDeviceServicePeer::doDelete($c, $con); // delete related AutodiscoveryDeviceTemplateMatch objects $c = new Criteria(AutodiscoveryDeviceTemplateMatchPeer::DATABASE_NAME); $c->add(AutodiscoveryDeviceTemplateMatchPeer::DEVICE_ID, $obj->getId()); $affectedRows += AutodiscoveryDeviceTemplateMatchPeer::doDelete($c, $con); } return $affectedRows; }
/** * If this collection has already been initialized with * an identical criteria, it returns the collection. * Otherwise if this AutodiscoveryDevice is new, it will return * an empty collection; or if this AutodiscoveryDevice has previously * been saved, it will retrieve related AutodiscoveryDeviceTemplateMatchs from storage. * * This method is protected by default in order to keep the public * api reasonable. You can provide public methods for those you * actually need in AutodiscoveryDevice. */ public function getAutodiscoveryDeviceTemplateMatchsJoinNagiosHostTemplate($criteria = null, $con = null, $join_behavior = Criteria::LEFT_JOIN) { if ($criteria === null) { $criteria = new Criteria(AutodiscoveryDevicePeer::DATABASE_NAME); } elseif ($criteria instanceof Criteria) { $criteria = clone $criteria; } if ($this->collAutodiscoveryDeviceTemplateMatchs === null) { if ($this->isNew()) { $this->collAutodiscoveryDeviceTemplateMatchs = array(); } else { $criteria->add(AutodiscoveryDeviceTemplateMatchPeer::DEVICE_ID, $this->id); $this->collAutodiscoveryDeviceTemplateMatchs = AutodiscoveryDeviceTemplateMatchPeer::doSelectJoinNagiosHostTemplate($criteria, $con, $join_behavior); } } else { // the following code is to determine if a new query is // called for. If the criteria is the same as the last // one, just return the collection. $criteria->add(AutodiscoveryDeviceTemplateMatchPeer::DEVICE_ID, $this->id); if (!isset($this->lastAutodiscoveryDeviceTemplateMatchCriteria) || !$this->lastAutodiscoveryDeviceTemplateMatchCriteria->equals($criteria)) { $this->collAutodiscoveryDeviceTemplateMatchs = AutodiscoveryDeviceTemplateMatchPeer::doSelectJoinNagiosHostTemplate($criteria, $con, $join_behavior); } } $this->lastAutodiscoveryDeviceTemplateMatchCriteria = $criteria; return $this->collAutodiscoveryDeviceTemplateMatchs; }
/** * Populates the object using an array. * * This is particularly useful when populating an object from one of the * request arrays (e.g. $_POST). This method goes through the column * names, checking to see whether a matching key exists in populated * array. If so the setByName() method is called for that column. * * You can specify the key type of the array by additionally passing one * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME, * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM. * The default key type is the column's phpname (e.g. 'AuthorId') * * @param array $arr An array to populate the object from. * @param string $keyType The type of keys the array uses. * @return void */ public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME) { $keys = AutodiscoveryDeviceTemplateMatchPeer::getFieldNames($keyType); if (array_key_exists($keys[0], $arr)) { $this->setId($arr[$keys[0]]); } if (array_key_exists($keys[1], $arr)) { $this->setDeviceId($arr[$keys[1]]); } if (array_key_exists($keys[2], $arr)) { $this->setHostTemplate($arr[$keys[2]]); } if (array_key_exists($keys[3], $arr)) { $this->setPercent($arr[$keys[3]]); } if (array_key_exists($keys[4], $arr)) { $this->setComplexity($arr[$keys[4]]); } }
public static function match(AutodiscoveryDevice $device, NagiosHostTemplate $defaultTemplate = null) { // Delete previous matches $c = new Criteria(); $c->add(AutodiscoveryDeviceTemplateMatchPeer::DEVICE_ID, $device->getId()); AutodiscoveryDeviceTemplateMatchPeer::doDelete($c); $templates = NagiosHostTemplatePeer::doSelect(new Criteria()); $templateMatches = array(); foreach ($templates as $template) { $templateValues = $template->getValues(); $complexity = 0; $match = 0; $serviceFilters = $template->getNagiosHostTemplateAutodiscoveryServices(); $inheritedServiceFilters = $template->getInheritedNagiosAutodiscoveryServiceFilters(); $serviceFilters = array_merge($serviceFilters, $inheritedServiceFilters); if (!empty($templateValues['autodiscovery_address_filter']) && $templateValues['autodiscovery_address_filter']['value'] != '') { $complexity++; if (preg_match($templateValues['autodiscovery_address_filter']['value'], $device->getAddress())) { $match++; } } if (!empty($templateValues['autodiscovery_hostname_filter']) && $templateValues['autodiscovery_hostname_filter']['value'] != '') { $complexity++; if (preg_match($templateValues['autodiscovery_hostname_filter']['value'], $device->getHostname())) { $match++; } } if (!empty($templateValues['autodiscovery_os_family_filter']) && $templateValues['autodiscovery_os_family_filter']['value'] != '') { $complexity++; if (preg_match($templateValues['autodiscovery_os_family_filter']['value'], $device->getOsfamily())) { $match++; } } if (!empty($templateValues['autodiscovery_os_generation_filter']) && $templateValues['autodiscovery_os_generation_filter']['value'] != '') { $complexity++; if (preg_match($templateValues['autodiscovery_os_generation_filter']['value'], $device->getOsgen())) { $match++; } } if (!empty($templateValues['autodiscovery_os_vendor_filter']) && $templateValues['autodiscovery_os_vendor_filter']['value'] != '') { $complexity++; if (preg_match($templateValues['autodiscovery_os_vendor_filter']['value'], $device->getOsvendor())) { $match++; } } // Checked bases, let's now check service filters $complexity += count($serviceFilters); foreach ($serviceFilters as $filter) { foreach ($device->getAutodiscoveryDeviceServices() as $service) { if ($filter->getPort() == $service->getPort() && $filter->getProtocol() == $service->getProtocol()) { // Okay, we're ALMOST found...let's see if we have any other additional filters. $tempMatch = true; if ($filter->getName() != '') { if (!preg_match($filter->getName(), $service->getName())) { $tempMatch = false; } } if ($filter->getProduct() != '') { if (!preg_match($filter->getProduct(), $service->getProduct())) { $tempMatch = false; } } if ($filter->getVersion() != '') { if (!preg_match($filter->getVersion(), $service->getVersion())) { $tempMatch = false; } } if ($filter->getExtraInformation() != '') { if (!preg_match($filter->getExtraInformation(), $service->getExtraInformation())) { $tempMatch = false; } } if ($tempMatch) { $match++; } } } } // Okay, we got everything, let's determine the percentage. if ($complexity == 0) { // Blank template, no auto-discovery features used. $percentage = 0; continue; } else { $percentage = (int) ((double) $match / (double) $complexity * 100); } if ($percentage == 0) { continue; } // Store the template into the array $templateMatches[$percentage][$complexity][] = $template; } // Okay, let's now create the matches $percentages = array_keys($templateMatches); $assigned = false; for ($percentageCounter = 0; $percentageCounter < count($percentages); $percentageCounter++) { $complexities = array_keys($templateMatches[$percentages[$percentageCounter]]); $complexities = array_reverse($complexities); for ($complexityCount = 0; $complexityCount < count($complexities); $complexityCount++) { foreach ($templateMatches[$percentages[$percentageCounter]][$complexities[$complexityCount]] as $template) { $match = new AutodiscoveryDeviceTemplateMatch(); $match->setAutodiscoveryDevice($device); $match->setNagiosHostTemplate($template); $match->setPercent($percentages[$percentageCounter]); $match->setComplexity($complexities[$complexityCount]); $match->save(); // Add the highest match as the template to assign if (!$assigned) { $assigned = true; $device->setNagiosHostTemplate($template); } } } } // If Not assigned, assign default template if (!$assigned && !empty($defaultTemplate)) { $device->setNagiosHostTemplate($defaultTemplate); } $device->save(); }
/** * This is a method for emulating ON DELETE CASCADE for DBs that don't support this * feature (like MySQL or SQLite). * * This method is not very speedy because it must perform a query first to get * the implicated records and then perform the deletes by calling those Peer classes. * * This method should be used within a transaction if possible. * * @param Criteria $criteria * @param PropelPDO $con * @return int The number of affected rows (if supported by underlying database driver). */ protected static function doOnDeleteCascade(Criteria $criteria, PropelPDO $con) { // initialize var to track total num of affected rows $affectedRows = 0; // first find the objects that are implicated by the $criteria $objects = NagiosHostTemplatePeer::doSelect($criteria, $con); foreach ($objects as $obj) { // delete related NagiosHostTemplateAutodiscoveryService objects $c = new Criteria(NagiosHostTemplateAutodiscoveryServicePeer::DATABASE_NAME); $c->add(NagiosHostTemplateAutodiscoveryServicePeer::HOST_TEMPLATE, $obj->getId()); $affectedRows += NagiosHostTemplateAutodiscoveryServicePeer::doDelete($c, $con); // delete related NagiosService objects $c = new Criteria(NagiosServicePeer::DATABASE_NAME); $c->add(NagiosServicePeer::HOST_TEMPLATE, $obj->getId()); $affectedRows += NagiosServicePeer::doDelete($c, $con); // delete related NagiosHostContactMember objects $c = new Criteria(NagiosHostContactMemberPeer::DATABASE_NAME); $c->add(NagiosHostContactMemberPeer::TEMPLATE, $obj->getId()); $affectedRows += NagiosHostContactMemberPeer::doDelete($c, $con); // delete related NagiosDependency objects $c = new Criteria(NagiosDependencyPeer::DATABASE_NAME); $c->add(NagiosDependencyPeer::HOST_TEMPLATE, $obj->getId()); $affectedRows += NagiosDependencyPeer::doDelete($c, $con); // delete related NagiosEscalation objects $c = new Criteria(NagiosEscalationPeer::DATABASE_NAME); $c->add(NagiosEscalationPeer::HOST_TEMPLATE, $obj->getId()); $affectedRows += NagiosEscalationPeer::doDelete($c, $con); // delete related NagiosHostContactgroup objects $c = new Criteria(NagiosHostContactgroupPeer::DATABASE_NAME); $c->add(NagiosHostContactgroupPeer::HOST_TEMPLATE, $obj->getId()); $affectedRows += NagiosHostContactgroupPeer::doDelete($c, $con); // delete related NagiosHostgroupMembership objects $c = new Criteria(NagiosHostgroupMembershipPeer::DATABASE_NAME); $c->add(NagiosHostgroupMembershipPeer::HOST_TEMPLATE, $obj->getId()); $affectedRows += NagiosHostgroupMembershipPeer::doDelete($c, $con); // delete related NagiosHostCheckCommandParameter objects $c = new Criteria(NagiosHostCheckCommandParameterPeer::DATABASE_NAME); $c->add(NagiosHostCheckCommandParameterPeer::HOST_TEMPLATE, $obj->getId()); $affectedRows += NagiosHostCheckCommandParameterPeer::doDelete($c, $con); // delete related NagiosHostParent objects $c = new Criteria(NagiosHostParentPeer::DATABASE_NAME); $c->add(NagiosHostParentPeer::CHILD_HOST_TEMPLATE, $obj->getId()); $affectedRows += NagiosHostParentPeer::doDelete($c, $con); // delete related NagiosHostTemplateInheritance objects $c = new Criteria(NagiosHostTemplateInheritancePeer::DATABASE_NAME); $c->add(NagiosHostTemplateInheritancePeer::SOURCE_TEMPLATE, $obj->getId()); $affectedRows += NagiosHostTemplateInheritancePeer::doDelete($c, $con); // delete related NagiosHostTemplateInheritance objects $c = new Criteria(NagiosHostTemplateInheritancePeer::DATABASE_NAME); $c->add(NagiosHostTemplateInheritancePeer::TARGET_TEMPLATE, $obj->getId()); $affectedRows += NagiosHostTemplateInheritancePeer::doDelete($c, $con); // delete related AutodiscoveryDeviceTemplateMatch objects $c = new Criteria(AutodiscoveryDeviceTemplateMatchPeer::DATABASE_NAME); $c->add(AutodiscoveryDeviceTemplateMatchPeer::HOST_TEMPLATE, $obj->getId()); $affectedRows += AutodiscoveryDeviceTemplateMatchPeer::doDelete($c, $con); } return $affectedRows; }