Git Product home page Git Product logo

horizon's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

horizon's Issues

use within 5.4

Is there a way or can it be used within a 5.4 app? Would be great if it can.

Uploading video to AWS

Hi, i'm currently near to deploy a big app with Laravel 5.5 but a little issue persist...

when I put QUEUE_DRIVER to sync, my uploading job works perfectly but when i put redis, for working with the 'art horizon' command, it tooks a while and after a lot of retries my job fail ...

this is my job :

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Storage;
use File;

class UploadVideo implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $filename;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($filename)
    {
        $this->filename = $filename;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $file = storage_path() . '/uploads/' . $this->filename;
        if (Storage::disk('s3drop')->put($this->filename, fopen($file, 'r+'))) {
            File::delete($file);
        }
    }
}

Hope someone can tell me what's is going on thanks :/

Proposal - Notification when it's too long time since last job added

As a proposal for notifications is to catch problems with not only too much jobs in queue, but also too little. So we can see if something is "stuck" and does not dispatch jobs into queue as usual.

So maybe some metric "Time since last job added" and configure some threshold for alert/notification when this is reached.

Excessive use of Redis databases

By default Horizon uses Redis databases 9, 10, 11, 12, 13, 14, 15 for jobs, supervisors, tags, metrics, locks, etc.

I'm sure it makes sense to avoid userland namespace conflicts, like job:{id}.

Can Horizon be configured to only use one or two databases? Are there any drawbacks to that? Maybe all Horizon keys could be prefixed with horizon:?

I'm asking because a lot of Redis hosting providers only supply a single database 0, some offer more in higher tiers, very few offer 16 out of the box.

Retrying a failed job 419 response

I have found that I can eventually retry all failed jobs after multiple page refreshes. However, I noticed that some retry attempts do not actually succeed after clicking the retry button. When I pulled up the web inspector, I found that these requests had a 419 unknown status response from the server with a response containing.

{
    "message": ""
}

I don't know the reason for this error (nginx, php 7.1, ubuntu 16.04), but some error handling on the retry button's axios request would at least allow a user to reattempt another retry if a 419 occurs without a full page refresh.

Can't publish package assets

  • Laravel Version: 5.4.28
  • PHP Version: 7.1.5
  • Composer Version: 1.4.1
  • Horizon Version: 0.1.0

Description:
Can't publish the package assets or the "horizon.php" config file.

Steps To Reproduce:
composer require laravel/horizon
Then:
php artisan vendor:publish

Result

  1. Composer actually installs the package in the vendor folder and adds it in the 'composer.json' file.
  2. The vendor publish only publishes the Laravel framework assets (Notification, Pagination, Mails) but not the horizon assets.

Horizon Commands are only available in console.

If you resolve Console/Kernel and call all() method on it from a web route, the list of commands returned do not include horizon commands. Found out that horizon command registration is wrapped inside runningInConsole() check.

        if ($this->app->runningInConsole()) {
            $this->commands([
                Console\AssetsCommand::class,
                Console\HorizonCommand::class,
                Console\ListCommand::class,
                Console\PurgeCommand::class,
                Console\PauseCommand::class,
                Console\ContinueCommand::class,
                Console\SnapshotCommand::class,
                Console\SupervisorCommand::class,
                Console\SupervisorsCommand::class,
                Console\TerminateCommand::class,
                Console\TimeoutCommand::class,
                Console\WorkCommand::class,
            ]);
        }

I understand these commands are not required to be registered in the container for HTTP requests but would it be possible to at least take the Console\SnapshotCommand::class out of the console check and make it available in app container for HTTP requests. This would help if you are scheduling commands using http requests.

Call to undefined method Illuminate\Queue\RedisQueue::readyNow()

I'm yet to figure out why this is happening...


