From 8c5b5401f9500a630a6e073f6d62ff6e9a9cf164 Mon Sep 17 00:00:00 2001 From: Nawawi Jamili Date: Mon, 28 Jun 2021 10:22:15 +0800 Subject: [PATCH] bump 1.0.5 - Added: capture output from hook. - Added: time start. --- README.md | 49 ++++-- bin/docket-cronwp.phar | Bin 21109 -> 22024 bytes docket-cronwp.php | 2 +- includes/src/Bepart.php | 69 ++++++++ includes/src/Console.php | 163 +++--------------- includes/src/Parser.php | 2 +- includes/src/Process.php | 105 +++++++++++ .../vendor/composer/InstalledVersions.php | 4 +- .../vendor/composer/autoload_classmap.php | 2 + includes/vendor/composer/autoload_static.php | 2 + includes/vendor/composer/installed.php | 4 +- 11 files changed, 242 insertions(+), 160 deletions(-) create mode 100644 includes/src/Bepart.php create mode 100644 includes/src/Process.php diff --git a/README.md b/README.md index b66dd3c..2c3a3c7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# ![Docket CronWP](./.docketcache.com/icon-128x128.png) Docket CronWP +![Docket CronWP](./.docketcache.com/icon-128x128.png) +# Docket CronWP Execute WordPress cron events in parallel. @@ -42,7 +43,7 @@ define( 'DISABLE_WP_CRON', true ); ``` cronwp -h -Docket CronWP v1.0.4 +Docket CronWP v1.0.5 Execute WordPress cron events in parallel. Usage: @@ -68,24 +69,46 @@ Run WordPress cron with 3 events execute in parallel: cronwp /path-to/wordpress --jobs 3 ``` -Results: +Output: ``` -Executed the cron event 'wp_https_detection' in 0.006s +Executed the cron event 'wp_update_plugins' in 2.163s [ - hook => wp_https_detection - timer_start => 1624752922.008 - timer_stop => 1624752922.014 + pid => 43406 + time => 2021-06-28 02:14:53 + hook => wp_update_plugins + timer_start => 1624846493.252183 + timer_stop => 1624846495.415512 status => true - pid => 350128 ] -Executed the cron event 'wp_update_plugins' in 0.094s +Executed the cron event 'wp_update_themes' in 0.006s [ - hook => wp_update_plugins - timer_start => 1624752922.917 - timer_stop => 1624752923.011 + pid => 43407 + time => 2021-06-28 02:14:53 + hook => wp_update_themes + timer_start => 1624846493.253142 + timer_stop => 1624846493.259058 + status => true +] + +Executed the cron event 'wp_scheduled_delete' in 0.003s +[ + pid => 43408 + time => 2021-06-28 02:14:53 + hook => wp_scheduled_delete + timer_start => 1624846493.254066 + timer_stop => 1624846493.256793 + status => true +] + +Executed the cron event 'delete_expired_transients' in 0.000s +[ + pid => 43418 + time => 2021-06-28 02:14:55 + hook => delete_expired_transients + timer_start => 1624846495.438424 + timer_stop => 1624846495.438591 status => true - pid => 350135 ] ``` diff --git a/bin/docket-cronwp.phar b/bin/docket-cronwp.phar index 5e320b162c9b4dbe417b687dfc30490218059b7a..f8292d47766d65800da73a6d2e0ca6b17eef5ebf 100755 GIT binary patch delta 7503 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\s$/'], [null, ']$1', ' => ['], $data_r); + $data = implode(\PHP_EOL, array_filter(['['] + $data_r)); + + return str_replace([',', "'"], '', $data); + } + + private function output($text, $is_error = false) + { + $fd = $is_error ? \STDERR : \STDOUT; + fwrite($fd, $text); + } + + private function get_hash($string) + { + return substr(md5($string), 0, 12); + } + + private function lockpath() + { + return $this->normalize_path(sys_get_temp_dir().'/'); + } +} diff --git a/includes/src/Console.php b/includes/src/Console.php index 0f355c1..137a3a6 100644 --- a/includes/src/Console.php +++ b/includes/src/Console.php @@ -12,14 +12,18 @@ \defined('DOCKET_CRONWP') || exit; -final class Console extends Parser +final class Console { + use Bepart; + use Parser; + use Process; + private $pids = []; private $key; private $args = [ 'dcdir' => '', 'wpdir' => '', - 'job' => 5, + 'job' => 3, 'quiet' => false, 'dryrun' => false, 'network' => false, @@ -50,33 +54,6 @@ private function compat_notice() } } - private function normalize_path($path) - { - $wrapper = ''; - $scheme_separator = strpos($path, '://'); - if (false !== $scheme_separator) { - $stream = substr($path, 0, $scheme_separator); - if (\in_array($stream, stream_get_wrappers(), true)) { - list($wrapper, $path) = explode('://', $path, 2); - $wrapper .= '://'; - } - } - - $path = str_replace('\\', '/', $path); - $path = preg_replace('|(?<=.)/+|', '/', $path); - if (':' === substr($path, 1, 1)) { - $path = ucfirst($path); - } - - return $wrapper.$path; - } - - private function output($text, $is_error = false) - { - $fd = $is_error ? \STDERR : \STDOUT; - fwrite($fd, $text); - } - private function register_wpdir($params) { $wpdir = ''; @@ -205,114 +182,6 @@ private function register_args() } } - private function strip_proto($url) - { - return preg_replace('@^https?://@', '', $url); - } - - private function proc_store($key, $hook, $data) - { - $file = sys_get_temp_dir().'/'.$this->key.'-'.substr(md5($hook), 0, 12).'.php'; - - if (empty($data) || !\is_array($data)) { - return false; - } - - $code = 'key.'-'.substr(md5($hook), 0, 12).'.php'; - if (empty($file) || !is_file($file)) { - return false; - } - - $data = include $file; - unlink($file); - if (!empty($data) && \is_array($data)) { - return $data; - } - - return false; - } - - private function proc_fork($name, $callback) - { - if (!\is_callable($callback)) { - $this->output($callback.' is not callable'.\PHP_EOL, true); - - return false; - } - - $pid = pcntl_fork(); - if (-1 === $pid) { - $this->output('Failed to fork the cron event '.$name.\PHP_EOL); - - return false; - } - if ($pid) { - $this->pids[$name] = $pid; - - return true; - } - \call_user_func($callback); - exit(0); - } - - private function result_export($data) - { - $data_e = var_export($data, true); - $data_e = str_replace('Requests_Utility_CaseInsensitiveDictionary::__set_state(', '', $data_e); - - $data_e = preg_replace('/^([ ]*)(.*)/m', '$1$1$2', $data_e); - $data_r = preg_split("/\r\n|\n|\r/", $data_e); - - $data_r = preg_replace(['/\s*array\s\($/', '/\)(,)?$/', '/\s=>\s$/'], [null, ']$1', ' => ['], $data_r); - $data = implode(\PHP_EOL, array_filter(['['] + $data_r)); - - return str_replace([',', "'"], '', $data); - } - - private function proc_wait() - { - if (empty($this->pids)) { - return false; - } - - $pids = array_keys($this->pids); - foreach ($pids as $key) { - if (!isset($this->pids[$key])) { - continue; - } - - $pid = pcntl_waitpid($this->pids[$key], $status); - if (-1 === $pid || $pid > 0) { - unset($this->pids[$key]); - } - - $result = $this->proc_get($this->key, $key); - - if (!$this->args['quiet']) { - $time = ($result['timer_stop'] - $result['timer_start']); - $this->output('Executed the cron event \''.$key.'\' in '.number_format($time, 3).'s'.\PHP_EOL); - } - - $result['pid'] = $pid; - $this->output($this->result_export($result).\PHP_EOL.\PHP_EOL); - } - - return $this->pids; - } - private function register_wpload() { if (!isset($_SERVER['HTTP_HOST'])) { @@ -341,9 +210,9 @@ private function register_wpload() public function run() { $site = $this->strip_proto(get_home_url()); - $this->key = 'dcronwp-'.substr(md5($site), 0, 12); + $this->key = 'dcronwp-'.$this->get_hash($site); - $lock_file = sys_get_temp_dir().'/'.$this->key.'-data.php'; + $lock_file = $this->lockpath().$this->key.'-data.php'; $stmp = time() + 120; if (is_file($lock_file) && is_writable($lock_file) && $stmp > @filemtime($lock_file)) { @@ -411,23 +280,35 @@ function ($lockfile) use ($lock_file) { $hook, function () use ($hook, $args) { if (!$this->args['dryrun']) { - $timer_start = sprintf('%.3F', microtime(true)); + $timer_start = microtime(true); $status = true; $error = ''; + $content = ''; + $atime = date('Y-m-d H:i:s'); try { + ob_start(); do_action_ref_array($hook, $args); + $content = ob_get_contents(); + ob_end_clean(); } catch (\Throwable $e) { $status = false; $error = $e->getMessage(); } - $timer_stop = sprintf('%.3F', microtime(true)); + $timer_stop = microtime(true); $data = [ + 'pid' => '', + 'time' => $atime, 'hook' => $hook, 'timer_start' => $timer_start, 'timer_stop' => $timer_stop, 'status' => $status, ]; + + if ('' !== $content) { + $data['output'] = trim($content); + } + if (!$status && !empty($error)) { $data['error'] = $error; } diff --git a/includes/src/Parser.php b/includes/src/Parser.php index 389d190..c01d928 100644 --- a/includes/src/Parser.php +++ b/includes/src/Parser.php @@ -18,7 +18,7 @@ \defined('DOCKET_CRONWP') || exit; -class Parser +trait Parser { private $boolParamSet = [ 'y' => true, diff --git a/includes/src/Process.php b/includes/src/Process.php new file mode 100644 index 0000000..a00135d --- /dev/null +++ b/includes/src/Process.php @@ -0,0 +1,105 @@ +lockpath().$this->key.'-'.$this->get_hash($hook).'.php'; + + if (empty($data) || !\is_array($data)) { + return false; + } + + $code = 'lockpath().$this->key.'-'.$this->get_hash($hook).'.php'; + if (empty($file) || !is_file($file)) { + return false; + } + + $data = include $file; + unlink($file); + if (!empty($data) && \is_array($data)) { + return $data; + } + + return false; + } + + private function proc_fork($name, $callback) + { + if (!\is_callable($callback)) { + $this->output($callback.' is not callable'.\PHP_EOL, true); + + return false; + } + + $pid = pcntl_fork(); + if (-1 === $pid) { + $this->output('Failed to fork the cron event '.$name.\PHP_EOL); + + return false; + } + if ($pid) { + $this->pids[$name] = $pid; + + return true; + } + \call_user_func($callback); + exit(0); + } + + private function proc_wait() + { + if (empty($this->pids)) { + return false; + } + + $pids = array_keys($this->pids); + foreach ($pids as $key) { + if (!isset($this->pids[$key])) { + continue; + } + + $pid = pcntl_waitpid($this->pids[$key], $status); + if (-1 === $pid || $pid > 0) { + unset($this->pids[$key]); + } + + $result = $this->proc_get($this->key, $key); + if (!empty($result) && \is_array($result)) { + if (!$this->args['quiet']) { + $time = ($result['timer_stop'] - $result['timer_start']); + $this->output('Executed the cron event \''.$key.'\' in '.number_format($time, 3).'s'.\PHP_EOL); + $result['pid'] = $pid; + $this->output($this->result_export($result).\PHP_EOL.\PHP_EOL); + } + } + } + + return $this->pids; + } +} diff --git a/includes/vendor/composer/InstalledVersions.php b/includes/vendor/composer/InstalledVersions.php index 098e39b..969fe11 100644 --- a/includes/vendor/composer/InstalledVersions.php +++ b/includes/vendor/composer/InstalledVersions.php @@ -29,7 +29,7 @@ class InstalledVersions 'aliases' => array ( ), - 'reference' => '1123646a648adb7b9e0787d3fdc6668c2a9b5f4a', + 'reference' => '44fb94c05acfeec32101b20475906cd14c245893', 'name' => 'nawawi/docket-cronwp', ), 'versions' => @@ -41,7 +41,7 @@ class InstalledVersions 'aliases' => array ( ), - 'reference' => '1123646a648adb7b9e0787d3fdc6668c2a9b5f4a', + 'reference' => '44fb94c05acfeec32101b20475906cd14c245893', ), ), ); diff --git a/includes/vendor/composer/autoload_classmap.php b/includes/vendor/composer/autoload_classmap.php index 3eadc25..428db72 100644 --- a/includes/vendor/composer/autoload_classmap.php +++ b/includes/vendor/composer/autoload_classmap.php @@ -7,6 +7,8 @@ return array( 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'Nawawi\\DocketCronWP\\Bepart' => $baseDir . '/includes/src/Bepart.php', 'Nawawi\\DocketCronWP\\Console' => $baseDir . '/includes/src/Console.php', 'Nawawi\\DocketCronWP\\Parser' => $baseDir . '/includes/src/Parser.php', + 'Nawawi\\DocketCronWP\\Process' => $baseDir . '/includes/src/Process.php', ); diff --git a/includes/vendor/composer/autoload_static.php b/includes/vendor/composer/autoload_static.php index a2e829d..93bcc5b 100644 --- a/includes/vendor/composer/autoload_static.php +++ b/includes/vendor/composer/autoload_static.php @@ -22,8 +22,10 @@ class ComposerStaticInit1d00991b6227419f508f6e3679679277 public static $classMap = array ( 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'Nawawi\\DocketCronWP\\Bepart' => __DIR__ . '/../../..' . '/includes/src/Bepart.php', 'Nawawi\\DocketCronWP\\Console' => __DIR__ . '/../../..' . '/includes/src/Console.php', 'Nawawi\\DocketCronWP\\Parser' => __DIR__ . '/../../..' . '/includes/src/Parser.php', + 'Nawawi\\DocketCronWP\\Process' => __DIR__ . '/../../..' . '/includes/src/Process.php', ); public static function getInitializer(ClassLoader $loader) diff --git a/includes/vendor/composer/installed.php b/includes/vendor/composer/installed.php index 0bd954e..5404758 100644 --- a/includes/vendor/composer/installed.php +++ b/includes/vendor/composer/installed.php @@ -6,7 +6,7 @@ 'aliases' => array ( ), - 'reference' => '1123646a648adb7b9e0787d3fdc6668c2a9b5f4a', + 'reference' => '44fb94c05acfeec32101b20475906cd14c245893', 'name' => 'nawawi/docket-cronwp', ), 'versions' => @@ -18,7 +18,7 @@ 'aliases' => array ( ), - 'reference' => '1123646a648adb7b9e0787d3fdc6668c2a9b5f4a', + 'reference' => '44fb94c05acfeec32101b20475906cd14c245893', ), ), );