static function findOneByDomainAndNode($domainName, $node) { $dom = Domain::findByName($domainName)->one(); if ($dom) { return self::find()->where(['node' => $node, 'domain_id' => $dom->id])->one(); } return null; }
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(); } } } } } }