mirror of
https://github.com/tiennm99/coolify.git
synced 2026-08-21 08:25:45 +00:00
feat(server): add server metadata collection and display
Add ability to gather and display server system information including OS, architecture, kernel version, CPU count, memory, and uptime. Includes: - New gatherServerMetadata() method to collect system details via remote commands - New refreshServerMetadata() Livewire action with authorization and error handling - Server Details UI section showing collected metadata with refresh capability - Database migration to add server_metadata JSON column - Comprehensive test suite for metadata collection and persistence
This commit is contained in:
@@ -25,6 +25,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Stringable;
|
||||
use OpenApi\Attributes as OA;
|
||||
@@ -231,6 +232,7 @@ class Server extends BaseModel
|
||||
protected $casts = [
|
||||
'proxy' => SchemalessAttributes::class,
|
||||
'traefik_outdated_info' => 'array',
|
||||
'server_metadata' => 'array',
|
||||
'logdrain_axiom_api_key' => 'encrypted',
|
||||
'logdrain_newrelic_license_key' => 'encrypted',
|
||||
'delete_unused_volumes' => 'boolean',
|
||||
@@ -258,6 +260,7 @@ class Server extends BaseModel
|
||||
'is_validating',
|
||||
'detected_traefik_version',
|
||||
'traefik_outdated_info',
|
||||
'server_metadata',
|
||||
];
|
||||
|
||||
protected $guarded = [];
|
||||
@@ -1074,6 +1077,55 @@ $schema://$host {
|
||||
}
|
||||
}
|
||||
|
||||
public function gatherServerMetadata(): ?array
|
||||
{
|
||||
if (! $this->isFunctional()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
$output = instant_remote_process([
|
||||
'echo "---PRETTY_NAME---" && grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d \'"\' && echo "---ARCH---" && uname -m && echo "---KERNEL---" && uname -r && echo "---CPUS---" && nproc && echo "---MEMORY---" && free -b | awk \'/Mem:/{print $2}\' && echo "---UPTIME_SINCE---" && uptime -s',
|
||||
], $this, false);
|
||||
|
||||
if (! $output) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$sections = [];
|
||||
$currentKey = null;
|
||||
foreach (explode("\n", trim($output)) as $line) {
|
||||
$line = trim($line);
|
||||
if (preg_match('/^---(\w+)---$/', $line, $m)) {
|
||||
$currentKey = $m[1];
|
||||
} elseif ($currentKey) {
|
||||
$sections[$currentKey] = $line;
|
||||
}
|
||||
}
|
||||
|
||||
$metadata = [
|
||||
'os' => $sections['PRETTY_NAME'] ?? 'Unknown',
|
||||
'arch' => $sections['ARCH'] ?? 'Unknown',
|
||||
'kernel' => $sections['KERNEL'] ?? 'Unknown',
|
||||
'cpus' => (int) ($sections['CPUS'] ?? 0),
|
||||
'memory_bytes' => (int) ($sections['MEMORY'] ?? 0),
|
||||
'uptime_since' => $sections['UPTIME_SINCE'] ?? null,
|
||||
'collected_at' => now()->toIso8601String(),
|
||||
];
|
||||
|
||||
$this->update(['server_metadata' => $metadata]);
|
||||
|
||||
return $metadata;
|
||||
} catch (\Throwable $e) {
|
||||
Log::debug('Failed to gather server metadata', [
|
||||
'server_id' => $this->id,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public function isTerminalEnabled()
|
||||
{
|
||||
return $this->settings->is_terminal_enabled ?? false;
|
||||
|
||||
Reference in New Issue
Block a user