Fix standalone database "restarting" status flickering and add restart tracking

- Fix status flickering: Track databases in active/transient states (restarting, starting, created, paused) not just running
- Add isActiveOrTransient() helper to distinguish between active states and terminal states (exited, dead)
- Add safeguard: Protect updateNotFoundDatabaseStatus() from marking as exited when containers collection is empty
- Add restart_count tracking: New migration adds restart_count, last_restart_at, last_restart_type to all standalone database tables
- Update 8 database models with $casts for new restart tracking fields
- Update GetContainersStatus to extract RestartCount from Docker and update database models
- Reset restart tracking when database exits completely

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Andras Bacsai
2025-12-17 16:25:41 +01:00
parent 20c6f61858
commit 6d47d24169
13 changed files with 194 additions and 17 deletions

View File

@@ -0,0 +1,66 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* The standalone database tables to add restart tracking columns to.
*/
private array $tables = [
'standalone_postgresqls',
'standalone_mysqls',
'standalone_mariadbs',
'standalone_redis',
'standalone_mongodbs',
'standalone_keydbs',
'standalone_dragonflies',
'standalone_clickhouses',
];
/**
* Run the migrations.
*/
public function up(): void
{
foreach ($this->tables as $table) {
if (! Schema::hasColumn($table, 'restart_count')) {
Schema::table($table, function (Blueprint $blueprint) {
$blueprint->integer('restart_count')->default(0)->after('status');
});
}
if (! Schema::hasColumn($table, 'last_restart_at')) {
Schema::table($table, function (Blueprint $blueprint) {
$blueprint->timestamp('last_restart_at')->nullable()->after('restart_count');
});
}
if (! Schema::hasColumn($table, 'last_restart_type')) {
Schema::table($table, function (Blueprint $blueprint) {
$blueprint->string('last_restart_type', 10)->nullable()->after('last_restart_at');
});
}
}
}
/**
* Reverse the migrations.
*/
public function down(): void
{
$columns = ['restart_count', 'last_restart_at', 'last_restart_type'];
foreach ($this->tables as $table) {
foreach ($columns as $column) {
if (Schema::hasColumn($table, $column)) {
Schema::table($table, function (Blueprint $blueprint) use ($column) {
$blueprint->dropColumn($column);
});
}
}
}
}
};