verseles/progressable

一个用于跟踪和管理不同任务或进程进度的Laravel(不仅限于Laravel)包。

v2.0.0 2024-05-20 18:59 UTC

This package is auto-updated.

Last update: 2024-09-20 19:40:22 UTC


README

一个用于跟踪和管理不同任务或进程进度的Laravel (不仅限于) 包。

GitHub Actions Workflow Status

安装

使用Composer安装此包

composer require verseles/progressable

可选地,您可以使用以下命令发布配置文件:

php artisan vendor:publish --provider="Verseles\Progressable\ProgressableServiceProvider" --tag="config"

配置

已发布的配置文件提供了以下选项:

return [
  'ttl' => env('PROGRESSABLE_TTL', 1140), // Default cache time-to-live (in minutes)

  'prefix' => env('PROGRESSABLE_PREFIX', 'progressable'), // Cache key prefix
];

使用方法

此包提供了一个主特性:Progressable

在Laravel中

Progressable 特性可用于任何需要跟踪进度的类。它提供了两个主要方法:updateLocalProgressgetLocalProgress

"本地"指的是您的类/模型等的进度,而"总体"表示使用相同键名的所有Progressable类的总和。

示例

use Verseles\Progressable;

class MyFirstTask
{
    use Progressable;

    public function __construct()
    {
        $this->setOverallUniqueName('my-job')->resetOverallProgress();
    }

    public function run()
    {
        foreach (range(1, 100) as $value) {
            $this->setLocalProgress($value);
            usleep(100000); // Sleep for 100 milliseconds
            echo "Overall Progress: " . $this->getOverallProgress() . "%" . PHP_EOL;
        }
    }
}
use Verseles\Progressable;

class MySecondTask
{
    use Progressable;

    public function __construct()
    {
        $this->setOverallUniqueName('my-job');
    }

    public function run()
    {
        foreach (range(1, 100) as $value) {
            $this->setLocalProgress($value);
            usleep(100000); // Sleep for 100 milliseconds
            echo "Overall Progress: " . $this->getOverallProgress() . "%" . PHP_EOL;
        }
    }
}
  • 使用 setOverallUniqueName 将进度与特定的总体进度实例关联。
  • setLocalProgress 更新当前实例的进度。
  • getLocalProgress 获取当前进度。
  • getOverallProgress 获取总体进度数据。
  • resetOverallProgress 重置总体进度(建议在第一次设置唯一名称后使用)。

进度值范围从0到100。

不在Laravel中

您可以通过提供自定义的保存和获取数据方法在不使用Laravel的情况下使用Progressable 特性。

示例

$overallUniqueName = 'test-without-laravel';

$my_super_storage = [];

$saveCallback = function ($key, $data, $ttl) use (&$my_super_storage) {
  $my_super_storage[$key] = $data;
};

$getCallback = function ($key) use (&$my_super_storage) {
  return $my_super_storage[$key] ?? [];
};


$obj1 = new class { use Progressable; };
$obj1
  ->setCustomSaveData($saveCallback)
  ->setCustomGetData($getCallback)
  ->setOverallUniqueName($overallUniqueName)
  ->resetOverallProgress()
  ->updateLocalProgress(25);

$obj2 = new class { use Progressable; };
$obj2
  ->setCustomSaveData($saveCallback)
  ->setCustomGetData($getCallback)
  ->setOverallUniqueName($overallUniqueName)
  ->updateLocalProgress(75);

测试

要运行测试,请执行以下命令:

make

许可证

Progressable包是开源软件,根据MIT许可证授权。