persistResults(CheckDomainDns::run( [$this->statusKey => $this->url], $this->server, $this->expectedIp, $this->skipForMultipleServers, )); } public function failed(?\Throwable $exception): void { $this->persistResults([ $this->statusKey => $this->status('failed', 'Could not validate DNS for this domain.'), ]); } /** * @return array{status: string, message: string, expected_ip: ?string, checked_at: string} */ private function status(string $status, string $message): array { return [ 'status' => $status, 'message' => $message, 'expected_ip' => $this->expectedIp, 'checked_at' => now()->toIso8601String(), ]; } /** * @param array $results */ private function persistResults(array $results): void { DB::transaction(function () use ($results): void { $resource = $this->resource::query()->lockForUpdate()->find($this->resource->getKey()); if (! $resource) { return; } $statuses = $resource->domain_dns_statuses ?? []; foreach ($results as $key => $result) { if (($statuses[$key]['status'] ?? null) !== 'checking' || ($statuses[$key]['check_id'] ?? null) !== $this->checkId) { continue; } $statuses[$key] = $result; } $resource->domain_dns_statuses = $statuses === [] ? null : $statuses; $resource->save(); }); } }