File "Usage.php"
Full Path: /var/www/drive/laravel/pulse/src/Livewire/Usage.php
File size: 2.04 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Laravel\Pulse\Livewire;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\View;
use Laravel\Pulse\Facades\Pulse;
use Laravel\Pulse\Recorders\SlowRequests;
use Laravel\Pulse\Recorders\UserJobs;
use Laravel\Pulse\Recorders\UserRequests;
use Livewire\Attributes\Lazy;
use Livewire\Attributes\Url;
/**
* @internal
*/
#[Lazy]
class Usage extends Card
{
/**
* The type of usage to show.
*
* @var 'requests'|'slow_requests'|'jobs'|null
*/
public ?string $type = null;
/**
* The usage type.
*
* @var 'requests'|'slow_requests'|'jobs'
*/
#[Url]
public string $usage = 'requests';
/**
* Render the component.
*/
public function render(): Renderable
{
$type = $this->type ?? $this->usage;
[$userRequestCounts, $time, $runAt] = $this->remember(
function () use ($type) {
$counts = $this->aggregate(
match ($type) {
'requests' => 'user_request',
'slow_requests' => 'slow_user_request',
'jobs' => 'user_job',
},
'count',
limit: 10,
);
$users = Pulse::resolveUsers($counts->pluck('key'));
return $counts->map(fn ($row) => (object) [
'key' => $row->key,
'user' => $users->find($row->key),
'count' => (int) $row->count,
]);
},
$type
);
return View::make('pulse::livewire.usage', [
'time' => $time,
'runAt' => $runAt,
'userRequestsConfig' => Config::get('pulse.recorders.'.UserRequests::class),
'slowRequestsConfig' => Config::get('pulse.recorders.'.SlowRequests::class),
'jobsConfig' => Config::get('pulse.recorders.'.UserJobs::class),
'userRequestCounts' => $userRequestCounts,
]);
}
}