feat: container metrics
This commit is contained in:
		@@ -227,4 +227,33 @@ class StandaloneMysql extends BaseModel
 | 
			
		||||
    {
 | 
			
		||||
        return $this->morphMany(ScheduledDatabaseBackup::class, 'database');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getMetrics(int $mins = 5)
 | 
			
		||||
    {
 | 
			
		||||
        $server = $this->destination->server;
 | 
			
		||||
        $container_name = $this->uuid;
 | 
			
		||||
        if ($server->isMetricsEnabled()) {
 | 
			
		||||
            $from = now()->subMinutes($mins)->toIso8601ZuluString();
 | 
			
		||||
            $metrics = instant_remote_process(["docker exec coolify-sentinel sh -c 'curl -H \"Authorization: Bearer {$server->settings->metrics_token}\" http://localhost:8888/api/container/{$container_name}/metrics/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 = str($metrics)->explode("\n")->skip(1)->all();
 | 
			
		||||
            $parsedCollection = collect($metrics)->flatMap(function ($item) {
 | 
			
		||||
                return collect(explode("\n", trim($item)))->map(function ($line) {
 | 
			
		||||
                    [$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();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user