<?php namespace Laravel\Horizon\Http\Controllers; use Laravel\Horizon\Contracts\MasterSupervisorRepository; use Laravel\Horizon\Contracts\SupervisorRepository; use Laravel\Horizon\ProvisioningPlan; class MasterSupervisorController extends Controller { /** * Get all of the master supervisors and their underlying supervisors. * * @param \Laravel\Horizon\Contracts\MasterSupervisorRepository $masters * @param \Laravel\Horizon\Contracts\SupervisorRepository $supervisors * @return \Illuminate\Support\Collection */ public function index(MasterSupervisorRepository $masters, SupervisorRepository $supervisors) { $masters = collect($masters->all())->keyBy('name')->sortBy('name'); $supervisors = collect($supervisors->all())->sortBy('name')->groupBy('master'); return $masters->each(function ($master, $name) use ($supervisors) { $master->supervisors = ($supervisors->get($name) ?? collect()) ->merge( collect(ProvisioningPlan::get($name)->plan[$master->environment ?? config('horizon.env') ?? config('app.env')] ?? []) ->map(function ($value, $key) use ($name) { return (object) [ 'name' => $name.':'.$key, 'master' => $name, 'status' => 'inactive', 'processes' => [], 'options' => [ 'queue' => array_key_exists('queue', $value) && is_array($value['queue']) ? implode(',', $value['queue']) : ($value['queue'] ?? ''), 'balance' => $value['balance'] ?? null, ], ]; }) ) ->unique('name') ->values(); }); } }