Exemple #1
0
 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]]);
     }
 }
Exemple #6
0
 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;
 }