Ejemplo n.º 1
0
 private function search()
 {
     foreach ($this->parser->getData()['domains'] as $domainName => $domainData) {
         $domain = Domain::findByName($domainName)->one();
         if ($domain == null) {
             $change = $this->buildChange();
             $change->domain = $domainName;
             $change->item_type = Change::ITEM_TYPE_DOMAIN;
             $change->data = json_encode(['' => '']);
             $change->type = Change::TYPE_CREATE;
             $change->save();
             $invalidDevices = false;
         } else {
             //VERIFICA DEVICES
             if ($this->parser instanceof NSIParser) {
                 $invalidDevices = Device::find()->where(['domain_id' => $domain->id]);
             } else {
                 $invalidDevices = false;
             }
             ///////////
         }
         if ($this->parser instanceof NSIParser && isset($domainData['nsa'])) {
             foreach ($domainData['nsa'] as $nsaId => $nsaData) {
                 $provider = Provider::find()->where(['nsa' => $nsaId])->one();
                 if (!$provider) {
                     $change = $this->buildChange();
                     $change->type = Change::TYPE_CREATE;
                     $change->domain = $domainName;
                     $change->item_type = Change::ITEM_TYPE_PROVIDER;
                     $change->data = json_encode(['name' => $nsaData['name'], 'type' => $nsaData['type'], 'lat' => $nsaData["lat"], 'lng' => $nsaData["lng"], 'nsa' => $nsaId]);
                     $change->save();
                 } elseif ($nsaData['lat'] && $nsaData['lng'] && intval($provider->latitude) != intval($nsaData['lat']) || intval($provider->longitude) != intval($nsaData['lng'])) {
                     $change = $this->buildChange();
                     $change->type = Change::TYPE_UPDATE;
                     $change->item_id = $provider->id;
                     $change->domain = $domainName;
                     $change->item_type = Change::ITEM_TYPE_PROVIDER;
                     $change->data = json_encode(['name' => $nsaData['name'], 'type' => $nsaData['type'], 'lat' => $nsaData["lat"], 'lng' => $nsaData["lng"], 'nsa' => $nsaId]);
                     $change->save();
                 }
                 if ($provider) {
                     $oldPeerings = $provider->getPeerings();
                     $oldServices = $provider->getServices();
                 }
                 $newPeerings = [];
                 $newServices = [];
                 if (isset($nsaData['peerings'])) {
                     foreach ($nsaData['peerings'] as $dstNsaId) {
                         if ($provider) {
                             $dstProv = Provider::findOneByNsa($dstNsaId);
                             if ($dstProv) {
                                 $peering = Peering::findOne(['src_id' => $provider->id, 'dst_id' => $dstProv->id]);
                                 if ($peering) {
                                     //$newPeerings[] = $peering->id;
                                     continue;
                                 }
                             }
                         }
                         $change = $this->buildChange();
                         $change->type = Change::TYPE_CREATE;
                         $change->domain = $domainName;
                         $change->item_type = Change::ITEM_TYPE_PEERING;
                         $change->data = json_encode(['srcNsaId' => $nsaId, 'dstNsaId' => $dstNsaId]);
                         $change->save();
                     }
                 }
                 foreach ($nsaData['services'] as $serviceUrl => $serviceType) {
                     $service = Service::findOneByUrl($serviceUrl);
                     if (!$service) {
                         $change = $this->buildChange();
                         $change->type = Change::TYPE_CREATE;
                         $change->domain = $domainName;
                         $change->item_type = Change::ITEM_TYPE_SERVICE;
                         $change->data = json_encode(['provName' => $nsaData['name'], 'provNsa' => $nsaId, 'type' => $serviceType, 'url' => $serviceUrl]);
                         $change->save();
                     } else {
                         $newServices[] = $service->id;
                     }
                 }
                 if ($provider) {
                     $oldServices = $oldServices->andWhere(['not in', 'id', $newServices])->select(['id'])->asArray()->all();
                     foreach ($oldServices as $invalidService) {
                         $change = $this->buildChange();
                         $change->type = Change::TYPE_DELETE;
                         $change->domain = $domainName;
                         $change->item_id = $invalidService['id'];
                         $change->item_type = Change::ITEM_TYPE_SERVICE;
                         $change->data = json_encode(['' => '']);
                         $change->save();
                     }
                 }
             }
         }
         //PERFSONAR
         if ($this->parser instanceof NMWGParser) {
             if (isset($domainData['devices'])) {
                 $this->importDevices($domainData["devices"], $domainName, $invalidDevices);
             }
             //NSI
         } else {
             if (isset($domainData['nets'])) {
                 $this->importNetworks($domainData["nets"], $domainName, $invalidDevices);
                 if ($invalidDevices) {
                     $invalidDevices = $invalidDevices->select(['id', 'node'])->asArray()->all();
                     foreach ($invalidDevices as $device) {
                         $change = $this->buildChange();
                         $change->type = Change::TYPE_DELETE;
                         $change->domain = $domainName;
                         $change->item_type = Change::ITEM_TYPE_DEVICE;
                         $change->item_id = $device['id'];
                         $change->data = json_encode(["node" => $device['node']]);
                         $change->save();
                     }
                 }
             }
         }
     }
 }