Commit Graph

60 Commits

Author SHA1 Message Date
Rostislav Wolny
d3e2bcdf34 Refactor daemon trigger and daemon run actions to extra classes
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
476ee1ede9 Refactor triggering new action scheduler executor into extra service
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
bb1d461c54 Fix code formatting issues in ActionSchedulerRunner class
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
dfae17ed94 Add missing return and parameter types to action scheduler related classes
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
2ba1696d53 Add adaptive execution limit when daemon runs inside Action Scheduler
We use action_scheduler_maximum_execution_time_likely_to_be_exceeded filter for reading remaining execution limit
tracked in the Action Scheduler runner.
Then we use the remaining limit minus safety margin for the daemon execution.

[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
91e72ee646 Lower execution limit of daemon in case it runs in action scheduler
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
cacb44444c Add DaemonActionSchedulerRunner integration test
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
b525f9f876 Deactivate action scheduler actions when another method is active
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
e3fbf2421d Move action scheduler initialization to Initializer as one of first actions
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
86562e99b9 Trigger additional executor only when MailPoet daemon runs
In afterProcess callback we trigger a new runner when there are still some scheduled tasks
to process. Before this change we did this for every action scheduler run and it was causing that
we triggered more HTTP requests than needed.
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
f59945d483 Add wrapper class for action scheduler in cron
The class add GROUP ID so that all MailPoet cron tasks are stored under the same group.
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
7e5d632148 Make Action Scheduler the default method for MailPoet background job
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
2b44684c38 Add action scheduler method to cron trigger
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
ccfdd229ec Add action scheduler daemon runner
This commit adds a class that handles continuous processing of MailPoet cron daemon
using Action Scheduler's recurring actions.
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Jan Lysý
155445b313 Remove old model from SendingQueue Migration
[MAILPOET-4358]
2022-08-01 13:09:20 +02:00
Rostislav Wolny
8d4799b050 Fix models check conditions in sending queue
[MAILPOET-4511]
2022-07-29 10:33:05 +02:00
Rostislav Wolny
5042cdd15e Refactor fetching newsletter options in SendingQueue using doctrine
[MAILPOET-4511]
2022-07-29 10:33:05 +02:00
Rodrigo Primo
ae13fcc771 Make sure $metas[] is always set for all subscribers in the foreach loop
See https://github.com/mailpoet/mailpoet/pull/4247#pullrequestreview-1050167548

[MAILPOET-4379]
2022-07-27 08:48:15 +02:00
Rodrigo Primo
932512b720 Replace Paris models with Doctrine entities in MetaInfoTest
In the process it was necessary to change the signature of the method
\MailPoet\Mailer\MetaInfo::getNewsletterMetaInfo() to accept a
SubscriberEntity instead of a Subscriber model and also change
\MailPoet\Cron\Workers\SendingQueue\SendingQueue::processQueue() as it
calls getNewsletterMetaInfo().

Doing this was straightforward, but changing the test class for
SendingQueue was a bit more involved. In particular, the test
SendingQueueTest::testItEnforcesExecutionLimitsAfterQueueProcessing().

This test is a bit brittle and was creating Subscriber models without
saving them to the database with invalid statuses and sources. Switching
getNewsletterMetaInfo() to use entities, while
SendingQueue::processQueue() still uses models, meant that it was
necessary to save the subscribers to the database. Because of this, it
was not possible anymore to use invalid statuses and sources, and
thus, the test changed a bit.

[MAILPOET-4379]
2022-07-27 08:48:15 +02:00
Sam Najian
fb49ce5ac4 Adjust usage of Renderer::render in SendingQueue\Tasks::Newsletter
[MAILPOET-4360]
2022-07-14 13:13:47 +02:00
Rostislav Wolny
f1941bc4da Add support for overriding cron site url via constant
This allows to configure a special URL base for cron.
Cases here are dev environments, but also potentially intranet sites or anything else with an atypical network layout
[MAILPOET-4406]
2022-06-09 09:31:56 +02:00
Jan Lysý
3bd49fbc27 Fix annotation in AutomatedEmails
[MAILPOET-4308]
2022-05-19 14:18:18 +02:00
Jan Lysý
5ab04b8b22 Remove usage constant from the old model
[MAILPOET-4338]
2022-05-19 14:18:06 +02:00
David Remer
33e5e15e98 Remove MailPoet Trigger
[MAILPOET-4271]
2022-05-09 13:06:28 +02:00
Brezo Cordero
add4039495 Cast type of meta in SubscribersEmailCount task for backwards fix
[MAILPOET-4281]
2022-05-09 13:05:21 +02:00
Rostislav Wolny
fe2397a65e Optimize WordPress cron trigger SQL
Majority of scheduled tasks DB records are completed tasks.
We check completed tasks only for Migration worker task type.
Excluding other workers' completed tasks significantly speeds up the query
on sites with longer history. E.g. on mailpoet.com the query sped up from 0.6s to 0.003s.

[MAILPOET-4314]
2022-05-09 10:19:20 +02:00
Rodrigo Primo
4113c35dc7 Replace Paris code with Doctrine in \MailPoet\Cron\Triggers\WordPress
[MAILPOET-4140]
2022-05-05 19:14:21 +02:00
David Remer
e4b53dd763 Do not deactivate an inactive daemon
If the daemon is already inactive, we do not need an additional SQL
insert

[MAILPOET-4267]
2022-05-02 13:09:12 +02:00
David Remer
8879e505e2 Exit early when the runInterval is -1
By default checkRunInterval will always return true because there is no way
the time which has passed since the last run is smaller than -1. To prevent
unnecessary code execution and an not needed SQL insert, we can return true
in checkRunInterval() early.

[MAILPOET-4267]
2022-05-02 13:09:12 +02:00
David Remer
ca3f8bdc43 Make Scheduler non-static
[MAILPOET-4252]
2022-04-25 12:08:18 +02:00
Jan Lysý
1310e5afec Disable marking subscribers as processed on error
[MAILPOET-4200]
2022-04-25 10:58:12 +02:00
Rostislav Wolny
789385b0c4 Refactor mailerInstance property to mailerMethod
Naming mailerInstance was confusing since
it is not instance of Mailer class but instance of MailerMethod.
[MAILPOET-4115]
2022-04-11 16:54:38 +02:00
Rostislav Wolny
d4a8315933 Use mailerFactory in SendingQueue Mailer task
[MAILPOET-4115]
2022-04-11 16:54:38 +02:00
Rostislav Wolny
68cb5c4f79 Inject MailerFactory instead of mailer
We can't create mailer directly in DI container using the factory because it may fail in case
the plugin is not configured properly and prevent plugin from start.

The Mailer was previously injected because it contains lazy initialization.
The lazy initialization in the singleton Mailer service was dangerous,
because when used with some custom parameters it could cause that all services
that inject the Mailer from DI would use the custom config instead the default.
[MAILPOET-4115]
2022-04-11 16:54:38 +02:00
Jan Lysý
4a0534ac2a Remove deprecated upgrade link
[MAILPOET-4183]
2022-04-11 15:26:39 +02:00
Brezo Cordero
d0f645d239 Do not run email count if inactive subscribers disabled
[MAILPOET-4177]
2022-04-07 10:17:38 +02:00
Brezo Cordero
ba1da229a8 Add SimpleWorker to calculate Subscriber email_counts
[MAILPOET-4177]
2022-04-07 10:17:38 +02:00
David Remer
53fc49d1eb Simplify phpcs:disable comments
Additionally this commit contains a conversion from %d to %s in a query

[MAILPOET-4219]
2022-04-04 17:12:33 +02:00
David Remer
9f39843189 Sanitize incoming data according to WP sniffer
[MAILPOET-4219]
2022-04-04 17:12:33 +02:00
David Remer
cb55cae1b2 Escape SQL queries following wp org sniffs
[MAILPOET-4129]
2022-04-04 17:12:33 +02:00
Sam Najian
a2ab1a3cfd Escape queries before passing to $wpdb methods
[MAILPOET-4219]
2022-04-04 17:12:33 +02:00
David Remer
a8d88beec9 Escape output according to WP sniffs
[MAILPOET-4129]
2022-04-04 17:12:33 +02:00
Rostislav Wolny
095f85c897 Update PHPStan and fix new issues
[MAILPOET-4175]
2022-03-28 13:49:41 +02:00
Rostislav Wolny
9b71a7804c Update Monolog/Monolog from v1 to v2
[MAILPOET-4175]
2022-03-28 13:49:41 +02:00
Rodrigo Primo
54ecb6065c Replace old ScheduledTask model with ScheduledTaskEntity in SubscribersFinder
[MAILPOET-3925]
2022-03-28 08:13:53 +02:00
Rodrigo Primo
0a73135c83 Replace old Segment model with Doctrine in SubscribersFinder
[MAILPOET-3925]
2022-03-28 08:13:53 +02:00
Jan Lysý
82e05dfe0f Add fixes for better compatibility with PHP8.1
[MAILPOET-4015]
2022-03-14 09:38:20 +01:00
Rostislav Wolny
b1976b2d1b Save correct processed_at when finishing scheduled task
[MAILPOE-4172]
2022-03-08 12:39:34 +01:00
Rostislav Wolny
6a6c04f168 Fetch only subscribed recipients when sending a newsletter
[MAILPOET-4166]
2022-03-07 16:05:48 +01:00
Jan Lysý
15877215d1 Use exception instead of early return
[MAILPOET-4047]
2022-03-01 10:58:31 +01:00