fix: metrics

This commit is contained in:
Andras Bacsai
2024-10-15 15:33:05 +02:00
parent bf0a2f805b
commit 73923a0207
3 changed files with 69 additions and 41 deletions

View File

@@ -31,13 +31,8 @@ class Metrics extends Component
public function loadData() public function loadData()
{ {
try { try {
$metrics = $this->resource->getMetrics($this->interval); $cpuMetrics = $this->resource->getCpuMetrics($this->interval);
$cpuMetrics = collect($metrics)->map(function ($metric) { $memoryMetrics = $this->resource->getMemoryMetrics($this->interval);
return [$metric[0], $metric[1]];
});
$memoryMetrics = collect($metrics)->map(function ($metric) {
return [$metric[0], $metric[2]];
});
$this->dispatch("refreshChartData-{$this->chartId}-cpu", [ $this->dispatch("refreshChartData-{$this->chartId}-cpu", [
'seriesData' => $cpuMetrics, 'seriesData' => $cpuMetrics,
]); ]);

View File

@@ -1400,13 +1400,21 @@ class Application extends BaseModel
return []; return [];
} }
public function getMetrics(int $mins = 5) public function getCpuMetrics(int $mins = 5)
{ {
$server = $this->destination->server; $server = $this->destination->server;
$container_name = $this->uuid; $container_name = $this->uuid;
if ($server->isMetricsEnabled()) { if ($server->isMetricsEnabled()) {
$from = now()->subMinutes($mins)->toIso8601ZuluString(); $from = now()->subMinutes($mins)->toIso8601ZuluString();
$metrics = instant_remote_process(["docker exec coolify-sentinel sh -c 'curl -H \"Authorization: Bearer {$server->settings->sentinel_token}\" http://localhost:8888/api/container/{$container_name}/metrics/history?from=$from'"], $server, false); if (isDev() && $server->id === 0) {
$process = Process::run("curl -H \"Authorization: Bearer {$this->settings->sentinel_token}\" http://host.docker.internal:8888/api/container/{$container_name}/cpu/history?from=$from");
if ($process->failed()) {
throw new \Exception($process->errorOutput());
}
$metrics = $process->output();
} else {
$metrics = instant_remote_process(["docker exec coolify-sentinel sh -c 'curl -H \"Authorization: Bearer {$server->settings->sentinel_token}\" http://localhost:8888/api/container/{$container_name}/cpu/history?from=$from'"], $server, false);
}
if (str($metrics)->contains('error')) { if (str($metrics)->contains('error')) {
$error = json_decode($metrics, true); $error = json_decode($metrics, true);
$error = data_get($error, 'error', 'Something is not okay, are you okay?'); $error = data_get($error, 'error', 'Something is not okay, are you okay?');
@@ -1415,16 +1423,41 @@ class Application extends BaseModel
} }
throw new \Exception($error); throw new \Exception($error);
} }
$metrics = str($metrics)->explode("\n")->skip(1)->all(); $metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->flatMap(function ($item) { $parsedCollection = collect($metrics)->map(function ($metric) {
return collect(explode("\n", trim($item)))->map(function ($line) { return [(int)$metric['time'], (float)$metric['percent']];
[$time, $cpu_usage_percent, $memory_usage, $memory_usage_percent] = explode(',', trim($line));
$cpu_usage_percent = number_format($cpu_usage_percent, 2);
return [(int) $time, (float) $cpu_usage_percent, (int) $memory_usage];
}); });
return $parsedCollection->toArray();
}
}
public function getMemoryMetrics(int $mins = 5)
{
$server = $this->destination->server;
$container_name = $this->uuid;
if ($server->isMetricsEnabled()) {
$from = now()->subMinutes($mins)->toIso8601ZuluString();
if (isDev() && $server->id === 0) {
$process = Process::run("curl -H \"Authorization: Bearer {$this->settings->sentinel_token}\" http://host.docker.internal:8888/api/container/{$container_name}/memory/history?from=$from");
if ($process->failed()) {
throw new \Exception($process->errorOutput());
}
$metrics = $process->output();
} else {
$metrics = instant_remote_process(["docker exec coolify-sentinel sh -c 'curl -H \"Authorization: Bearer {$server->settings->sentinel_token}\" http://localhost:8888/api/container/{$container_name}/memory/history?from=$from'"], $server, false);
}
if (str($metrics)->contains('error')) {
$error = json_decode($metrics, true);
$error = data_get($error, 'error', 'Something is not okay, are you okay?');
if ($error == 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
throw new \Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
logger($metric);
return [(int)$metric['time'], (float)$metric['used']];
}); });
return $parsedCollection->toArray(); return $parsedCollection->toArray();
} }
} }
@@ -1459,7 +1492,8 @@ class Application extends BaseModel
return $config; return $config;
} }
public function setConfig($config) { public function setConfig($config)
{
$config = $config; $config = $config;
$validator = Validator::make(['config' => $config], [ $validator = Validator::make(['config' => $config], [

View File

@@ -154,7 +154,6 @@ Route::group([
$data = request()->all(); $data = request()->all();
PushServerUpdateJob::dispatch($server, $data); PushServerUpdateJob::dispatch($server, $data);
logger('hello');
return response()->json(['message' => 'ok'], 200); return response()->json(['message' => 'ok'], 200);
}); });
}); });