39 lines
1.1 KiB
PHP
39 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Wireguard;
|
|
|
|
use App\Services\WgStatus;
|
|
use App\Services\WgTraffic;
|
|
use Livewire\Attributes\Layout;
|
|
use Livewire\Component;
|
|
|
|
/**
|
|
* WireGuard dashboard — live status (P1) + traffic history (P2). Renders the host-collected
|
|
* status (WgStatus) and a bucketed throughput series (WgTraffic), wire:polls every 5s. Read-only.
|
|
*/
|
|
#[Layout('layouts.app')]
|
|
class Index extends Component
|
|
{
|
|
/** Selected traffic window in seconds. One of WINDOWS. */
|
|
public int $window = 3600;
|
|
|
|
/** Allowed windows (seconds): 1h / 24h / 7d. */
|
|
public const WINDOWS = [3600, 86400, 604800];
|
|
|
|
public function setWindow(int $seconds): void
|
|
{
|
|
$this->window = in_array($seconds, self::WINDOWS, true) ? $seconds : 3600;
|
|
}
|
|
|
|
public function render(WgStatus $wg, WgTraffic $traffic)
|
|
{
|
|
$window = in_array($this->window, self::WINDOWS, true) ? $this->window : 3600;
|
|
|
|
return view('livewire.wireguard.index', [
|
|
'status' => $wg->read(),
|
|
'traffic' => $traffic->series($window),
|
|
'windows' => self::WINDOWS,
|
|
])->title(__('wireguard.title'));
|
|
}
|
|
}
|