From 0f0a1a72af9b262271641e72eb6fa4939c2fdfa8 Mon Sep 17 00:00:00 2001 From: augushong Date: Mon, 28 Feb 2022 21:31:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=8A=9F=E8=83=BD=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/view/system/config/site.html | 7 ++ app/common/command/Timer.php | 115 +++++++++++++++++++ app/common/command/admin/ResetPassword.php | 8 +- app/common/command/timer/config.php | 10 ++ app/common/controller/ToolsController.php | 11 ++ app/tools/controller/timer/ResetPassword.php | 20 ++++ composer.json | 3 +- composer.lock | 5 +- config/console.php | 4 +- 9 files changed, 177 insertions(+), 6 deletions(-) create mode 100644 app/common/command/Timer.php create mode 100644 app/common/command/timer/config.php create mode 100644 app/common/controller/ToolsController.php create mode 100644 app/tools/controller/timer/ResetPassword.php diff --git a/app/admin/view/system/config/site.html b/app/admin/view/system/config/site.html index 372e71d..18404d7 100644 --- a/app/admin/view/system/config/site.html +++ b/app/admin/view/system/config/site.html @@ -42,6 +42,13 @@ 填写版权信息。 +
+ +
+ + 填写站点域名。以http://或https://开头,内置的定时任务用到了这个配置项,修改之后需要重启定时任务 +
+
diff --git a/app/common/command/Timer.php b/app/common/command/Timer.php new file mode 100644 index 0000000..2284e75 --- /dev/null +++ b/app/common/command/Timer.php @@ -0,0 +1,115 @@ +setName('timer') + ->setDescription('内置秒级定时器'); + } + + protected function execute(Input $input, Output $output) + { + // 指令输出 + $output->writeln('start timer'); + + $client = new Client([ + 'base_uri' => sysconfig('site', 'site_domain'), + 'verify' => false, + ]); + + while (true) { + + try { + + + $config_list = include __DIR__ . '/timer/config.php'; + + $list_promises = []; + foreach ($config_list as $config_item) { + + $config_item = static::initConfigItem($config_item); + + + $name = $config_item['name']; + + $cache_key = 'timer_' . $name; + $cache_tag = 'system_timer'; + + $last_exec_time = Cache::get($cache_key, 0); + + if ($last_exec_time >= time() - $config_item['frequency']) { + continue; + } + + Cache::tag($cache_tag)->set($cache_key, time()); + + $type = $config_item['type']; + + switch ($type) { + case 'site': + $output->writeln(date('Y-m-d H:i:s') . ': build site request async:' . $config_item['target']); + $list_promises[$config_item['name']] = $client->getAsync($config_item['target']); + + break; + + default: + $output->writeln(date('Y-m-d H:i:s') . 'unsupport type:' . $type); + break; + } + } + + if (empty($list_promises)){ + + $output->writeln(date('Y-m-d H:i:s') . ' no request'); + }else{ + $results = Utils::unwrap($list_promises); + $output->writeln(date('Y-m-d H:i:s') . ': request all finished'); + } + } catch (\Throwable $th) { + // throw $th; + $output->writeln('error:' . $th->getMessage()); + Log::error($th->getMessage()); + } + + + + + + sleep(1); + } + } + + private static function initConfigItem($config) + { + $default = [ + 'name' => 'http_demo', + 'type' => 'site', + 'target' => '', + 'frequency' => 600 + ]; + + $data = array_merge($default, $config); + + if ($data['frequency'] < 1) { + $data['frequency'] = 1; + } + + return $data; + } +} diff --git a/app/common/command/admin/ResetPassword.php b/app/common/command/admin/ResetPassword.php index af1d948..3312c54 100644 --- a/app/common/command/admin/ResetPassword.php +++ b/app/common/command/admin/ResetPassword.php @@ -18,6 +18,7 @@ class ResetPassword extends Command { // 指令配置 $this->setName('admin:resetPassword') + ->addOption('password','p', Option::VALUE_OPTIONAL) ->setDescription('重置超管密码'); } @@ -33,7 +34,12 @@ class ResetPassword extends Command return false; } - $password = uniqid(); + $password = $input->getOption('password'); + + if(is_null($password)){ + $password = uniqid(); + } + $model_admin->save([ 'password' => password($password) diff --git a/app/common/command/timer/config.php b/app/common/command/timer/config.php new file mode 100644 index 0000000..ae5d2dd --- /dev/null +++ b/app/common/command/timer/config.php @@ -0,0 +1,10 @@ +'http_demo', // 定时任务的名称,不能重複 + 'type'=>'site', // 定时任务的类型,默认只支持site,你也可以重写定时器命令行以支持其他命令 + 'target'=>'/tools/timer.ResetPassword/do', // 要访问的地址,如果不是以https开头,那么以后台的系统配置中读取相关配置,如果没有配置则不执行 + 'frequency'=>600 // 执行频率,单位:秒,填写10,则每10秒过后执行一次 + ] +]; \ No newline at end of file diff --git a/app/common/controller/ToolsController.php b/app/common/controller/ToolsController.php new file mode 100644 index 0000000..aab4cdc --- /dev/null +++ b/app/common/controller/ToolsController.php @@ -0,0 +1,11 @@ +fetch(); + } +} diff --git a/composer.json b/composer.json index 713b3af..afb2589 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,8 @@ "jianyan74/php-excel": "^1.0", "zhongshaofa/easy-admin": "^1.0.2", "ext-json": "*", - "zhongshaofa/thinkphp-log-trace": "^1.0" + "zhongshaofa/thinkphp-log-trace": "^1.0", + "guzzlehttp/guzzle": "^7.4" }, "require-dev": { "symfony/var-dumper": "^4.2", diff --git a/composer.lock b/composer.lock index f7b3560..0b25a09 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6f1ec526803f2ecbe4f1486314294fdd", + "content-hash": "fdb5d3e361e1b400984f4ff47a15c98e", "packages": [ { "name": "adbario/php-dot-notation", @@ -3380,7 +3380,6 @@ "require": { "php": ">=7.0" }, - "default-branch": true, "type": "library", "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3601,5 +3600,5 @@ "ext-json": "*" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "1.1.0" } diff --git a/config/console.php b/config/console.php index 1d60aed..a989b51 100644 --- a/config/console.php +++ b/config/console.php @@ -5,6 +5,7 @@ use app\common\command\admin\ResetPassword; use app\common\command\Install; +use app\common\command\Timer; return [ // 指令定义 @@ -13,6 +14,7 @@ return [ 'node' => 'app\common\command\Node', 'OssStatic' => 'app\common\command\OssStatic', ResetPassword::class, - Install::class + Install::class, + Timer::class, ], ];