Add cron pinging endpoint

[MAILPOET-6029]
This commit is contained in:
alex-mpoet
2024-06-03 16:26:24 +03:00
committed by Aschepikov
parent 07ef513bce
commit c59ae2d82c
2 changed files with 62 additions and 1 deletions

View File

@ -8,6 +8,7 @@ use MailPoet\API\JSON\Response;
use MailPoet\API\JSON\ResponseBuilders\SendingQueuesResponseBuilder;
use MailPoet\Config\AccessControl;
use MailPoet\Cron\ActionScheduler\Actions\DaemonTrigger;
use MailPoet\Cron\CronHelper;
use MailPoet\Cron\CronTrigger;
use MailPoet\Cron\Triggers\WordPress;
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
@ -59,6 +60,9 @@ class SendingQueue extends APIEndpoint {
/** @var SendingQueuesResponseBuilder */
private $sendingQueuesResponseBuilder;
/** @var CronHelper */
private $cronHelper;
public function __construct(
SubscribersFeature $subscribersFeature,
NewslettersRepository $newsletterRepository,
@ -69,7 +73,8 @@ class SendingQueue extends APIEndpoint {
SettingsController $settings,
DaemonTrigger $actionSchedulerDaemonTriggerAction,
NewsletterValidator $newsletterValidator,
SendingQueuesResponseBuilder $sendingQueuesResponseBuilder
SendingQueuesResponseBuilder $sendingQueuesResponseBuilder,
CronHelper $cronHelper
) {
$this->subscribersFeature = $subscribersFeature;
$this->subscribersFinder = $subscribersFinder;
@ -81,6 +86,7 @@ class SendingQueue extends APIEndpoint {
$this->actionSchedulerDaemonTriggerAction = $actionSchedulerDaemonTriggerAction;
$this->newsletterValidator = $newsletterValidator;
$this->sendingQueuesResponseBuilder = $sendingQueuesResponseBuilder;
$this->cronHelper = $cronHelper;
}
public function add($data = []) {
@ -245,6 +251,22 @@ class SendingQueue extends APIEndpoint {
}
}
public function pingCron() {
try {
$cronPingResponse = $this->cronHelper->pingDaemon();
} catch (\Exception $e) {
return $this->errorResponse([
APIError::UNKNOWN => $e->getMessage(),
]);
}
if (!$this->cronHelper->validatePingResponse($cronPingResponse)) {
return $this->errorResponse([
APIError::UNKNOWN => $cronPingResponse,
]);
}
return $this->successResponse();
}
/**
* In case the newsletter was switched to sending trigger the background job immediately.
* This is done so that user immediately sees that email is sending and doesn't have to wait on WP Cron to start it.