diff --git a/app/Actions/Ookla/RunSpeedtest.php b/app/Actions/Ookla/RunSpeedtest.php index 0d6a87a87..c3814310e 100644 --- a/app/Actions/Ookla/RunSpeedtest.php +++ b/app/Actions/Ookla/RunSpeedtest.php @@ -23,13 +23,14 @@ class RunSpeedtest { use AsAction; - public function handle(bool $scheduled = false, ?int $serverId = null): mixed + public function handle(bool $scheduled = false, ?int $serverId = null, ?int $dispatchedBy = null): mixed { $result = Result::create([ 'data->server->id' => $serverId, 'service' => ResultService::Ookla, 'status' => ResultStatus::Waiting, 'scheduled' => $scheduled, + 'dispatched_by' => $dispatchedBy, ]); SpeedtestWaiting::dispatch($result); diff --git a/app/Http/Controllers/Api/V1/SpeedtestController.php b/app/Http/Controllers/Api/V1/SpeedtestController.php index a0b00a37a..19519f61e 100644 --- a/app/Http/Controllers/Api/V1/SpeedtestController.php +++ b/app/Http/Controllers/Api/V1/SpeedtestController.php @@ -38,6 +38,7 @@ public function __invoke(Request $request) $result = RunSpeedtestAction::run( serverId: $request->input('server_id'), + dispatchedBy: $request->user()->id, ); return $this->sendResponse( diff --git a/app/Http/Resources/V1/ResultResource.php b/app/Http/Resources/V1/ResultResource.php index e00710297..069a90e71 100644 --- a/app/Http/Resources/V1/ResultResource.php +++ b/app/Http/Resources/V1/ResultResource.php @@ -34,6 +34,7 @@ public function toArray(Request $request): array 'healthy' => $this->healthy, 'status' => $this->status, 'scheduled' => $this->scheduled, + 'dispatched_by' => $this->dispatched_by, 'comments' => $this->comments, 'data' => $this->data, 'created_at' => $this->created_at->toDateTimestring(), diff --git a/app/Livewire/Topbar/RunSpeedtestAction.php b/app/Livewire/Topbar/RunSpeedtestAction.php index b6e77b292..ad8c05271 100644 --- a/app/Livewire/Topbar/RunSpeedtestAction.php +++ b/app/Livewire/Topbar/RunSpeedtestAction.php @@ -53,6 +53,7 @@ public function speedtestAction(): Action RunSpeedtest::run( serverId: $serverId, + dispatchedBy: Auth::id(), ); Notification::make() diff --git a/app/Models/Result.php b/app/Models/Result.php index 3ac4caa77..bba1a37d9 100644 --- a/app/Models/Result.php +++ b/app/Models/Result.php @@ -9,6 +9,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Prunable; +use Illuminate\Database\Eloquent\Relations\BelongsTo; class Result extends Model { @@ -45,4 +46,12 @@ public function prunable(): Builder { return static::where('created_at', '<=', now()->subDays(config('speedtest.prune_results_older_than'))); } + + /** + * Get the user who dispatched this speedtest. + */ + public function dispatchedBy(): BelongsTo + { + return $this->belongsTo(User::class, 'dispatched_by'); + } } diff --git a/database/migrations/2025_11_24_151719_add_dispatched_by_to_results_table.php b/database/migrations/2025_11_24_151719_add_dispatched_by_to_results_table.php new file mode 100644 index 000000000..473c9b776 --- /dev/null +++ b/database/migrations/2025_11_24_151719_add_dispatched_by_to_results_table.php @@ -0,0 +1,18 @@ +foreignId('dispatched_by')->nullable()->constrained('users')->nullOnDelete(); + }); + } +};