fix: make server charts one livewire component with one interval selector
This commit is contained in:
parent
28522418ff
commit
453b28baf7
@ -1,59 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Livewire\Charts;
|
|
||||||
|
|
||||||
use App\Models\Server as ModelsServer;
|
|
||||||
use Livewire\Component;
|
|
||||||
|
|
||||||
class ServerCpu extends Component
|
|
||||||
{
|
|
||||||
public ModelsServer $server;
|
|
||||||
|
|
||||||
public $chartId = 'server-cpu';
|
|
||||||
|
|
||||||
public $data;
|
|
||||||
|
|
||||||
public $categories;
|
|
||||||
|
|
||||||
public int $interval = 5;
|
|
||||||
|
|
||||||
public bool $poll = true;
|
|
||||||
|
|
||||||
public function render()
|
|
||||||
{
|
|
||||||
return view('livewire.charts.server-cpu');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pollData()
|
|
||||||
{
|
|
||||||
if ($this->poll || $this->interval <= 10) {
|
|
||||||
$this->loadData();
|
|
||||||
if ($this->interval > 10) {
|
|
||||||
$this->poll = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function loadData()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$metrics = $this->server->getCpuMetrics($this->interval);
|
|
||||||
$metrics = collect($metrics)->map(function ($metric) {
|
|
||||||
return [$metric[0], $metric[1]];
|
|
||||||
});
|
|
||||||
$this->dispatch("refreshChartData-{$this->chartId}", [
|
|
||||||
'seriesData' => $metrics,
|
|
||||||
]);
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
return handleError($e, $this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setInterval()
|
|
||||||
{
|
|
||||||
if ($this->interval <= 10) {
|
|
||||||
$this->poll = true;
|
|
||||||
}
|
|
||||||
$this->loadData();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Livewire\Charts;
|
namespace App\Livewire\Server;
|
||||||
|
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
class ServerMemory extends Component
|
class Charts extends Component
|
||||||
{
|
{
|
||||||
public Server $server;
|
public Server $server;
|
||||||
|
|
||||||
public $chartId = 'server-memory';
|
public $chartId = 'server';
|
||||||
|
|
||||||
public $data;
|
public $data;
|
||||||
|
|
||||||
@ -19,11 +19,6 @@ class ServerMemory extends Component
|
|||||||
|
|
||||||
public bool $poll = true;
|
public bool $poll = true;
|
||||||
|
|
||||||
public function render()
|
|
||||||
{
|
|
||||||
return view('livewire.charts.server-memory');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pollData()
|
public function pollData()
|
||||||
{
|
{
|
||||||
if ($this->poll || $this->interval <= 10) {
|
if ($this->poll || $this->interval <= 10) {
|
||||||
@ -37,13 +32,21 @@ public function pollData()
|
|||||||
public function loadData()
|
public function loadData()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$metrics = $this->server->getMemoryMetrics($this->interval);
|
$cpuMetrics = $this->server->getCpuMetrics($this->interval);
|
||||||
$metrics = collect($metrics)->map(function ($metric) {
|
$memoryMetrics = $this->server->getMemoryMetrics($this->interval);
|
||||||
|
$cpuMetrics = collect($cpuMetrics)->map(function ($metric) {
|
||||||
return [$metric[0], $metric[1]];
|
return [$metric[0], $metric[1]];
|
||||||
});
|
});
|
||||||
$this->dispatch("refreshChartData-{$this->chartId}", [
|
$memoryMetrics = collect($memoryMetrics)->map(function ($metric) {
|
||||||
'seriesData' => $metrics,
|
return [$metric[0], $metric[1]];
|
||||||
|
});
|
||||||
|
$this->dispatch("refreshChartData-{$this->chartId}-cpu", [
|
||||||
|
'seriesData' => $cpuMetrics,
|
||||||
]);
|
]);
|
||||||
|
$this->dispatch("refreshChartData-{$this->chartId}-memory", [
|
||||||
|
'seriesData' => $memoryMetrics,
|
||||||
|
]);
|
||||||
|
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return handleError($e, $this);
|
return handleError($e, $this);
|
||||||
}
|
}
|
@ -1,116 +0,0 @@
|
|||||||
<div @if ($poll) wire:poll.5000ms='pollData' @endif x-init="$wire.loadData()">
|
|
||||||
<h3>CPU (%)</h3>
|
|
||||||
<x-forms.select label="Interval" wire:change="setInterval" id="interval">
|
|
||||||
<option value="5">5 minutes (live)</option>
|
|
||||||
<option value="10">10 minutes (live)</option>
|
|
||||||
<option value="30">30 minutes</option>
|
|
||||||
<option value="60">1 hour</option>
|
|
||||||
<option value="720">12 hours</option>
|
|
||||||
<option value="10080">1 week</option>
|
|
||||||
<option value="43200">30 days</option>
|
|
||||||
</x-forms.select>
|
|
||||||
<div wire:ignore id="{!! $chartId !!}"></div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
checkTheme();
|
|
||||||
const optionsServerCpu = {
|
|
||||||
stroke: {
|
|
||||||
curve: 'straight',
|
|
||||||
},
|
|
||||||
chart: {
|
|
||||||
height: '150px',
|
|
||||||
id: '{!! $chartId !!}',
|
|
||||||
type: 'area',
|
|
||||||
toolbar: {
|
|
||||||
show: false,
|
|
||||||
tools: {
|
|
||||||
download: true,
|
|
||||||
selection: false,
|
|
||||||
zoom: false,
|
|
||||||
zoomin: false,
|
|
||||||
zoomout: false,
|
|
||||||
pan: false,
|
|
||||||
reset: false
|
|
||||||
},
|
|
||||||
},
|
|
||||||
animations: {
|
|
||||||
enabled: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
fill: {
|
|
||||||
type: 'gradient',
|
|
||||||
},
|
|
||||||
dataLabels: {
|
|
||||||
enabled: false,
|
|
||||||
offsetY: -10,
|
|
||||||
style: {
|
|
||||||
colors: ['#FCD452'],
|
|
||||||
},
|
|
||||||
background: {
|
|
||||||
enabled: false,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
grid: {
|
|
||||||
show: true,
|
|
||||||
borderColor: '',
|
|
||||||
},
|
|
||||||
colors: [baseColor],
|
|
||||||
xaxis: {
|
|
||||||
type: 'datetime',
|
|
||||||
},
|
|
||||||
series: [{
|
|
||||||
data: []
|
|
||||||
}],
|
|
||||||
noData: {
|
|
||||||
text: 'Loading...',
|
|
||||||
style: {
|
|
||||||
color: textColor,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
enabled: false,
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
show: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const serverCpuChart = new ApexCharts(document.getElementById(`{!! $chartId !!}`), optionsServerCpu);
|
|
||||||
serverCpuChart.render();
|
|
||||||
document.addEventListener('livewire:init', () => {
|
|
||||||
Livewire.on('refreshChartData-{!! $chartId !!}', (chartData) => {
|
|
||||||
checkTheme();
|
|
||||||
serverCpuChart.updateOptions({
|
|
||||||
series: [{
|
|
||||||
data: chartData[0].seriesData,
|
|
||||||
}],
|
|
||||||
colors: [baseColor],
|
|
||||||
xaxis: {
|
|
||||||
type: 'datetime',
|
|
||||||
labels: {
|
|
||||||
show: true,
|
|
||||||
style: {
|
|
||||||
colors: textColor,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
yaxis: {
|
|
||||||
show: true,
|
|
||||||
labels: {
|
|
||||||
show: true,
|
|
||||||
style: {
|
|
||||||
colors: textColor,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
noData: {
|
|
||||||
text: 'Loading...',
|
|
||||||
style: {
|
|
||||||
color: textColor,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</div>
|
|
@ -1,123 +0,0 @@
|
|||||||
<div @if ($poll) wire:poll.5000ms='pollData' @endif x-init="$wire.loadData()">
|
|
||||||
<h3>Memory (MB)</h3>
|
|
||||||
<x-forms.select label="Interval" wire:change="setInterval" id="interval">
|
|
||||||
<option value="5">5 minutes (live)</option>
|
|
||||||
<option value="10">10 minutes (live)</option>
|
|
||||||
<option value="30">30 minutes</option>
|
|
||||||
<option value="60">1 hour</option>
|
|
||||||
<option value="720">12 hours</option>
|
|
||||||
<option value="10080">1 week</option>
|
|
||||||
<option value="43200">30 days</option>
|
|
||||||
</x-forms.select>
|
|
||||||
<div wire:ignore id="{!! $chartId !!}"></div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
checkTheme();
|
|
||||||
const optionsServerMemory = {
|
|
||||||
stroke: {
|
|
||||||
curve: 'straight',
|
|
||||||
},
|
|
||||||
chart: {
|
|
||||||
height: '150px',
|
|
||||||
id: '{!! $chartId !!}',
|
|
||||||
type: 'area',
|
|
||||||
toolbar: {
|
|
||||||
show: false,
|
|
||||||
tools: {
|
|
||||||
download: true,
|
|
||||||
selection: false,
|
|
||||||
zoom: false,
|
|
||||||
zoomin: false,
|
|
||||||
zoomout: false,
|
|
||||||
pan: false,
|
|
||||||
reset: false
|
|
||||||
},
|
|
||||||
},
|
|
||||||
animations: {
|
|
||||||
enabled: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
fill: {
|
|
||||||
type: 'gradient',
|
|
||||||
},
|
|
||||||
dataLabels: {
|
|
||||||
enabled: false,
|
|
||||||
offsetY: -10,
|
|
||||||
style: {
|
|
||||||
colors: ['#FCD452'],
|
|
||||||
},
|
|
||||||
background: {
|
|
||||||
enabled: false,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
grid: {
|
|
||||||
show: true,
|
|
||||||
borderColor: '',
|
|
||||||
},
|
|
||||||
colors: [baseColor],
|
|
||||||
xaxis: {
|
|
||||||
type: 'datetime',
|
|
||||||
labels: {
|
|
||||||
show: true,
|
|
||||||
style: {
|
|
||||||
colors: textColor,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
series: [{
|
|
||||||
data: []
|
|
||||||
}],
|
|
||||||
noData: {
|
|
||||||
text: 'Loading...',
|
|
||||||
style: {
|
|
||||||
color: textColor,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
enabled: false,
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
show: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const serverMemoryChart = new ApexCharts(document.getElementById(`{!! $chartId !!}`), optionsServerMemory);
|
|
||||||
serverMemoryChart.render();
|
|
||||||
document.addEventListener('livewire:init', () => {
|
|
||||||
Livewire.on('refreshChartData-{!! $chartId !!}', (chartData) => {
|
|
||||||
checkTheme();
|
|
||||||
serverMemoryChart.updateOptions({
|
|
||||||
series: [{
|
|
||||||
data: chartData[0].seriesData,
|
|
||||||
}],
|
|
||||||
colors: [baseColor],
|
|
||||||
xaxis: {
|
|
||||||
type: 'datetime',
|
|
||||||
labels: {
|
|
||||||
show: true,
|
|
||||||
style: {
|
|
||||||
colors: textColor,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
yaxis: {
|
|
||||||
min: 0,
|
|
||||||
show: true,
|
|
||||||
labels: {
|
|
||||||
show: true,
|
|
||||||
style: {
|
|
||||||
colors: textColor,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
noData: {
|
|
||||||
text: 'Loading...',
|
|
||||||
style: {
|
|
||||||
color: textColor,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</div>
|
|
232
resources/views/livewire/server/charts.blade.php
Normal file
232
resources/views/livewire/server/charts.blade.php
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
<div @if ($poll) wire:poll.5000ms='pollData' @endif x-init="$wire.loadData()">
|
||||||
|
<h3>CPU (%)</h3>
|
||||||
|
<x-forms.select label="Interval" wire:change="setInterval" id="interval">
|
||||||
|
<option value="5">5 minutes (live)</option>
|
||||||
|
<option value="10">10 minutes (live)</option>
|
||||||
|
<option value="30">30 minutes</option>
|
||||||
|
<option value="60">1 hour</option>
|
||||||
|
<option value="720">12 hours</option>
|
||||||
|
<option value="10080">1 week</option>
|
||||||
|
<option value="43200">30 days</option>
|
||||||
|
</x-forms.select>
|
||||||
|
<div wire:ignore id="{!! $chartId !!}-cpu"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
checkTheme();
|
||||||
|
const optionsServerCpu = {
|
||||||
|
stroke: {
|
||||||
|
curve: 'straight',
|
||||||
|
},
|
||||||
|
chart: {
|
||||||
|
height: '150px',
|
||||||
|
id: '{!! $chartId !!}-cpu',
|
||||||
|
type: 'area',
|
||||||
|
toolbar: {
|
||||||
|
show: false,
|
||||||
|
tools: {
|
||||||
|
download: true,
|
||||||
|
selection: false,
|
||||||
|
zoom: false,
|
||||||
|
zoomin: false,
|
||||||
|
zoomout: false,
|
||||||
|
pan: false,
|
||||||
|
reset: false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
animations: {
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
fill: {
|
||||||
|
type: 'gradient',
|
||||||
|
},
|
||||||
|
dataLabels: {
|
||||||
|
enabled: false,
|
||||||
|
offsetY: -10,
|
||||||
|
style: {
|
||||||
|
colors: ['#FCD452'],
|
||||||
|
},
|
||||||
|
background: {
|
||||||
|
enabled: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
show: true,
|
||||||
|
borderColor: '',
|
||||||
|
},
|
||||||
|
colors: [baseColor],
|
||||||
|
xaxis: {
|
||||||
|
type: 'datetime',
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
data: []
|
||||||
|
}],
|
||||||
|
noData: {
|
||||||
|
text: 'Loading...',
|
||||||
|
style: {
|
||||||
|
color: textColor,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const serverCpuChart = new ApexCharts(document.getElementById(`{!! $chartId !!}-cpu`),
|
||||||
|
optionsServerCpu);
|
||||||
|
serverCpuChart.render();
|
||||||
|
document.addEventListener('livewire:init', () => {
|
||||||
|
Livewire.on('refreshChartData-{!! $chartId !!}-cpu', (chartData) => {
|
||||||
|
checkTheme();
|
||||||
|
serverCpuChart.updateOptions({
|
||||||
|
series: [{
|
||||||
|
data: chartData[0].seriesData,
|
||||||
|
}],
|
||||||
|
colors: [baseColor],
|
||||||
|
xaxis: {
|
||||||
|
type: 'datetime',
|
||||||
|
labels: {
|
||||||
|
show: true,
|
||||||
|
style: {
|
||||||
|
colors: textColor,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
yaxis: {
|
||||||
|
show: true,
|
||||||
|
labels: {
|
||||||
|
show: true,
|
||||||
|
style: {
|
||||||
|
colors: textColor,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
noData: {
|
||||||
|
text: 'Loading...',
|
||||||
|
style: {
|
||||||
|
color: textColor,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Memory (MB)</h3>
|
||||||
|
<div wire:ignore id="{!! $chartId !!}-memory"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
checkTheme();
|
||||||
|
const optionsServerMemory = {
|
||||||
|
stroke: {
|
||||||
|
curve: 'straight',
|
||||||
|
},
|
||||||
|
chart: {
|
||||||
|
height: '150px',
|
||||||
|
id: '{!! $chartId !!}-memory',
|
||||||
|
type: 'area',
|
||||||
|
toolbar: {
|
||||||
|
show: false,
|
||||||
|
tools: {
|
||||||
|
download: true,
|
||||||
|
selection: false,
|
||||||
|
zoom: false,
|
||||||
|
zoomin: false,
|
||||||
|
zoomout: false,
|
||||||
|
pan: false,
|
||||||
|
reset: false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
animations: {
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
fill: {
|
||||||
|
type: 'gradient',
|
||||||
|
},
|
||||||
|
dataLabels: {
|
||||||
|
enabled: false,
|
||||||
|
offsetY: -10,
|
||||||
|
style: {
|
||||||
|
colors: ['#FCD452'],
|
||||||
|
},
|
||||||
|
background: {
|
||||||
|
enabled: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
show: true,
|
||||||
|
borderColor: '',
|
||||||
|
},
|
||||||
|
colors: [baseColor],
|
||||||
|
xaxis: {
|
||||||
|
type: 'datetime',
|
||||||
|
labels: {
|
||||||
|
show: true,
|
||||||
|
style: {
|
||||||
|
colors: textColor,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
data: []
|
||||||
|
}],
|
||||||
|
noData: {
|
||||||
|
text: 'Loading...',
|
||||||
|
style: {
|
||||||
|
color: textColor,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const serverMemoryChart = new ApexCharts(document.getElementById(`{!! $chartId !!}-memory`),
|
||||||
|
optionsServerMemory);
|
||||||
|
serverMemoryChart.render();
|
||||||
|
document.addEventListener('livewire:init', () => {
|
||||||
|
Livewire.on('refreshChartData-{!! $chartId !!}-memory', (chartData) => {
|
||||||
|
checkTheme();
|
||||||
|
serverMemoryChart.updateOptions({
|
||||||
|
series: [{
|
||||||
|
data: chartData[0].seriesData,
|
||||||
|
}],
|
||||||
|
colors: [baseColor],
|
||||||
|
xaxis: {
|
||||||
|
type: 'datetime',
|
||||||
|
labels: {
|
||||||
|
show: true,
|
||||||
|
style: {
|
||||||
|
colors: textColor,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
yaxis: {
|
||||||
|
min: 0,
|
||||||
|
show: true,
|
||||||
|
labels: {
|
||||||
|
show: true,
|
||||||
|
style: {
|
||||||
|
colors: textColor,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
noData: {
|
||||||
|
text: 'Loading...',
|
||||||
|
style: {
|
||||||
|
color: textColor,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -7,8 +7,7 @@
|
|||||||
<livewire:server.delete :server="$server" />
|
<livewire:server.delete :server="$server" />
|
||||||
@if ($server->isFunctional() && $server->isMetricsEnabled())
|
@if ($server->isFunctional() && $server->isMetricsEnabled())
|
||||||
<div class="pt-10">
|
<div class="pt-10">
|
||||||
<livewire:charts.server-cpu :server="$server" />
|
<livewire:server.charts :server="$server" />
|
||||||
<livewire:charts.server-memory :server="$server" />
|
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user