/** * 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; }
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(); }
/** * Removes this object from datastore and sets delete attribute. * * @param PropelPDO $con * @return void * @throws PropelException * @see BaseObject::setDeleted() * @see BaseObject::isDeleted() */ public function delete(PropelPDO $con = null) { if ($this->isDeleted()) { throw new PropelException("This object has already been deleted."); } if ($con === null) { $con = Propel::getConnection(AutodiscoveryDeviceTemplateMatchPeer::DATABASE_NAME, Propel::CONNECTION_WRITE); } $con->beginTransaction(); try { AutodiscoveryDeviceTemplateMatchPeer::doDelete($this, $con); $this->setDeleted(true); $con->commit(); } catch (PropelException $e) { $con->rollBack(); throw $e; } }
/** * 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; }