diff --git a/lib/Command/QueueProcess.php b/lib/Command/QueueProcess.php index d9991b9d..e73229ec 100644 --- a/lib/Command/QueueProcess.php +++ b/lib/Command/QueueProcess.php @@ -109,6 +109,7 @@ class QueueProcess extends Base { $this->activityService->manageInit(); foreach ($requests as $request) { + $request->setTimeout(ActivityService::TIMEOUT_SERVICE); $output->write('.'); try { $this->activityService->manageRequest($request); diff --git a/lib/Controller/QueueController.php b/lib/Controller/QueueController.php index c85dee2b..3900eec5 100644 --- a/lib/Controller/QueueController.php +++ b/lib/Controller/QueueController.php @@ -98,6 +98,7 @@ class QueueController extends Controller { $requests = $this->queueService->getRequestFromToken($token, RequestQueue::STATUS_STANDBY); $this->activityService->manageInit(); foreach ($requests as $request) { + $request->setTimeout(ActivityService::TIMEOUT_ASYNC); try { $this->activityService->manageRequest($request); } catch (RequestException $e) { diff --git a/lib/Cron/Queue.php b/lib/Cron/Queue.php index 1dd1b8c4..e63f8383 100644 --- a/lib/Cron/Queue.php +++ b/lib/Cron/Queue.php @@ -89,6 +89,7 @@ class Queue extends TimedJob { $this->activityService->manageInit(); foreach ($requests as $request) { + $request->setTimeout(ActivityService::TIMEOUT_SERVICE); try { $this->activityService->manageRequest($request); } catch (RequestException $e) { diff --git a/lib/Model/RequestQueue.php b/lib/Model/RequestQueue.php index d96253f3..afe0c1f5 100644 --- a/lib/Model/RequestQueue.php +++ b/lib/Model/RequestQueue.php @@ -79,6 +79,9 @@ class RequestQueue implements JsonSerializable { /** @var int */ private $last = 0; + /** @var int */ + private $timeout = 5; + /** * RequestQueue constructor. @@ -285,6 +288,24 @@ class RequestQueue implements JsonSerializable { } + /** + * @param int $timeout + * + * @return RequestQueue + */ + public function setTimeout(int $timeout): RequestQueue { + $this->timeout = $timeout; + + return $this; + } + + /** + * @return int + */ + public function getTimeout(): int { + return $this->timeout; + } + /** * @param array $data */ diff --git a/lib/Service/ActivityService.php b/lib/Service/ActivityService.php index 69a5f6a1..ce8b7341 100644 --- a/lib/Service/ActivityService.php +++ b/lib/Service/ActivityService.php @@ -68,6 +68,10 @@ class ActivityService { const REQUEST_INBOX = 1; + const TIMEOUT_LIVE = 2; + const TIMEOUT_ASYNC = 5; + const TIMEOUT_SERVICE = 10; + const CONTEXT_ACTIVITYSTREAMS = 'https://www.w3.org/ns/activitystreams'; const CONTEXT_SECURITY = 'https://w3id.org/security/v1'; @@ -242,6 +246,7 @@ class ActivityService { try { $directRequest = $this->queueService->getPriorityRequest($token); + $directRequest->setTimeout(self::TIMEOUT_LIVE); $this->manageRequest($directRequest); } catch (RequestException $e) { } catch (NoHighPriorityRequestException $e) { @@ -280,9 +285,7 @@ class ActivityService { } try { - $result = $this->generateRequest( - $queue->getInstance(), $queue->getActivity(), $queue->getAuthor() - ); + $result = $this->generateRequestFromQueue($queue); } catch (ActorDoesNotExistException $e) { $this->queueService->deleteRequest($queue); @@ -362,9 +365,7 @@ class ActivityService { /** - * @param InstancePath $path - * @param string $activity - * @param string $author + * @param RequestQueue $queue * * @return Request[] * @throws ActorDoesNotExistException @@ -372,10 +373,15 @@ class ActivityService { * @throws RequestException * @throws SocialAppConfigException */ - public function generateRequest(InstancePath $path, string $activity, string $author): array { + public function generateRequestFromQueue(RequestQueue $queue): array { + //InstancePath $path, string $activity, string $author +// $queue->getInstance(), $queue->getActivity(), $queue->getAuthor() +// ); + $path = $queue->getInstance(); + // $document = json_encode($activity); $date = gmdate(self::DATE_FORMAT); - $localActor = $this->getActorFromAuthor($author); + $localActor = $this->getActorFromAuthor($queue->getAuthor()); $localActorLink = $this->configService->getUrlSocial() . '@' . $localActor->getPreferredUsername(); @@ -397,11 +403,12 @@ class ActivityService { } $request = new Request($path->getPath(), $requestType); + $request->setTimeout($queue->getTimeout()); $request->addHeader('Host: ' . $path->getAddress()); $request->addHeader('Date: ' . $date); $request->addHeader('Signature: ' . $header); - $request->setDataJson($activity); + $request->setDataJson($queue->getActivity()); $request->setAddress($path->getAddress()); return $this->curlService->request($request); diff --git a/lib/Service/CurlService.php b/lib/Service/CurlService.php index e073cdf7..f24f3983 100644 --- a/lib/Service/CurlService.php +++ b/lib/Service/CurlService.php @@ -152,8 +152,8 @@ class CurlService { $headers[] = 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"'; curl_setopt($curl, CURLOPT_USERAGENT, $request->getUserAgent()); - curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); - curl_setopt($curl, CURLOPT_TIMEOUT, 20); + curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $request->getTimeout()); + curl_setopt($curl, CURLOPT_TIMEOUT, $request->getTimeout()); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); diff --git a/lib/Service/QueueService.php b/lib/Service/QueueService.php index d7228acb..60ed4320 100644 --- a/lib/Service/QueueService.php +++ b/lib/Service/QueueService.php @@ -148,6 +148,11 @@ class QueueService { } + /** + * @param int $total + * + * @return RequestQueue[] + */ public function getRequestStandby(int &$total = 0): array { $requests = $this->requestQueueRequest->getStandby(); $total = sizeof($requests); @@ -168,7 +173,7 @@ class QueueService { * @param string $token * @param int $status * - * @return array + * @return RequestQueue[] */ public function getRequestFromToken(string $token, int $status = -1): array { if ($token === '') {