123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Models\ServerShadowsocks;
- use App\Models\ServerTrojan;
- use App\Services\ServerService;
- use App\Utils\CacheKey;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- use App\Models\ServerGroup;
- use App\Models\ServerV2ray;
- use App\Models\Plan;
- use App\Models\User;
- use App\Models\Ticket;
- use App\Models\Order;
- use App\Models\StatOrder;
- use App\Models\StatServer;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Http;
- use Laravel\Horizon\Contracts\JobRepository;
- use Laravel\Horizon\Contracts\MasterSupervisorRepository;
- use Laravel\Horizon\Contracts\MetricsRepository;
- use Laravel\Horizon\Contracts\SupervisorRepository;
- use Laravel\Horizon\Contracts\WorkloadRepository;
- use Laravel\Horizon\WaitTimeCalculator;
- class SystemController extends Controller
- {
- public function getSystemStatus()
- {
- return response([
- 'data' => [
- 'schedule' => $this->getScheduleStatus(),
- 'horizon' => $this->getHorizonStatus()
- ]
- ]);
- }
- public function getQueueWorkload(WorkloadRepository $workload)
- {
- return response([
- 'data' => collect($workload->get())->sortBy('name')->values()->toArray()
- ]);
- }
- protected function getScheduleStatus():bool
- {
- return (time() - 120) < Cache::get(CacheKey::get('SCHEDULE_LAST_CHECK_AT', null));
- }
- protected function getHorizonStatus():bool
- {
- if (! $masters = app(MasterSupervisorRepository::class)->all()) {
- return false;
- }
- return collect($masters)->contains(function ($master) {
- return $master->status === 'paused';
- }) ? false : true;
- }
- public function getQueueStats()
- {
- return response([
- 'data' => [
- 'failedJobs' => app(JobRepository::class)->countRecentlyFailed(),
- 'jobsPerMinute' => app(MetricsRepository::class)->jobsProcessedPerMinute(),
- 'pausedMasters' => $this->totalPausedMasters(),
- 'periods' => [
- 'failedJobs' => config('horizon.trim.recent_failed', config('horizon.trim.failed')),
- 'recentJobs' => config('horizon.trim.recent'),
- ],
- 'processes' => $this->totalProcessCount(),
- 'queueWithMaxRuntime' => app(MetricsRepository::class)->queueWithMaximumRuntime(),
- 'queueWithMaxThroughput' => app(MetricsRepository::class)->queueWithMaximumThroughput(),
- 'recentJobs' => app(JobRepository::class)->countRecent(),
- 'status' => $this->getHorizonStatus(),
- 'wait' => collect(app(WaitTimeCalculator::class)->calculate())->take(1),
- ]
- ]);
- }
- /**
- * Get the total process count across all supervisors.
- *
- * @return int
- */
- protected function totalProcessCount()
- {
- $supervisors = app(SupervisorRepository::class)->all();
- return collect($supervisors)->reduce(function ($carry, $supervisor) {
- return $carry + collect($supervisor->processes)->sum();
- }, 0);
- }
- /**
- * Get the number of master supervisors that are currently paused.
- *
- * @return int
- */
- protected function totalPausedMasters()
- {
- if (! $masters = app(MasterSupervisorRepository::class)->all()) {
- return 0;
- }
- return collect($masters)->filter(function ($master) {
- return $master->status === 'paused';
- })->count();
- }
- }
|