. * * @link https://www.librenms.org * @copyright 2018 Tony Murray * @author Tony Murray */ namespace App\Http\Controllers\Widgets; use App\Models\Port; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\View\View; class TopInterfacesController extends WidgetController { protected $title = 'Top Interfaces'; protected $defaults = [ 'interface_count' => 5, 'time_interval' => 15, 'interface_filter' => null, 'device_group' => null, ]; /** * @param Request $request * @return View */ public function getView(Request $request) { $data = $this->getSettings(); $query = Port::hasAccess($request->user())->with(['device' => function ($query) { $query->select('device_id', 'hostname', 'sysName', 'status', 'os'); }]) ->isValid() ->select('port_id', 'device_id', 'ifName', 'ifDescr', 'ifAlias') ->groupBy('port_id', 'device_id', 'ifName', 'ifDescr', 'ifAlias') ->where('poll_time', '>', Carbon::now()->subMinutes($data['time_interval'])->timestamp) ->isUp() ->when($data['device_group'], function ($query) use ($data) { $query->inDeviceGroup($data['device_group']); }, function ($query) { $query->has('device'); }) ->orderByRaw('SUM(LEAST(ifInOctets_rate, 9223372036854775807) + LEAST(ifOutOctets_rate, 9223372036854775807)) DESC') ->limit($data['interface_count']); if ($data['interface_filter']) { $query->where('ifType', '=', $data['interface_filter']); } $data['ports'] = $query->get(); return view('widgets.top-interfaces', $data); } public function getSettingsView(Request $request) { return view('widgets.settings.top-interfaces', $this->getSettings(true)); } }