PluginProbe ʕ •ᴥ•ʔ
WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin / 3.11.0
WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin v3.11.0
4.9.0 0.9.6 1.0.0 1.0.1 1.0.2 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.6.0 1.6.2 1.7.0 1.7.1 1.8.0 1.8.1 1.9.0 2.0.0 2.0.1 2.1.1 2.2.1 2.3.1 2.4.0 2.5.0 2.5.1 2.6.0 2.7.0 2.8.0 2.9.0 3.0.1 3.0.2 3.0.3 3.1.0 3.10.0 3.11.0 3.11.1 3.2.0 3.2.1 3.3.0 3.4.0 3.5.0 3.5.1 3.5.2 3.6.1 3.7.0 3.8.0 3.8.2 3.9.0 4.0.1 4.1.0 4.1.1 4.2.0 4.3.0 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.8.0 trunk 0.10.0 0.10.1 0.11.1 0.11.2 0.3.1 0.3.2 0.4 0.4.1 0.4.2 0.5.0 0.5.1 0.5.2 0.6 0.7 0.8 0.8.2 0.8.3 0.8.4 0.8.5 0.8.6 0.8.7 0.9.0 0.9.1 0.9.2 0.9.3 0.9.4 0.9.5
wp-mail-smtp / vendor / woocommerce / action-scheduler / classes / WP_CLI / ActionScheduler_WPCLI_QueueRunner.php
wp-mail-smtp / vendor / woocommerce / action-scheduler / classes / WP_CLI Last commit date
ActionScheduler_WPCLI_Clean_Command.php 2 years ago ActionScheduler_WPCLI_QueueRunner.php 2 years ago ActionScheduler_WPCLI_Scheduler_command.php 2 years ago Migration_Command.php 2 years ago ProgressBar.php 2 years ago
ActionScheduler_WPCLI_QueueRunner.php
198 lines
1 <?php
2
3 use Action_Scheduler\WP_CLI\ProgressBar;
4
5 /**
6 * WP CLI Queue runner.
7 *
8 * This class can only be called from within a WP CLI instance.
9 */
10 class ActionScheduler_WPCLI_QueueRunner extends ActionScheduler_Abstract_QueueRunner {
11
12 /** @var array */
13 protected $actions;
14
15 /** @var ActionScheduler_ActionClaim */
16 protected $claim;
17
18 /** @var \cli\progress\Bar */
19 protected $progress_bar;
20
21 /**
22 * ActionScheduler_WPCLI_QueueRunner constructor.
23 *
24 * @param ActionScheduler_Store $store
25 * @param ActionScheduler_FatalErrorMonitor $monitor
26 * @param ActionScheduler_QueueCleaner $cleaner
27 *
28 * @throws Exception When this is not run within WP CLI
29 */
30 public function __construct( ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null ) {
31 if ( ! ( defined( 'WP_CLI' ) && WP_CLI ) ) {
32 /* translators: %s php class name */
33 throw new Exception( sprintf( __( 'The %s class can only be run within WP CLI.', 'action-scheduler' ), __CLASS__ ) );
34 }
35
36 parent::__construct( $store, $monitor, $cleaner );
37 }
38
39 /**
40 * Set up the Queue before processing.
41 *
42 * @author Jeremy Pry
43 *
44 * @param int $batch_size The batch size to process.
45 * @param array $hooks The hooks being used to filter the actions claimed in this batch.
46 * @param string $group The group of actions to claim with this batch.
47 * @param bool $force Whether to force running even with too many concurrent processes.
48 *
49 * @return int The number of actions that will be run.
50 * @throws \WP_CLI\ExitException When there are too many concurrent batches.
51 */
52 public function setup( $batch_size, $hooks = array(), $group = '', $force = false ) {
53 $this->run_cleanup();
54 $this->add_hooks();
55
56 // Check to make sure there aren't too many concurrent processes running.
57 if ( $this->has_maximum_concurrent_batches() ) {
58 if ( $force ) {
59 WP_CLI::warning( __( 'There are too many concurrent batches, but the run is forced to continue.', 'action-scheduler' ) );
60 } else {
61 WP_CLI::error( __( 'There are too many concurrent batches.', 'action-scheduler' ) );
62 }
63 }
64
65 // Stake a claim and store it.
66 $this->claim = $this->store->stake_claim( $batch_size, null, $hooks, $group );
67 $this->monitor->attach( $this->claim );
68 $this->actions = $this->claim->get_actions();
69
70 return count( $this->actions );
71 }
72
73 /**
74 * Add our hooks to the appropriate actions.
75 *
76 * @author Jeremy Pry
77 */
78 protected function add_hooks() {
79 add_action( 'action_scheduler_before_execute', array( $this, 'before_execute' ) );
80 add_action( 'action_scheduler_after_execute', array( $this, 'after_execute' ), 10, 2 );
81 add_action( 'action_scheduler_failed_execution', array( $this, 'action_failed' ), 10, 2 );
82 }
83
84 /**
85 * Set up the WP CLI progress bar.
86 *
87 * @author Jeremy Pry
88 */
89 protected function setup_progress_bar() {
90 $count = count( $this->actions );
91 $this->progress_bar = new ProgressBar(
92 /* translators: %d: amount of actions */
93 sprintf( _n( 'Running %d action', 'Running %d actions', $count, 'action-scheduler' ), $count ),
94 $count
95 );
96 }
97
98 /**
99 * Process actions in the queue.
100 *
101 * @author Jeremy Pry
102 *
103 * @param string $context Optional runner context. Default 'WP CLI'.
104 *
105 * @return int The number of actions processed.
106 */
107 public function run( $context = 'WP CLI' ) {
108 do_action( 'action_scheduler_before_process_queue' );
109 $this->setup_progress_bar();
110 foreach ( $this->actions as $action_id ) {
111 // Error if we lost the claim.
112 if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $this->claim->get_id() ) ) ) {
113 WP_CLI::warning( __( 'The claim has been lost. Aborting current batch.', 'action-scheduler' ) );
114 break;
115 }
116
117 $this->process_action( $action_id, $context );
118 $this->progress_bar->tick();
119 }
120
121 $completed = $this->progress_bar->current();
122 $this->progress_bar->finish();
123 $this->store->release_claim( $this->claim );
124 do_action( 'action_scheduler_after_process_queue' );
125
126 return $completed;
127 }
128
129 /**
130 * Handle WP CLI message when the action is starting.
131 *
132 * @author Jeremy Pry
133 *
134 * @param $action_id
135 */
136 public function before_execute( $action_id ) {
137 /* translators: %s refers to the action ID */
138 WP_CLI::log( sprintf( __( 'Started processing action %s', 'action-scheduler' ), $action_id ) );
139 }
140
141 /**
142 * Handle WP CLI message when the action has completed.
143 *
144 * @author Jeremy Pry
145 *
146 * @param int $action_id
147 * @param null|ActionScheduler_Action $action The instance of the action. Default to null for backward compatibility.
148 */
149 public function after_execute( $action_id, $action = null ) {
150 // backward compatibility
151 if ( null === $action ) {
152 $action = $this->store->fetch_action( $action_id );
153 }
154 /* translators: 1: action ID 2: hook name */
155 WP_CLI::log( sprintf( __( 'Completed processing action %1$s with hook: %2$s', 'action-scheduler' ), $action_id, $action->get_hook() ) );
156 }
157
158 /**
159 * Handle WP CLI message when the action has failed.
160 *
161 * @author Jeremy Pry
162 *
163 * @param int $action_id
164 * @param Exception $exception
165 * @throws \WP_CLI\ExitException With failure message.
166 */
167 public function action_failed( $action_id, $exception ) {
168 WP_CLI::error(
169 /* translators: 1: action ID 2: exception message */
170 sprintf( __( 'Error processing action %1$s: %2$s', 'action-scheduler' ), $action_id, $exception->getMessage() ),
171 false
172 );
173 }
174
175 /**
176 * Sleep and help avoid hitting memory limit
177 *
178 * @param int $sleep_time Amount of seconds to sleep
179 * @deprecated 3.0.0
180 */
181 protected function stop_the_insanity( $sleep_time = 0 ) {
182 _deprecated_function( 'ActionScheduler_WPCLI_QueueRunner::stop_the_insanity', '3.0.0', 'ActionScheduler_DataController::free_memory' );
183
184 ActionScheduler_DataController::free_memory();
185 }
186
187 /**
188 * Maybe trigger the stop_the_insanity() method to free up memory.
189 */
190 protected function maybe_stop_the_insanity() {
191 // The value returned by progress_bar->current() might be padded. Remove padding, and convert to int.
192 $current_iteration = intval( trim( $this->progress_bar->current() ) );
193 if ( 0 === $current_iteration % 50 ) {
194 $this->stop_the_insanity();
195 }
196 }
197 }
198