<?php namespace App\Http\Controllers; use App\Actions\Monitoring\GetMetrics; use App\Actions\Monitoring\UpdateMetricSettings; use App\Facades\Toast; use App\Helpers\HtmxResponse; use App\Models\Server; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; class MetricController extends Controller { public function index(Server $server, Request $request): View|RedirectResponse { $this->authorize('manage', $server); $this->checkIfMonitoringServiceInstalled($server); return view('metrics.index', [ 'server' => $server, 'data' => app(GetMetrics::class)->filter($server, $request->input()), 'lastMetric' => $server->metrics()->latest()->first(), ]); } public function settings(Server $server, Request $request): HtmxResponse { $this->authorize('manage', $server); $this->checkIfMonitoringServiceInstalled($server); app(UpdateMetricSettings::class)->update($server, $request->input()); Toast::success('Metric settings updated successfully'); return htmx()->back(); } private function checkIfMonitoringServiceInstalled(Server $server): void { $this->authorize('manage', $server); if (! $server->monitoring()) { abort(404, 'Monitoring service is not installed on this server'); } } }