Align sysstat timezone with system
This commit is contained in:
@@ -34,7 +34,8 @@ class ServerChartsWidget extends Widget
|
|||||||
$this->refreshKey++;
|
$this->refreshKey++;
|
||||||
$data = $this->getData();
|
$data = $this->getData();
|
||||||
$config = $this->rangeConfig($this->range);
|
$config = $this->rangeConfig($this->range);
|
||||||
$label = now()->format($config['label_format']);
|
$sysstat = new SysstatMetrics;
|
||||||
|
$label = now($sysstat->timezoneName())->format($config['label_format']);
|
||||||
|
|
||||||
$this->dispatch('server-charts-updated', [
|
$this->dispatch('server-charts-updated', [
|
||||||
'cpu' => $data['cpu']['usage'] ?? 0,
|
'cpu' => $data['cpu']['usage'] ?? 0,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
use Carbon\CarbonImmutable;
|
use Carbon\CarbonImmutable;
|
||||||
|
use DateTimeZone;
|
||||||
use Symfony\Component\Process\Process;
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
class SysstatMetrics
|
class SysstatMetrics
|
||||||
@@ -18,7 +19,8 @@ class SysstatMetrics
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$end = CarbonImmutable::now()->second(0);
|
$timezone = $this->systemTimezone();
|
||||||
|
$end = CarbonImmutable::now($timezone)->second(0);
|
||||||
if ($intervalSeconds >= 3600) {
|
if ($intervalSeconds >= 3600) {
|
||||||
$end = $end->minute(0);
|
$end = $end->minute(0);
|
||||||
}
|
}
|
||||||
@@ -40,7 +42,8 @@ class SysstatMetrics
|
|||||||
*/
|
*/
|
||||||
public function latest(): ?array
|
public function latest(): ?array
|
||||||
{
|
{
|
||||||
$end = CarbonImmutable::now();
|
$timezone = $this->systemTimezone();
|
||||||
|
$end = CarbonImmutable::now($timezone);
|
||||||
$start = $end->subMinutes(15);
|
$start = $end->subMinutes(15);
|
||||||
$samples = $this->readSamples($start, $end);
|
$samples = $this->readSamples($start, $end);
|
||||||
|
|
||||||
@@ -63,6 +66,11 @@ class SysstatMetrics
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function timezoneName(): string
|
||||||
|
{
|
||||||
|
return $this->systemTimezone()->getName();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array<int, array{timestamp: int, load1: float, load5: float, load15: float, iowait: float, memory: float, swap: float}>
|
* @return array<int, array{timestamp: int, load1: float, load5: float, load15: float, iowait: float, memory: float, swap: float}>
|
||||||
*/
|
*/
|
||||||
@@ -227,7 +235,7 @@ class SysstatMetrics
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$value = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $date.' '.$time, config('app.timezone'));
|
$value = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $date.' '.$time, $this->systemTimezone());
|
||||||
if ($value === false) {
|
if ($value === false) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -235,6 +243,37 @@ class SysstatMetrics
|
|||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function systemTimezone(): DateTimeZone
|
||||||
|
{
|
||||||
|
static $timezone = null;
|
||||||
|
|
||||||
|
if ($timezone instanceof DateTimeZone) {
|
||||||
|
return $timezone;
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = getenv('TZ') ?: null;
|
||||||
|
if (! $name && is_file('/etc/timezone')) {
|
||||||
|
$name = trim((string) file_get_contents('/etc/timezone'));
|
||||||
|
}
|
||||||
|
if (! $name && is_link('/etc/localtime')) {
|
||||||
|
$target = readlink('/etc/localtime');
|
||||||
|
if (is_string($target) && str_contains($target, '/zoneinfo/')) {
|
||||||
|
$name = substr($target, strpos($target, '/zoneinfo/') + 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (! $name) {
|
||||||
|
$name = config('app.timezone') ?: date_default_timezone_get();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$timezone = new DateTimeZone($name);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$timezone = new DateTimeZone('UTC');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $timezone;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array<string, mixed> $source
|
* @param array<string, mixed> $source
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user