diff --git a/app/Http/Controllers/SystemController.php b/app/Http/Controllers/SystemController.php index f2c0fab..561c9c8 100644 --- a/app/Http/Controllers/SystemController.php +++ b/app/Http/Controllers/SystemController.php @@ -59,7 +59,7 @@ class SystemController extends Controller return redirect()->to('system'); } - $o->load(['addresses.zone.domain','addresses.system','sessions.domain','sessions.systems']); + $o->load(['addresses.zone.domain','addresses.nodes_hub','addresses.system','sessions.domain','sessions.systems']); return view('system.addedit') ->with('action',$o->exists ? 'update' : 'create') diff --git a/app/Models/Address.php b/app/Models/Address.php index 568ec00..3d1b50b 100644 --- a/app/Models/Address.php +++ b/app/Models/Address.php @@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\QueryException; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; @@ -39,6 +40,7 @@ use App\Traits\ScopeActive; class Address extends Model { use ScopeActive,SoftDeletes; + const CACHE_KEY = 15; private const LOGKEY = 'MA-'; @@ -796,37 +798,39 @@ class Address extends Model */ public function children(): Collection { - // If we are a point, our parent is the boss - switch ($this->role_id) { - case self::NODE_NN: // Normal Nodes -> Points - return $this->nodes_point; + return Cache::remember(sprintf('children-%d',$this->id),self::CACHE_KEY,function() { + // If we are a point, our parent is the boss + switch ($this->role_id) { + case self::NODE_NN: // Normal Nodes -> Points + return $this->nodes_point; - case self::NODE_HC: // Hubs -> Normal Nodes - return $this->nodes_hub; + case self::NODE_HC: // Hubs -> Normal Nodes + return $this->nodes_hub; - case self::NODE_NC: // Nets -> Normal Nodes, excluding Hub's Nodes - return $this->nodes_net->diff($this - ->nodes_net - ->filter(function($item) { return $item->role_id === Address::NODE_HC; }) - ->transform(function($item) { return $item->children(); }) - ->flatten()); + case self::NODE_NC: // Nets -> Normal Nodes, excluding Hub's Nodes + return $this->nodes_net->diff($this + ->nodes_net + ->filter(function($item) { return $item->role_id === Address::NODE_HC; }) + ->transform(function($item) { return $item->children(); }) + ->flatten()); - case self::NODE_RC: // Regions, excluding NC's Nodes - return $this->nodes_region->diff($this - ->nodes_region - ->filter(function($item) { return $item->role_id === Address::NODE_NC; }) - ->transform(function($item) { return $item->nodes_net; }) - ->flatten()); + case self::NODE_RC: // Regions, excluding NC's Nodes + return $this->nodes_region->diff($this + ->nodes_region + ->filter(function($item) { return $item->role_id === Address::NODE_NC; }) + ->transform(function($item) { return $item->nodes_net; }) + ->flatten()); - case self::NODE_ZC: // Zones, excluding RC's Nodes - return $this->nodes_zone->diff($this - ->nodes_zone - ->filter(function($item) { return $item->role_id === Address::NODE_RC; }) - ->transform(function($item) { return $item->nodes_region; }) - ->flatten()); - } + case self::NODE_ZC: // Zones, excluding RC's Nodes + return $this->nodes_zone->diff($this + ->nodes_zone + ->filter(function($item) { return $item->role_id === Address::NODE_RC; }) + ->transform(function($item) { return $item->nodes_region; }) + ->flatten()); + } - return new Collection; + return new Collection; + }); } /** @@ -851,6 +855,7 @@ class Address extends Model ->join('zones',['zones.id'=>'addresses.zone_id']) ->where('addresses.id','<>',$this->id) ->where('domain_id',$this->zone->domain_id) + ->with(['zone.domain']) ->active() ->FTNorder() ->get(); @@ -938,36 +943,38 @@ class Address extends Model */ private function ftn_role(): ?int { - $role = NULL; + return Cache::remember(sprintf('ftn_role-%d',$this->id),self::CACHE_KEY,function() { + $role = NULL; - // If we have a point address, we're a point - if ($this->point_id) - $role = self::NODE_POINT; + // If we have a point address, we're a point + if ($this->point_id) + $role = self::NODE_POINT; - // If we have a node_id, we're either a Node or a Hub - elseif ($this->node_id) { - $role = ($this->nodes_hub->count()) - ? self::NODE_HC - : ((($this->role & Address::NODE_ALL) === self::NODE_HC) ? self::NODE_HC : self::NODE_NN); + // If we have a node_id, we're either a Node or a Hub + elseif ($this->node_id) { + $role = ($this->nodes_hub->count()) + ? self::NODE_HC + : ((($this->role & Address::NODE_ALL) === self::NODE_HC) ? self::NODE_HC : self::NODE_NN); - // point_id and node_id are zero - // If our region_id !== host_id, and are not zero, and node_id/point_id === 0, we are an NC - } elseif (($this->region_id !== $this->host_id) && $this->host_id) { - $role = self::NODE_NC; + // point_id and node_id are zero + // If our region_id !== host_id, and are not zero, and node_id/point_id === 0, we are an NC + } elseif (($this->region_id !== $this->host_id) && $this->host_id) { + $role = self::NODE_NC; - // point_id and node_id are zero - } elseif (($this->region_id === $this->host_id) && $this->host_id) { - $role = self::NODE_RC; + // point_id and node_id are zero + } elseif (($this->region_id === $this->host_id) && $this->host_id) { + $role = self::NODE_RC; - // point_id and node_id are zero - } elseif (($this->region_id === $this->host_id) && (! $this->host_id)) { - $role = self::NODE_ZC; - } + // point_id and node_id are zero + } elseif (($this->region_id === $this->host_id) && (! $this->host_id)) { + $role = self::NODE_ZC; + } - if (is_null($role)) - Log::alert(sprintf('%s:! Address ROLE [%d] could not be determined for [%s]',self::LOGKEY,($this->role & Address::NODE_ALL),$this->ftn)); + if (is_null($role)) + Log::alert(sprintf('%s:! Address ROLE [%d] could not be determined for [%s]',self::LOGKEY,($this->role & Address::NODE_ALL),$this->ftn)); - return $role; + return $role; + }); } /** diff --git a/app/Models/System.php b/app/Models/System.php index 305dbb2..2338099 100644 --- a/app/Models/System.php +++ b/app/Models/System.php @@ -73,6 +73,7 @@ class System extends Model ->where('zones.active',TRUE) ->where('domains.active',TRUE) ->orderBy('domains.name') + ->with(['zone.domain']) ->FTNorder() ->orderBy('role','ASC'); } diff --git a/resources/views/system/ours.blade.php b/resources/views/system/ours.blade.php index 74fd27a..675b23b 100644 --- a/resources/views/system/ours.blade.php +++ b/resources/views/system/ours.blade.php @@ -28,7 +28,7 @@
- @foreach (\App\Models\SystemZone::select('*')->with(['system','zone.domain'])->get() as $oo) + @foreach (\App\Models\SystemZone::select('*')->with(['system.addresses.zone.domain','zone.domain'])->get() as $oo)