Laravel Horizo​​n:作业状态跟踪

时间:2018-07-13 12:12:17

标签: php laravel laravel-horizon

对于某些Laravel Horizo​​n作业,我有一个功能可根据Horizo​​n存储库检查特定模型的作业当前是否正在运行:

public static function isRunning($model)
{        
    $tag = self::getTag($model);
    $tagRepository = app()->make(TagRepository::class);
    $jobRepository = app()->make(JobRepository::class);
    $jobIds = $tagRepository->jobs($tag);
    $jobs = $jobRepository->getJobs($jobIds);
    $runningJobs = collect($jobs)->reject(function($job) {
        return $job->status === HorizonRedisJobStatuses::STATUS_COMPLETED // 'completed'
            || $job->status === HorizonRedisJobStatuses::STATUS_FAILED; // 'failed'
    });

    return $runningJobs->count() > 0;
}

此代码大多数时候都有效,但是,有时由于超时而重新启动该作业。在这种情况下,我在$jobs变量中拥有的所有作业都被标记为"completed",因此函数返回false。似乎重新启动的作业没有填充到存储库中。

当前我唯一想到的解决方法是在进程启动/结束时手动跟踪数据库中的作业状态,但是,例如,如果Horizo​​n尝试失败,这仍然会给我错误的结果。

那么有没有人知道如何在Horizo​​n中正确跟踪工作状态?

1 个答案:

答案 0 :(得分:0)

我将其作为错误发布到Horizo​​n Github上,已在拉取请求https://github.com/laravel/horizon/pull/478中修复了

现在示例中的代码应该可以正常工作。

相关问题