skippedReason; } /** Product rows scanned. */ public function scannedProducts(): int { return $this->scannedProducts; } /** URLs submitted to Cloud. */ public function submittedUrls(): int { return $this->submittedUrls; } /** Product statuses persisted. */ public function persistedResults(): int { return $this->persistedResults; } /** Stored retry attempts. */ public function attempts(): int { return $this->attempts; } /** Earliest retry instant. */ public function nextAvailableAt(): ?DateTimeImmutable { return $this->nextAvailableAt; } /** Whether the tick was skipped. */ public function isSkipped(): bool { return $this->skippedReason !== null; } /** Whether retry/backoff was scheduled. */ public function isRetryScheduled(): bool { return $this->skippedReason === null && $this->nextAvailableAt !== null; } /** Whether the tick completed successfully. */ public function isSuccess(): bool { return $this->skippedReason === null && $this->nextAvailableAt === null; } }