diff --git a/app/Http/Controllers/PollerController.php b/app/Http/Controllers/PollerController.php index ec825b986f..c04d194400 100644 --- a/app/Http/Controllers/PollerController.php +++ b/app/Http/Controllers/PollerController.php @@ -5,26 +5,18 @@ namespace App\Http\Controllers; use App\Models\Device; use App\Models\Poller; use App\Models\PollerCluster; -use App\Models\PollerGroups; +use App\Models\PollerGroup; +use Carbon\Carbon; use Illuminate\Http\Request; +use LibreNMS\Config; class PollerController extends Controller { public $rrdstep; - public $defaultPollerId; - - public $defaultGroup = [ - 'id' => 0, - 'group_name' => 'General', - 'descr' => '' - ]; - public $defaultPollerMarker = '(default Poller)'; public function __construct() { - $this->authorizeResource(PollerGroups::class, 'poller_groups'); // FIXME is this correct? not a resource anymore - $this->rrdstep = \LibreNMS\Config::get('rrd.step'); - $this->defaultPollerId = \LibreNMS\Config::get('distributed_poller_group'); + $this->rrdstep = Config::get('rrd.step'); } public function logTab(Request $request) @@ -35,33 +27,16 @@ class PollerController extends Controller ]); } - // output for poller groups public function groupsTab() { - $group_list = PollerGroups::get(); - - # default poller_group - $defaultGroup = $this->defaultGroup; - $defaultGroup['devices'] = Device::where('poller_group', $defaultGroup['id'])->get(); - $defaultGroup['is_default_poller'] = ($defaultGroup['id'] == $this->defaultPollerId) ? true : false; - - # poller_groups - $poller_group_list = []; - foreach ($group_list as $group) { - $group['is_default_poller'] = ($group['id'] == $this->defaultPollerId) ? true : false; - - $poller_group_list[] = $group; - } - return view('poller.groups', [ 'current_tab' => 'groups', - 'default_poller_marker' => $this->defaultPollerMarker, - 'poller_groups' => $poller_group_list, - 'default_poller_group' => $defaultGroup, + 'poller_groups' => PollerGroup::query()->withCount('devices')->get(), + 'default_group_id' => Config::get('distributed_poller_group'), + 'ungrouped_count' => Device::where('poller_group', 0)->count(), ]); } - // data output for poller view public function pollerTab() { return view('poller.poller', [ @@ -76,54 +51,38 @@ class PollerController extends Controller return view('poller.performance', ['current_tab' => 'performance']); } - protected function pollerStatus($poller) + protected function pollerStatus($poller, $last) { - $old = $poller['now'] - strtotime($poller['last_polled']); + $since_last_poll = Carbon::parse($last)->diffInSeconds(); - if ($old >= $this->rrdstep) { - $poller['row_class'] = 'danger'; - } elseif ($old >= ($this->rrdstep * 0.95)) { - $poller['row_class'] = 'warning'; - } else { - $poller['row_class'] = 'success'; - } - - $poller['long_not_polled'] = (\Auth::user()->hasGlobalAdmin() && ($old > ($this->rrdstep * 2))) ? true : false; + $poller->row_class = $this->checkTimeSinceLastPoll($since_last_poll); + $poller->long_not_polled = (\Auth::user()->hasGlobalAdmin() && ($since_last_poll > ($this->rrdstep * 2))); return $poller; } private function poller() { - $rows = Poller::orderBy('poller_name')->get(); - - $time = time(); - - $groups = []; - - foreach ($rows as $poller) { - $poller['now'] = $time; - - $poller = $this->pollerStatus($poller); - - $groups[] = $poller; - } - - return $groups; + return Poller::query()->orderBy('poller_name')->get()->map(function ($poller) { + return $this->pollerStatus($poller, $poller->last_polled); + }); } private function pollerCluster() { - $rows = PollerCluster::orderBy('poller_name')->get(); + return PollerCluster::with('stats')->orderBy('poller_name')->get()->map(function ($poller) { + return $this->pollerStatus($poller, $poller->last_report); + }); + } - $cluster = []; - - foreach ($rows as $poller) { - $poller = $this->pollerStatus($poller); - - $cluster[] = $poller; + private function checkTimeSinceLastPoll($seconds) + { + if ($seconds >= $this->rrdstep) { + return 'danger'; + } elseif ($seconds >= ($this->rrdstep * 0.95)) { + return 'warning'; } - return $cluster; + return 'success'; } } diff --git a/app/Http/Controllers/PollerGroupController.php b/app/Http/Controllers/PollerGroupController.php index 1cbf82e62e..16e61eef5b 100644 --- a/app/Http/Controllers/PollerGroupController.php +++ b/app/Http/Controllers/PollerGroupController.php @@ -2,13 +2,12 @@ namespace App\Http\Controllers; -use App\Models\Device; -use App\Models\PollerGroups; +use App\Models\PollerGroup; use Illuminate\Http\Request; class PollerGroupController extends Controller { - public function destroy(Request $request, PollerGroups $pollergroup) + public function destroy(Request $request, PollerGroup $pollergroup) { if ($request->user()->isAdmin()) { $pollergroup->delete(); diff --git a/app/Models/PollerCluster.php b/app/Models/PollerCluster.php index 34e9fe24c3..7e7639addb 100644 --- a/app/Models/PollerCluster.php +++ b/app/Models/PollerCluster.php @@ -1,6 +1,6 @@ hasMany('App\Models\PollerClusterStats', 'parent_poller', 'id'); + return $this->hasMany('App\Models\PollerClusterStat', 'parent_poller', 'id'); } } diff --git a/app/Models/PollerClusterStats.php b/app/Models/PollerClusterStat.php similarity index 94% rename from app/Models/PollerClusterStats.php rename to app/Models/PollerClusterStat.php index 76601e9631..1043326bd3 100644 --- a/app/Models/PollerClusterStats.php +++ b/app/Models/PollerClusterStat.php @@ -1,6 +1,6 @@ devices()->update(['poller_group' => $default_poller_id]); diff --git a/resources/views/layouts/menu.blade.php b/resources/views/layouts/menu.blade.php index bf88f4db5b..881caf3b2d 100644 --- a/resources/views/layouts/menu.blade.php +++ b/resources/views/layouts/menu.blade.php @@ -528,12 +528,12 @@ diff --git a/resources/views/poller/groups.blade.php b/resources/views/poller/groups.blade.php index b5e25b975a..a20df219e2 100644 --- a/resources/views/poller/groups.blade.php +++ b/resources/views/poller/groups.blade.php @@ -18,24 +18,22 @@ @lang('Description') @lang('Action') - - {{ $default_poller_group['id'] }} - {{ $default_poller_group['group_name'] }}@if($default_poller_group['is_default_poller']) {{ $default_poller_marker }}@endif - {{ $default_poller_group['devices']->count() }} - {{ $default_poller_group['descr'] }} + + 0 + General @if($default_group_id == 0) (@lang('default')) @endif + {{ $ungrouped_count }} + @foreach ($poller_groups as $group) - - {{ $group['id'] }} - {{ $group['group_name'] }}@if($group['is_default_poller']) {{ $default_poller_marker }}@endif - {{ $group['devices']->count() }} - {{ $group['descr'] }} + + {{ $group->id }} + {{ $group->group_name }}@if($group->id == $default_group_id) (@lang('default')) @endif + {{ $group->devices_count }} + {{ $group->descr }} - @if($group['id']) - - - @endif + + @endforeach diff --git a/resources/views/poller/index.blade.php b/resources/views/poller/index.blade.php index 29a422a9bb..f78d94c748 100644 --- a/resources/views/poller/index.blade.php +++ b/resources/views/poller/index.blade.php @@ -5,20 +5,23 @@
@endsection + @section('content_footer')
diff --git a/resources/views/poller/log.blade.php b/resources/views/poller/log.blade.php index beabc5b6cb..4fd64bc6a1 100644 --- a/resources/views/poller/log.blade.php +++ b/resources/views/poller/log.blade.php @@ -12,7 +12,7 @@ @lang('Hostname') @lang('Last Polled') @lang('Poller Group') - @lang('Polling Duration (Seconds)') + @lang('Polling Duration') (@lang('Seconds')) @@ -22,8 +22,8 @@