File "Servers.php"
Full Path: /var/www/drive/laravel/pulse/src/Livewire/Servers.php
File size: 2.92 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Laravel\Pulse\Livewire;
use Carbon\CarbonImmutable;
use Carbon\CarbonInterval;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Support\Facades\View;
use Illuminate\Support\InteractsWithTime;
use Livewire\Attributes\Lazy;
use Livewire\Livewire;
/**
* @internal
*/
#[Lazy]
class Servers extends Card
{
use InteractsWithTime;
public int|string|null $ignoreAfter = null;
/**
* Render the component.
*/
public function render(): Renderable
{
[$servers, $time, $runAt] = $this->remember(function () {
$graphs = $this->graph(['cpu', 'memory'], 'avg');
return $this->values('system')
->map(function ($system, $slug) use ($graphs) {
if ($this->ignoreSystem($system)) {
return null;
}
$values = json_decode($system->value, flags: JSON_THROW_ON_ERROR);
return (object) [
'name' => (string) $values->name,
'cpu_current' => (int) $values->cpu,
'cpu' => $graphs->get($slug)?->get('cpu') ?? collect(),
'memory_current' => (int) $values->memory_used,
'memory_total' => (int) $values->memory_total,
'memory' => $graphs->get($slug)?->get('memory') ?? collect(),
'storage' => collect($values->storage), // @phpstan-ignore argument.templateType, argument.templateType
'updated_at' => $updatedAt = CarbonImmutable::createFromTimestamp($system->timestamp),
'recently_reported' => $updatedAt->isAfter(now()->subSeconds(30)),
];
})
->filter()
->sortBy('name');
});
if (Livewire::isLivewireRequest()) {
$this->dispatch('servers-chart-update', servers: $servers);
}
return View::make('pulse::livewire.servers', [
'servers' => $servers,
'time' => $time,
'runAt' => $runAt,
]);
}
/**
* Render the placeholder.
*/
public function placeholder(): Renderable
{
return View::make('pulse::components.servers-placeholder', ['cols' => $this->cols, 'rows' => $this->rows, 'class' => $this->class]);
}
/**
* Determine if the system should be ignored.
*
* @param object{ timestamp: int, key: string, value: string } $system
*/
protected function ignoreSystem(object $system): bool
{
if ($this->ignoreAfter === null) {
return false;
}
$ignoreAfter = is_numeric($this->ignoreAfter)
? (int) $this->ignoreAfter
: CarbonInterval::createFromDateString($this->ignoreAfter)->totalSeconds;
return CarbonImmutable::createFromTimestamp($system->timestamp)->addSeconds($ignoreAfter)->isPast();
}
}