protected function timeToClearPerQueue(Supervisor $supervisor, Collection $pools)
--
  | {
  | return $pools->mapWithKeys(function ($pool, $queue) use ($supervisor) {
  | $size = $this->queue->connection($supervisor->options->connection)->readyNow($queue);
  |  
  | return [$queue => ($size * $this->metrics->runtimeForQueue($queue))];
  | });


Horizon cannot be started from outside of project directory

I've tried to run Horizon from Supervisor and I can access backend but supervisor-1 wasn't there and there were no available processes shown. Log says:

Horizon started successfully.
Could not open input file: artisan
Could not open input file: artisan
Could not open input file: artisan

The only difference I was able to track was the full path used in Supervisor command. So I've tried one level up and Horizon output for php website/artisan horizon looks the same as above.

I guess internally Horizon tries to run another command and assumes it's always started from inside project directory?

Call to undefined function Laravel\Horizon\Console\pcntl_async_signals()

Brand new installation of Laravel 5.5 and horizon. Nothing else has been added to Laravel. For installation I ran:

composer create-project laravel/laravel laravel55 dev-develop

cd laravel55

composer install laravel/horizon

php artisan vendor:publish # (Selected option 0)

php artisan serv

and in another console I ran php artisan horizon

In case it helps I am running this on a Windows development machine if that might cause any issues.

Switch Less to SASS

What about switching from Less to SASS - SASS is much more used now
Bootstrap 4 will also use SASS syntax

Empty tag name allowed for monitoring

Horizon allows us to monitoring an empty tag name and unable to stop monitoring the empty tag, returning an error MethodNotAllowedHttpException because the DELETE request is made on another route.

Extend the Backend

Is there currently no Way to extend the Backend with own Functions?
Because i don`t see any extra Views / Assets Folder for Horizon.

Order snapshots by score

Metric Jobs and Queues return an array_flip(): Can only flip STRING and INTEGER values! error for src/Repositories/RedisMetricsRepository.php on line 234. If I see it right, the problem is, scores are stored as floats, not as integers, and floats cannot be array keys. Sadly I'm not an expert in Redis (not even a beginner yet sadly), so at this point I can't propose a PR (but I guess either we should have integer scores, we should cast them before flipping, or we shouldn't flip).

By the way I'm on PHP 7.1, with Horizon 1.0.0 and Laravel 5.5.

Horizon and Forge

Will forge be updated to use Horizon configuration when using workers?

horizon config single one redis connection, can prefix be optional?

@themsaid

d00d0b this repo make horizon use one redis. I think prefix can be optional.

public static function use($connection, $prefix = null)
{
    $config = config("database.redis.{$connection}");

    config(['database.redis.horizon' => array_merge($config, [
        'options' => ['prefix' => $prefix ?: 'horizon:']
    ])]);
}

Multiple apps use one redis server in aws, i think they can use one redis connection shared in different apps.

[Bug] Vue component request increase thrash

I am currently testing out ^0.1.0 of horizon, and I noticed an issue with the dashboard. After navigating through the routes multiple times, I see an increase the number of api requests. It also appears that these requests from one page continue even after visiting another page with vue-router.

GIF: Horizon request thrash example

I believe the issue lies in how setInterval() is being called but not managed in each of the Vue components. Each time a component is mounted() a new interval is created.

Here's my thought on a solution:

  • Assign setInterval() to a data variable on each component, such as this.interval = setInterval()
  • Call clearInterval(this.interval) whenever a component is no longer in use (i.e. destroyed, deactivated, etc)

Here are the unmanaged setInterval() calls:

If you'd like a pull request, let me know.

cache:clear will wipe jobs

As discussed with @themsaid, the cache:clear command calls FLUSHDB, which will delete all Horizon data, or other application data stored in Redis.

Horizon Dashboard infinite load. Parse error: syntax error, unexpected '='

http://laravel55.dev/horizon/api/stats

{
    "message": "Parse error: syntax error, unexpected '='",
    "file": "/home/laravel/Sites/laravel55/vendor/laravel/horizon/src/WaitTimeCalculator.php",
    "line": 75,
    "trace": [
        {
            "file": "/home/laravel/Sites/laravel55/vendor/composer/ClassLoader.php",
            "line": 301,
            "function": "Composer\\Autoload\\includeFile",
            "args": [
                "/home/laravel/Sites/laravel55/vendor/laravel/horizon/src/WaitTimeCalculator.php"
            ]
        },
        {
            "function": "loadClass",
            "class": "Composer\\Autoload\\ClassLoader",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator"
            ]
        },
        {
            "function": "spl_autoload_call",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 752,
            "function": "__construct",
            "class": "ReflectionClass",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 631,
            "function": "build",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 586,
            "function": "resolve",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator",
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 721,
            "function": "make",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator",
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
            "line": 107,
            "function": "make",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
            "line": 677,
            "function": "app",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/horizon/src/Http/Controllers/DashboardStatsController.php",
            "line": 28,
            "function": "resolve",
            "args": [
                "Laravel\\Horizon\\WaitTimeCalculator"
            ]
        },
        {
            "function": "index",
            "class": "Laravel\\Horizon\\Http\\Controllers\\DashboardStatsController",
            "type": "->",
            "args": []
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
            "line": 54,
            "function": "call_user_func_array",
            "args": [
                [
                    {},
                    "index"
                ],
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
            "line": 45,
            "function": "callAction",
            "class": "Illuminate\\Routing\\Controller",
            "type": "->",
            "args": [
                "index",
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 204,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->",
            "args": [
                {
                    "uri": "horizon/api/stats",
                    "methods": [
                        "GET",
                        "HEAD"
                    ],
                    "action": {
                        "uses": "Laravel\\Horizon\\Http\\Controllers\\DashboardStatsController@index",
                        "controller": "Laravel\\Horizon\\Http\\Controllers\\DashboardStatsController@index",
                        "namespace": "Laravel\\Horizon\\Http\\Controllers",
                        "prefix": "horizon",
                        "where": []
                    },
                    "controller": {},
                    "defaults": [],
                    "wheres": [],
                    "parameters": [],
                    "parameterNames": [],
                    "computedMiddleware": [
                        "Laravel\\Horizon\\Http\\Middleware\\Authenticate"
                    ],
                    "compiled": {}
                },
                {},
                "index"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 161,
            "function": "runController",
            "class": "Illuminate\\Routing\\Route",
            "type": "->",
            "args": []
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 612,
            "function": "run",
            "class": "Illuminate\\Routing\\Route",
            "type": "->",
            "args": []
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 30,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Router",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/horizon/src/Http/Middleware/Authenticate.php",
            "line": 18,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Laravel\\Horizon\\Http\\Middleware\\Authenticate",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 102,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 614,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 573,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->",
            "args": [
                {
                    "uri": "horizon/api/stats",
                    "methods": [
                        "GET",
                        "HEAD"
                    ],
                    "action": {
                        "uses": "Laravel\\Horizon\\Http\\Controllers\\DashboardStatsController@index",
                        "controller": "Laravel\\Horizon\\Http\\Controllers\\DashboardStatsController@index",
                        "namespace": "Laravel\\Horizon\\Http\\Controllers",
                        "prefix": "horizon",
                        "where": []
                    },
                    "controller": {},
                    "defaults": [],
                    "wheres": [],
                    "parameters": [],
                    "parameterNames": [],
                    "computedMiddleware": [
                        "Laravel\\Horizon\\Http\\Middleware\\Authenticate"
                    ],
                    "compiled": {}
                },
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 551,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 30,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/fideloper/proxy/src/TrustProxies.php",
            "line": 56,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Fideloper\\Proxy\\TrustProxies",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 30,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 30,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php",
            "line": 46,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 102,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 151,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 116,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/public/index.php",
            "line": 55,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/.composer/vendor/cpriego/valet-linux/server.php",
            "line": 197,
            "args": [
                "/home/laravel/Sites/laravel55/public/index.php"
            ],
            "function": "require"
        }
    ]
}

http://laravel55.dev/horizon/api/workload

{
    "message": "Parse error: syntax error, unexpected '='",
    "file": "/home/laravel/Sites/laravel55/vendor/laravel/horizon/src/Repositories/RedisWorkloadRepository.php",
    "line": 70,
    "trace": [
        {
            "file": "/home/laravel/Sites/laravel55/vendor/composer/ClassLoader.php",
            "line": 301,
            "function": "Composer\\Autoload\\includeFile",
            "args": [
                "/home/laravel/Sites/laravel55/vendor/laravel/horizon/src/Repositories/RedisWorkloadRepository.php"
            ]
        },
        {
            "function": "loadClass",
            "class": "Composer\\Autoload\\ClassLoader",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Repositories\\RedisWorkloadRepository"
            ]
        },
        {
            "function": "spl_autoload_call",
            "args": [
                "Laravel\\Horizon\\Repositories\\RedisWorkloadRepository"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 752,
            "function": "__construct",
            "class": "ReflectionClass",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Repositories\\RedisWorkloadRepository"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 631,
            "function": "build",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Repositories\\RedisWorkloadRepository"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 586,
            "function": "resolve",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Repositories\\RedisWorkloadRepository",
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 721,
            "function": "make",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Repositories\\RedisWorkloadRepository",
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 256,
            "function": "make",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Repositories\\RedisWorkloadRepository",
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 749,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                {
                    "contextual": []
                },
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 631,
            "function": "build",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 586,
            "function": "resolve",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Contracts\\WorkloadRepository",
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 721,
            "function": "make",
            "class": "Illuminate\\Container\\Container",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Contracts\\WorkloadRepository",
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php",
            "line": 79,
            "function": "make",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->",
            "args": [
                "Laravel\\Horizon\\Contracts\\WorkloadRepository"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php",
            "line": 45,
            "function": "transformDependency",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->",
            "args": [
                {
                    "name": "workload"
                },
                []
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php",
            "line": 27,
            "function": "resolveMethodDependencies",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->",
            "args": [
                [],
                {
                    "name": "index",
                    "class": "Laravel\\Horizon\\Http\\Controllers\\WorkloadController"
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
            "line": 41,
            "function": "resolveClassMethodDependencies",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->",
            "args": [
                [],
                {},
                "index"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 204,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->",
            "args": [
                {
                    "uri": "horizon/api/workload",
                    "methods": [
                        "GET",
                        "HEAD"
                    ],
                    "action": {
                        "uses": "Laravel\\Horizon\\Http\\Controllers\\WorkloadController@index",
                        "controller": "Laravel\\Horizon\\Http\\Controllers\\WorkloadController@index",
                        "namespace": "Laravel\\Horizon\\Http\\Controllers",
                        "prefix": "horizon",
                        "where": []
                    },
                    "controller": {},
                    "defaults": [],
                    "wheres": [],
                    "parameters": [],
                    "parameterNames": [],
                    "computedMiddleware": [
                        "Laravel\\Horizon\\Http\\Middleware\\Authenticate"
                    ],
                    "compiled": {}
                },
                {},
                "index"
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 161,
            "function": "runController",
            "class": "Illuminate\\Routing\\Route",
            "type": "->",
            "args": []
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 612,
            "function": "run",
            "class": "Illuminate\\Routing\\Route",
            "type": "->",
            "args": []
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 30,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Router",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/horizon/src/Http/Middleware/Authenticate.php",
            "line": 18,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Laravel\\Horizon\\Http\\Middleware\\Authenticate",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 102,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 614,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 573,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->",
            "args": [
                {
                    "uri": "horizon/api/workload",
                    "methods": [
                        "GET",
                        "HEAD"
                    ],
                    "action": {
                        "uses": "Laravel\\Horizon\\Http\\Controllers\\WorkloadController@index",
                        "controller": "Laravel\\Horizon\\Http\\Controllers\\WorkloadController@index",
                        "namespace": "Laravel\\Horizon\\Http\\Controllers",
                        "prefix": "horizon",
                        "where": []
                    },
                    "controller": {},
                    "defaults": [],
                    "wheres": [],
                    "parameters": [],
                    "parameterNames": [],
                    "computedMiddleware": [
                        "Laravel\\Horizon\\Http\\Middleware\\Authenticate"
                    ],
                    "compiled": {}
                },
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 551,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 30,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/fideloper/proxy/src/TrustProxies.php",
            "line": 56,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Fideloper\\Proxy\\TrustProxies",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 30,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 30,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php",
            "line": 46,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                },
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 102,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 151,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->",
            "args": [
                {}
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 116,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/Sites/laravel55/public/index.php",
            "line": 55,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->",
            "args": [
                {
                    "attributes": {},
                    "request": {},
                    "query": {},
                    "server": {},
                    "files": {},
                    "cookies": {},
                    "headers": {}
                }
            ]
        },
        {
            "file": "/home/laravel/.composer/vendor/cpriego/valet-linux/server.php",
            "line": 197,
            "args": [
                "/home/laravel/Sites/laravel55/public/index.php"
            ],
            "function": "require"
        }
    ]
}

how to monitor job system

Now , I created the new system as horizon system . but i want to don't change my old system 's code. in new system , I operated the command "php artisan horizon". now I created a job in the old system. but this job is operated in the new system. I just want to use the horizon system as a monitor system. Do you have some solutions .

Laravel 5.5 & Horizon (Why not PHP 7.0?)

Reading the README I've seen that Horizon requires PHP 7.1+ & Laravel 5.5 but Laravel 5.5 requires 7.0+...

Is this a mistake or is intended and we won't be able to use Horizon with Laravel in a PHP 7.0 environment.

This could be an obvious answer, but if so, I'm interested in why 7.1+ and not 7.0+. I mean, what's the key feature that doesn't allow this package to downgrade to 7.0.

Thanks!

Command "horizon" is not defined.

Here is the steps I do:

composer require laravel/horizon
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
cp vendor/laravel/horizon/config/horizon.php config/

Then I execute

php artisan horizon

it show me the error:

[Symfony\Component\Console\Exception\CommandNotFoundException]
  Command "horizon" is not defined.

Here is the logs:

#0 /var/www/laravel-stock-calc/vendor/symfony/console/Application.php(209): Symfony\Component\Console\Application->find('horizon')
#1 /var/www/laravel-stock-calc/vendor/symfony/console/Application.php(130): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#2 /var/www/laravel-stock-calc/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 /var/www/laravel-stock-calc/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 {main}
[2017-08-12 14:30:01] local.ERROR: Symfony\Component\Console\Exception\CommandNotFoundException: Command "horizon" is not defined. in /var/www/laravel-stock-calc/vendor/symfony/console/Application.php:584
Stack trace:
#0 /var/www/laravel-stock-calc/vendor/symfony/console/Application.php(209): Symfony\Component\Console\Application->find('horizon')
#1 /var/www/laravel-stock-calc/vendor/symfony/console/Application.php(130): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#2 /var/www/laravel-stock-calc/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 /var/www/laravel-stock-calc/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 {main}
[2017-08-12 14:30:22] local.ERROR: Symfony\Component\Console\Exception\CommandNotFoundException: Command "horizon" is not defined. in /var/www/laravel-stock-calc/vendor/symfony/console/Application.php:584
Stack trace:
#0 /var/www/laravel-stock-calc/vendor/symfony/console/Application.php(209): Symfony\Component\Console\Application->find('horizon')
#1 /var/www/laravel-stock-calc/vendor/symfony/console/Application.php(130): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#2 /var/www/laravel-stock-calc/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#3 /var/www/laravel-stock-calc/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 {main}

Any chance to support other queue drivers?

I see there is a Laravel\Horizon\RedisQueue class extending Illuminate\Queue\RedisQueue.
I have also my own extension of Illuminate\Queue\RedisQueue that works exactly like the base class except the way it pops jobs out of the queue.
What is the best way to have my own queue driver supported by horizon?

Axios or vue-resource

I am eager to know ,is horizion need axios? I can't find axios this horizon project .

[Question] Where should failed job be stored at?

Hi,

I'm testing around with horizon with a new Laravel 5.5 app.
I created a Job that throws an Exception after a second to emulate a failing job.

The only settings I have changed are queue and broadcast driver to redis. But when queue the job, I always get another Exception too:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'jarvis.failed_jobs' doesn't exist (SQL: insert into `failed_jobs` (`connection`, `queue`, `payload`, `exception`, `failed_at`)...

I know I can create this table with artisan, but my question is: Should the jobs be stored in both? the failed_jobs table and the redis? Or am I missing a configuration? There is only one implemented JobRepository https://github.com/laravel/horizon/blob/9ab7c9fd041674f48a47049a5a88350586c7fbb0/src/Repositories/RedisJobRepository.php I could found. That makes me completely baffled -.-.

Thank you.

[Proposal] Only display allowed properties of the payload for failed jobs insight

Sometimes we want hide sensitive information from logs because of security reasons.

In the current situation when queue jobs failed it displays all the properties of the object in failed jobs insight.

Ex:

User
- id
- name
- email

Above example user object has name and email property, but when queue job failed we only want to display id and name. We want to ignore email when log payload

[Question] Where should I put timeout?

I'm using public $timeout = 3600 inside my job and tries => 1 in horizon.php and I got Illuminate\Queue\MaxAttemptsExceededException: A queued job has been attempted too many times. The job may have previously timed out..

[2017-08-18 02:56:48] Processing: App\Jobs\VideosJob
[2017-08-18 02:58:19] Processing: App\Jobs\VideosJob
[2017-08-18 02:58:19] Failed:     App\Jobs\VideosJob
[2017-08-18 03:01:53] Processed:  App\Jobs\VideosJob

The job runs one time until finish like how I want and the process it's not killed. Weird!

With tries => 0 my output is

[2017-08-18 02:45:28] Processing: App\Jobs\VideosJob
[2017-08-18 02:46:59] Processing: App\Jobs\VideosJob
[2017-08-18 02:48:29] Processing: App\Jobs\VideosJob
[2017-08-18 02:50:00] Processing: App\Jobs\VideosJob
[2017-08-18 02:51:04] Processed:  App\Jobs\VideosJob
[2017-08-18 02:51:04] Processed:  App\Jobs\VideosJob
[2017-08-18 02:51:04] Processed:  App\Jobs\VideosJob
[2017-08-18 02:51:05] Processed:  App\Jobs\VideosJob

The job runs four times. 😢

My job fails every 90 seconds even I use public $timeout = 3600 inside job or 'timeout' => 3600 in horizon.php.

what is this wip auto-commit / deploy command Taylor used in his Laracon keynotes?

I know this is not specifically related to Horizon but he used it a few times during the video. Is it just a custom alias for an auto-git-commit ?

I also like the command he used to deploy to the cloud

Are these Envoyer-related? Is there somewhere where those most excellent shortcuts are shared? Would love to become more productive and use these myself!

Horizon Dashboard not loading.

Hi Guys,

I'm experiencing problems with the Horizon Dashboard. The stats on the main dashboard page are not loading at all. I am running PHP 7.1.8 on Laravel Valet 2.0.5.

I've used the Network tab on Chrome DevTools and there seems to be a few ajax requests that are failing due to being returned a 500 error: Screenshot of Chrome DevTools

I have put the two different stacktraces into Gist's as they are too long to post in this issue apparently. Gist 1 - Gist 2

Any help is appreciated. Thanks in advance.

Failed jobs page doen't show the jobs

When I navigate into the failed jobs page it only shows the loader and it doen't list any failed jobs even though there are 4 of them and they are retrieved by the API.

horizon

Update to 5.5

Dear !

I really want this feature. But I can not find a way to update to laravel 5.5 , or any document related to laravel 5.5 dev branch

Can you point me to that ?

Move state management to Vuex

State is currently managed per component/page. Moving to Vuex will allow better state management and enable data sharing between components/pages.

Items to be worked on

  • Add Vuex as dependency to Vue; enable creating state, getters, mutators, modules & actions.
  • Convert stats data API from Dashboard component to Vuex
  • Convert workers data API from Dashboard component to Vuex

Support worker with multiple queues

If you have a worker that has multiple queues, like: high,default several places doesn't work, like Current Workload > Jobs and Current Workload > Wait.

Nothing is broken, but it simply doesn't load data properly.

php lock

i have an issue. understand, that it's about my configuration, but i can't get with it.
when running horizon it lock the php, so it can not work on other tasks. tried via both apache and cli.
php interactive shell (php -a) works. but when i want to run some php file - it doesn't
when i terminate the horizon all php task get processed.

im running horizon on my macbook, have apache 2.4 with mpm prefork module installed via home brew. php 7.1. laravel 5.5 upgraded from 5.2.

Use with laravel 5.3

Dear !

My main application are running on laravel 5.3. I wonder that I created a blank separate project to install laravel 5.5 + horizon and then I put my application redis connection into this project.

But when I run horizon, It do not show any metrics .

Can you tell me , which part I was wrong ?

Error while installing Horizon on windows

Hi,
When i try to install Horizon on windows dev machine it gives following error

Problem 1
    - Installation request for laravel/horizon dev-master -> satisfiable by laravel/horizon[dev-master].
    - laravel/horizon dev-master requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.

But pcntl is not available for windows

How to install without pcntl.

Horizon::auth access to logged in User?

I'm trying to access the logged in User so I can validate if the dashboard should be shown but inside the Horizon::auth callback all attempts to get the User from the request return null. I'm presuming this is because the session middleware hasn't fired yet? Has anyone else come across this and found a solution?

I've tried calling the auth method in the register and boot methods of my AppServiceProvider fyi.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.