定制 diontech/laravel-extended-scheduler 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

diontech/laravel-extended-scheduler

最新稳定版本:v1.3.0

Composer 安装命令:

composer require diontech/laravel-extended-scheduler

包简介

This package allows you to configure the scheduled tasks of the app via (database) model. It was developed to avoid handling theseconfigurations via a config file only, cause then we cannot share the same repo to n server instances when running different tasks is needed at each server.

README 文档

README

Latest Version run-tests GitHub last commit GitHub issues Packagist Downloads License Twitter Follow

Extend Laravel scheduler to can config tasks via model

This package allows you to configure the scheduled tasks of the app via (database) model. It was developed to avoid handling these configurations via a config file only, cause then we cannot share the same repo to n server instances when running different tasks is needed at each server.

This package will extend the laravel scheduler, so all coded scheduled tasks will still be available.

releases / laravel support

  • laravel 8: v1.2.x
  • laravel 9: v1.3.x

installation

composer require diontech/laravel-extended-scheduler
php artisan migrate

using

Facade based handling

Instead of used model based handling mentioned below, you can also do Facade based handling, like:

\DionTech\Scheduler\Support\Facades\ScheduledCommand\ScheduledCommand::arguments([
    'foo'
])->fluent([
    'cron' => [
        '* * * * *'
    ]
])->isActive()
->create();

Model based handling

At the moment you can do something similar to the following:

        \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'command',
            'arguments' => [
                'schedule:list'
            ],
            'fluent' => [
                'cron' => ['* * * * *']
            ],
            'is_active' => true
        ]);

        \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'command',
            'arguments' => [
                'foo'
            ],
            'fluent' => [
                'weekdays',
                'hourly',
                'timezone' => ['America/Chicago'],
                'between' => ['8:00', '17:00']
            ],
            'is_active' => true
        ]);
        
        \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'command',
            'arguments' => [
                'test:command',
                ['Taylor', '--force']
            ],
            'fluent' => [
                'daily'
            ],
            'is_active' => true
        ]);

        \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'job',
            'arguments' => [
                'new \App\Jobs\TestJob', 'sqs'
            ],
            'fluent' => [
                'everyFiveMinutes'
            ],
            'is_active' => true
        ]);

See https://laravel.com/docs/8.x/scheduling to get an idea of how it can be used.

normalizing inserted model to readable structure

        $model = \DionTech\Scheduler\Models\ScheduledCommand::create([
            'method' => 'command',
            'arguments' => [
                'foo'
            ],
            'fluent' => [
                'weekdays',
                'hourly',
                'timezone' => ['America/Chicago'],
                'between' => ['8:00', '17:00']
            ],
            'is_active' => true
        ]);
       
    $event = $model->event(); //returns \Illuminate\Console\Scheduling\Event
    $command = $event->command; //something like "/usr/local/Cellar/php@7.4/7.4.16/bin/php' 'artisan' foo"
    $expression = $event->expression; //something like "0 * * * 1-5"
    $description = $event->description; //something like "new \App\Jobs\TestJob"

make a command active / inactive

Each ScheduledCommand can be set to inactive / active by its property 'is_active'. the default value is false, so you must explicitly activate the command to be recognized in the laravel scheduler.

add description / notices to the command

Each ScheduledCommand have a property 'description', where you can save additional notices if needed.

get all registered / available commands of your application

model based

$commands = (new \DionTech\Scheduler\Support\Helper\CommandLister)->all();

request response based

insert this in your controller, that's it:

return (new \DionTech\Scheduler\Http\Responses\ListAllCommandsResponse())
    ->toResponse($request);

NextSteps

  • writing an API class
  • make getCommands() method cacheable
  • build some configs

统计信息

  • 总下载量: 1.75k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 4
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 2
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-05-26

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固