From c1be894d35df8fe706e8529f1f1a7ae88bc3bb4f Mon Sep 17 00:00:00 2001 From: kuaifan Date: Wed, 16 Nov 2022 11:27:55 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20task=E8=BF=9B=E7=A8=8B=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=89=A7=E8=A1=8C=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/IndexController.php | 1 + app/Models/TaskWorker.php | 37 +++++++++++++++++++ app/Tasks/AbstractTask.php | 31 +++++++++++++++- app/Tasks/AppPushTask.php | 2 +- app/Tasks/AutoArchivedTask.php | 2 +- app/Tasks/DeleteTmpTask.php | 14 +++++++ app/Tasks/EmailNoticeTask.php | 2 +- app/Tasks/IhttpTask.php | 1 + app/Tasks/LineTask.php | 1 + app/Tasks/LoopTask.php | 2 +- app/Tasks/PushTask.php | 1 + app/Tasks/PushUmengMsg.php | 1 + app/Tasks/WebSocketDialogMsgTask.php | 1 + ...11_16_102059_create_task_workers_table.php | 36 ++++++++++++++++++ 14 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 app/Models/TaskWorker.php create mode 100644 database/migrations/2022_11_16_102059_create_task_workers_table.php diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index 86373f884..c6f9cd525 100755 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -185,6 +185,7 @@ class IndexController extends InvokeController Task::deliver(new AppPushTask()); // 删除过期的临时表数据 Task::deliver(new DeleteTmpTask('wg_tmp_msgs', 1)); + Task::deliver(new DeleteTmpTask('task_worker', 12)); Task::deliver(new DeleteTmpTask('tmp', 24)); // 周期任务 Task::deliver(new LoopTask()); diff --git a/app/Models/TaskWorker.php b/app/Models/TaskWorker.php new file mode 100644 index 000000000..bdb9bef16 --- /dev/null +++ b/app/Models/TaskWorker.php @@ -0,0 +1,37 @@ + [ + 'params' => $params, + 'class' => get_class($this) + ], + ]); + if ($row->save()) { + $this->twid = $row->id; + } + } /** * 开始执行任务 @@ -25,11 +42,12 @@ abstract class AbstractTask extends Task */ final public function handle() { + TaskWorker::whereId($this->twid)->update(['start_at' => Carbon::now()]); + // try { $this->start(); } catch (\Throwable $e) { $this->failed("start", $e); - } } @@ -38,8 +56,11 @@ abstract class AbstractTask extends Task */ final public function finish() { + TaskWorker::whereId($this->twid)->update(['end_at' => Carbon::now()]); + // try { $this->end(); + TaskWorker::whereId($this->twid)->delete(); } catch (\Throwable $e) { $this->failed("end", $e); } @@ -54,5 +75,13 @@ abstract class AbstractTask extends Task { info($type); info($e); + // + TaskWorker::whereId($this->twid)->update(['error' => Base::array2json([ + 'time' => Carbon::now(), + 'type' => $type, + 'code' => $e->getCode(), + 'file' => $e->getFile(), + 'message' => $e->getMessage(), + ])]); } } diff --git a/app/Tasks/AppPushTask.php b/app/Tasks/AppPushTask.php index 7327d59d4..e10028c88 100644 --- a/app/Tasks/AppPushTask.php +++ b/app/Tasks/AppPushTask.php @@ -17,7 +17,7 @@ class AppPushTask extends AbstractTask public function __construct() { - // + parent::__construct(); } public function start() diff --git a/app/Tasks/AutoArchivedTask.php b/app/Tasks/AutoArchivedTask.php index 63d1d0a3b..5b817f0ff 100644 --- a/app/Tasks/AutoArchivedTask.php +++ b/app/Tasks/AutoArchivedTask.php @@ -18,7 +18,7 @@ class AutoArchivedTask extends AbstractTask public function __construct() { - // + parent::__construct(); } public function start() diff --git a/app/Tasks/DeleteTmpTask.php b/app/Tasks/DeleteTmpTask.php index d23444af8..3564ecc32 100644 --- a/app/Tasks/DeleteTmpTask.php +++ b/app/Tasks/DeleteTmpTask.php @@ -2,6 +2,7 @@ namespace App\Tasks; +use App\Models\TaskWorker; use App\Models\Tmp; use App\Models\WebSocketTmpMsg; use Carbon\Carbon; @@ -18,6 +19,7 @@ class DeleteTmpTask extends AbstractTask public function __construct(string $data, int $hours) { + parent::__construct(...func_get_args()); $this->data = $data; $this->hours = $hours; } @@ -54,6 +56,18 @@ class DeleteTmpTask extends AbstractTask }); } break; + + /** + * 表pre_task_worker + */ + case 'tw': + { + TaskWorker::onlyTrashed() + ->where('deleted_at', '<', Carbon::now()->subHours($this->hours)->toDateTimeString()) + ->orderBy('id') + ->forceDelete(); + } + break; } } diff --git a/app/Tasks/EmailNoticeTask.php b/app/Tasks/EmailNoticeTask.php index 033e1b48c..9ca2ab3de 100644 --- a/app/Tasks/EmailNoticeTask.php +++ b/app/Tasks/EmailNoticeTask.php @@ -19,7 +19,7 @@ class EmailNoticeTask extends AbstractTask { public function __construct() { - // + parent::__construct(); } public function start() diff --git a/app/Tasks/IhttpTask.php b/app/Tasks/IhttpTask.php index b80f6e6a5..fcfdace62 100644 --- a/app/Tasks/IhttpTask.php +++ b/app/Tasks/IhttpTask.php @@ -28,6 +28,7 @@ class IhttpTask extends AbstractTask */ public function __construct($url, $post = [], $extra = []) { + parent::__construct(...func_get_args()); $this->url = $url; $this->post = $post; $this->extra = $extra; diff --git a/app/Tasks/LineTask.php b/app/Tasks/LineTask.php index 1c671525a..8058d4cf8 100644 --- a/app/Tasks/LineTask.php +++ b/app/Tasks/LineTask.php @@ -25,6 +25,7 @@ class LineTask extends AbstractTask */ public function __construct($userid, bool $online) { + parent::__construct(...func_get_args()); $this->userid = $userid; $this->online = $online; } diff --git a/app/Tasks/LoopTask.php b/app/Tasks/LoopTask.php index 7a6709674..7cd7fefbd 100644 --- a/app/Tasks/LoopTask.php +++ b/app/Tasks/LoopTask.php @@ -18,7 +18,7 @@ class LoopTask extends AbstractTask { public function __construct() { - + parent::__construct(); } public function start() diff --git a/app/Tasks/PushTask.php b/app/Tasks/PushTask.php index 412acf68f..52933dffe 100644 --- a/app/Tasks/PushTask.php +++ b/app/Tasks/PushTask.php @@ -27,6 +27,7 @@ class PushTask extends AbstractTask */ public function __construct($params = [], $retryOffline = true) { + parent::__construct(...func_get_args()); $this->params = $params; $this->retryOffline = $retryOffline; } diff --git a/app/Tasks/PushUmengMsg.php b/app/Tasks/PushUmengMsg.php index 5578091e2..04192c772 100644 --- a/app/Tasks/PushUmengMsg.php +++ b/app/Tasks/PushUmengMsg.php @@ -20,6 +20,7 @@ class PushUmengMsg extends AbstractTask */ public function __construct($userid, $array = []) { + parent::__construct(...func_get_args()); $this->userid = $userid; $this->array = is_array($array) ? $array : []; } diff --git a/app/Tasks/WebSocketDialogMsgTask.php b/app/Tasks/WebSocketDialogMsgTask.php index df5e91de3..ceb937225 100644 --- a/app/Tasks/WebSocketDialogMsgTask.php +++ b/app/Tasks/WebSocketDialogMsgTask.php @@ -34,6 +34,7 @@ class WebSocketDialogMsgTask extends AbstractTask */ public function __construct($id, $ignoreFd = null) { + parent::__construct(...func_get_args()); $this->id = $id; $this->ignoreFd = $ignoreFd === null ? Request::header('fd') : $ignoreFd; } diff --git a/database/migrations/2022_11_16_102059_create_task_workers_table.php b/database/migrations/2022_11_16_102059_create_task_workers_table.php new file mode 100644 index 000000000..579117bdf --- /dev/null +++ b/database/migrations/2022_11_16_102059_create_task_workers_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->longText('args')->nullable(); + $table->longText('error')->nullable(); + $table->timestamp('start_at')->nullable()->comment('开始时间'); + $table->timestamp('end_at')->nullable()->comment('结束时间'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('task_workers'); + } +}