PluginProbe ʕ •ᴥ•ʔ
WooCommerce / 5.7.0-rc.1
WooCommerce v5.7.0-rc.1
10.9.1 10.9.0 10.9.0-rc.1 10.9.0-beta.2 10.9.0-beta.1 10.8.1 10.8.0 10.8.0-rc.1 10.8.0-beta.2 10.8.0-beta.1 7.8.0-beta.1 7.8.0-beta.2 7.8.0-rc.1 7.8.0-rc.2 7.8.1 7.8.2 7.8.3 7.8.4 7.9.0 7.9.0-beta.1 7.9.0-beta.2 7.9.0-rc.2 7.9.0-rc.3 7.9.1 7.9.2 8.0.0 8.0.0-beta.1 8.0.0-beta.2 8.0.0-rc.1 8.0.0-rc.2 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.1.0 8.1.0-beta.1 8.1.0-rc.1 8.1.0-rc.2 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 8.2.0-beta.1 8.2.0-rc.1 8.2.0-rc.2 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.3.0 8.3.0-beta.1 8.3.0-rc.1 8.3.0-rc.2 8.3.1 8.3.2 8.3.3 8.3.4 8.4.0 8.4.0-beta.1 8.4.0-rc.1 8.4.1 8.4.2 8.4.3 8.5.0 8.5.0-beta.1 8.5.0-rc.1 8.5.1 8.5.2 8.5.3 8.5.4 8.5.5 8.6.0 8.6.0-beta.1 8.6.0-rc.1 8.6.1 8.6.2 8.6.3 8.6.4 8.7.0 8.7.0-beta.1 8.7.0-beta.2 8.7.0-rc.1 8.7.1 8.7.2 8.7.3 8.8.0 8.8.0-beta.1 8.8.0-rc.1 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.8.6 8.8.7 8.9.0 8.9.0-beta.1 8.9.0-rc.1 8.9.1 8.9.2 8.9.3 8.9.4 8.9.5 9.0.0 9.0.0-beta.1 9.0.0-beta.2 9.0.0-rc.1 9.0.1 9.0.2 9.0.3 9.0.4 9.1.0 9.1.0-beta.1 9.1.0-rc.1 9.1.1 9.1.2 9.1.3 9.1.4 9.1.5 9.1.6 9.2.0 9.2.0-beta.1 9.2.0-rc.1 9.2.1 9.2.2 9.2.3 9.2.4 9.2.5 9.3.0 9.3.0-beta.1 9.3.0-rc.1 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.3.6 9.4.0 9.4.0-beta.1 9.4.0-beta.2 9.4.0-rc.1 9.4.0-rc.2 9.4.0-rc.3 9.4.0-rc.4 9.4.1 9.4.2 9.4.3 9.4.4 9.4.5 9.5.0 9.5.0-beta.1 9.5.0-beta.2 9.5.0-rc.1 9.5.1 9.5.2 9.5.3 9.5.4 9.6.0 9.6.0-beta.1 9.6.0-beta.2 9.6.0-rc.1 9.6.1 9.6.2 9.6.3 9.6.4 9.7.0 9.7.0-beta.1 9.7.0-rc.1 9.7.1 9.7.2 9.7.3 9.8.0 9.8.0-beta.1 9.8.0-rc.1 9.8.1 9.8.2 9.8.3 9.8.4 9.8.5 9.8.6 9.8.7 9.9.0 9.9.0-beta.1 9.9.0-rc.1 9.9.1 9.9.2 9.9.3 9.9.4 9.9.5 9.9.6 9.9.7 3.7.3 7.1.2 3.8.0 7.2.0 3.8.0-beta.1 7.2.0-beta.1 3.8.0-rc.1 7.2.0-beta.2 3.8.0-rc.2 7.2.0-rc.1 3.8.1 7.2.0-rc.2 3.8.2 7.2.1 3.8.3 7.2.2 3.9.0 7.2.3 3.9.0-beta.1 7.2.4 3.9.0-beta.2 7.3.0 3.9.0-rc.1 7.3.0-beta.1 3.9.0-rc.2 7.3.0-beta.2 3.9.0-rc.3 7.3.0-rc.1 3.9.0-rc.4 7.3.0-rc.2 3.9.1 7.3.1 3.9.2 7.4.0 3.9.3 7.4.0-beta.1 3.9.4 7.4.0-beta.2 3.9.5 7.4.0-rc.1 4.0.0 7.4.0-rc.2 4.0.0-beta.1 7.4.1 4.0.0-rc.1 7.4.2 4.0.0-rc.2 7.5.0 4.0.1 7.5.0-beta.1 4.0.2 7.5.0-beta.2 4.0.3 7.5.0-rc.1 4.0.4 7.5.1 4.1.0 7.5.2 4.1.0-beta.1 7.6.0 4.1.0-beta.2 7.6.0-beta.1 4.1.0-rc.1 7.6.0-beta.2 4.1.0-rc.2 7.6.0-rc.1 4.1.1 7.6.0-rc.2 4.1.2 7.6.0-rc.3 4.1.3 7.6.1 4.1.4 7.6.2 4.2.0 7.7.0 4.2.0-RC.1 7.7.0-beta.1 4.2.0-RC.2 7.7.0-beta.2 4.2.0-beta.1 7.7.0-rc.1 4.2.1 7.7.1 4.2.2 7.7.2 4.2.3 7.7.3 4.2.4 7.8.0 4.2.5 4.3.0 4.3.0-beta.1 4.3.0-rc.1 4.3.0-rc.2 4.3.0-rc.3 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.4.0 4.4.0-beta.1 4.4.0-rc.1 4.4.1 4.4.2 4.4.3 4.4.4 4.5.0 4.5.0-beta.1 4.5.0-rc.1 4.5.0-rc.3 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.6.0-beta.1 4.6.0-rc.1 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.7.0 4.7.0-beta.1 4.7.0-beta.2 4.7.0-rc.1 4.7.1 4.7.1-beta.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.0-beta.1 4.8.0-rc.1 4.8.0-rc.2 4.8.1 4.8.2 4.8.3 4.9.0 4.9.0-beta.1 4.9.0-rc.1 4.9.0-rc.2 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 5.0.0 5.0.0-beta.1 5.0.0-beta.2 5.0.0-rc.1 5.0.0-rc.2 5.0.0-rc.3 5.0.1 5.0.2 5.0.3 5.1.0 5.1.0-beta.1 5.1.0-rc.1 trunk 5.1.1 10.0.0 5.1.2 10.0.0-rc.1 5.1.3 10.0.0-rc.2 5.2.0 10.0.1 5.2.0-beta.1 10.0.2 5.2.0-rc.1 10.0.3 5.2.0-rc.2 10.0.4 5.2.1 10.0.5 5.2.2 10.0.6 5.2.3 10.1.0 5.2.4 10.1.0-rc.1 5.2.5 10.1.0-rc.2 5.3.0 10.1.0-rc.3 5.3.0-beta.1 10.1.0-rc.4 5.3.0-rc.1 10.1.1 5.3.0-rc.2 10.1.2 5.3.1 10.1.3 5.3.2 10.1.4 5.3.3 10.2.0 5.4.0 10.2.0-beta.1 5.4.0-beta.1 10.2.0-beta.2 5.4.0-rc.1 10.2.0-rc.1 5.4.1 10.2.1 5.4.2 10.2.2 5.4.3 10.2.3 5.4.4 10.2.4 5.4.5 10.3.0 5.5.0 10.3.0-beta.1 5.5.0-beta.1 10.3.0-beta.2 5.5.0-rc.1 10.3.0-rc.1 5.5.0-rc.2 10.3.0-rc.2 5.5.1 10.3.1 5.5.2 10.3.2 5.5.3 10.3.3 5.5.4 10.3.4 5.5.5 10.3.5 5.6.0 10.3.6 5.6.0-beta.1 10.3.7 5.6.0-rc.1 10.3.8 5.6.0-rc.2 10.4.0 5.6.1 10.4.0-beta.1 5.6.2 10.4.0-beta.2 5.6.3 10.4.0-rc.1 5.7.0 10.4.1 5.7.0-beta.1 10.4.2 5.7.0-rc.1 10.4.3 5.7.1 10.4.4 5.7.2 10.5.0 5.7.3 10.5.0-beta.1 5.8.0 10.5.0-beta.2 5.8.0-beta.1 10.5.0-rc.1 5.8.0-beta.2 10.5.0-rc.2 5.8.0-rc.1 10.5.0-rc.3 5.8.1 10.5.1 5.8.2 10.5.2 5.9.0 10.5.3 5.9.0-beta.1 10.6.0 5.9.0-rc.1 10.6.0-beta.1 5.9.0-rc.2 10.6.0-beta.2 5.9.1 10.6.0-rc.1 5.9.2 10.6.1 6.0.0 10.6.2 6.0.0-beta.1 10.7.0 6.0.0-rc.1 10.7.0-beta.1 6.0.1 10.7.0-beta.2 6.0.2 10.7.0-rc.1 6.1.0 3.0.0 6.1.0-beta.1 3.0.1 6.1.0-rc.1 3.0.2 6.1.0-rc.2 3.0.3 6.1.1 3.0.4 6.1.2 3.0.5 6.1.3 3.0.6 6.2.0 3.0.7 6.2.0-beta.1 3.0.8 6.2.0-rc.1 3.0.9 6.2.0-rc.2 3.1.0 6.2.1 3.1.1 6.2.2 3.1.2 6.2.3 3.2.0 6.3.0 3.2.1 6.3.0-beta.1 3.2.2 6.3.0-rc.1 3.2.3 6.3.0-rc.2 3.2.4 6.3.1 3.2.5 6.3.2 3.2.6 6.4.0 3.3.0 6.4.0-beta.1 3.3.1 6.4.0-rc.1 3.3.2 6.4.1 3.3.2-rc.1 6.4.2 3.3.3 6.5.0 3.3.4 6.5.0-beta.1 3.3.5 6.5.0-rc.1 3.3.6 6.5.0-rc.2 3.4.0 6.5.1 3.4.0-beta.1 6.5.2 3.4.0-rc.2 6.6.0 3.4.1 6.6.0-beta.1 3.4.2 6.6.0-rc.1 3.4.3 6.6.0-rc.2 3.4.4 6.6.1 3.4.5 6.6.2 3.4.6 6.7.0 3.4.7 6.7.0-beta.1 3.4.8 6.7.0-beta.2 3.5.0 6.7.0-rc.1 3.5.0-beta.1 6.7.1 3.5.0-rc.1 6.8.0 3.5.0-rc.2 6.8.0-beta.1 3.5.1 6.8.0-beta.2 3.5.10 6.8.0-rc.1 3.5.2 6.8.1 3.5.3 6.8.2 3.5.4 6.8.3 3.5.5 6.9.0 3.5.6 6.9.0-beta.1 3.5.7 6.9.0-beta.2 3.5.8 6.9.0-rc.1 3.5.9 6.9.1 3.6.0 6.9.2 3.6.0-beta.1 6.9.3 3.6.0-rc.1 6.9.4 3.6.0-rc.2 6.9.5 3.6.0-rc.3 7.0.0 3.6.1 7.0.0-beta.1 3.6.2 7.0.0-beta.2 3.6.3 7.0.0-beta.3 3.6.4 7.0.0-rc.1 3.6.5 7.0.0-rc.2 3.6.6 7.0.1 3.6.7 7.0.2 3.7.0 7.1.0 3.7.0-beta.1 7.1.0-beta.1 3.7.0-rc.1 7.1.0-beta.2 3.7.0-rc.2 7.1.0-rc.1 3.7.1 7.1.0-rc.2 3.7.2 7.1.1
woocommerce / packages / action-scheduler / classes / WP_CLI / ActionScheduler_WPCLI_QueueRunner.php
woocommerce / packages / action-scheduler / classes / WP_CLI Last commit date
ActionScheduler_WPCLI_QueueRunner.php 6 years ago ActionScheduler_WPCLI_Scheduler_command.php 6 years ago Migration_Command.php 6 years ago ProgressBar.php 6 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.', 'woocommerce' ), __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.', 'woocommerce' ) );
60 } else {
61 WP_CLI::error( __( 'There are too many concurrent batches.', 'woocommerce' ) );
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, 'woocommerce' ), number_format_i18n( $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.', 'woocommerce' ) );
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', 'woocommerce' ), $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', 'woocommerce' ), $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', 'woocommerce' ), $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