'm.weber@acme-cluster.de'], [ 'name' => 'Marie Weber', 'password' => bcrypt('clupilot'), 'email_verified_at' => now(), ] ); TeamMember::updateOrCreate( ['user_id' => $owner->id], [ 'role' => 'owner', 'scope' => 'All clusters', 'two_fa_enabled' => true, 'last_active_at' => now(), ] ); /* ───── dev login (kept from previous seed) ───── */ User::updateOrCreate( ['email' => 'admin@clupilot.test'], [ 'name' => 'Admin', 'password' => bcrypt('clupilot'), 'email_verified_at' => now(), ] ); /* ───── 1 cluster: Acme Cluster ───── */ $cluster = Cluster::firstOrCreate( ['slug' => 'acme-cluster'], [ 'name' => 'Acme Cluster', 'region' => 'eu-central-1', 'env' => 'prod', 'monthly_price_cents' => 24900, 'node_count' => 6, 'backups_enabled' => true, ] ); /* ───── 6 servers ───── */ $servers = [ ['name' => 'eu-prod-01', 'region' => 'eu-central-1', 'flag' => '🇩🇪', 'env' => 'prod', 'status' => 'ok', 'cpu' => 42, 'ram' => 58, 'disk' => 47], ['name' => 'eu-prod-02', 'region' => 'eu-central-1', 'flag' => '🇩🇪', 'env' => 'prod', 'status' => 'ok', 'cpu' => 36, 'ram' => 64, 'disk' => 51], ['name' => 'edge-ams', 'region' => 'eu-west-1', 'flag' => '🇳🇱', 'env' => 'edge', 'status' => 'ok', 'cpu' => 21, 'ram' => 45, 'disk' => 38], ['name' => 'us-east-01', 'region' => 'us-east-1', 'flag' => '🇺🇸', 'env' => 'prod', 'status' => 'warn', 'cpu' => 78, 'ram' => 71, 'disk' => 54], ['name' => 'staging', 'region' => 'eu-central-1', 'flag' => '🇩🇪', 'env' => 'staging', 'status' => 'ok', 'cpu' => 18, 'ram' => 32, 'disk' => 22], ['name' => 'ap-bom-01', 'region' => 'ap-south-1', 'flag' => '🇮🇳', 'env' => 'prod', 'status' => 'ok', 'cpu' => 28, 'ram' => 52, 'disk' => 43], ]; $serverModels = []; foreach ($servers as $s) { $serverModels[] = Server::firstOrCreate( ['name' => $s['name']], [ 'cluster_id' => $cluster->id, 'region' => $s['region'], 'country_flag' => $s['flag'], 'env' => $s['env'], 'cpu_cores' => 8, 'ram_gb' => 32, 'disk_gb' => 320, 'cpu_load_pct' => $s['cpu'], 'ram_used_pct' => $s['ram'], 'disk_used_pct' => $s['disk'], 'status' => $s['status'], 'ip' => fake()->ipv4(), ] ); } /* ───── 87 sites distributed across servers ───── */ $distribution = [23, 19, 14, 18, 6, 7]; // sums to 87 foreach ($serverModels as $i => $server) { $target = $distribution[$i] ?? 5; $existing = $server->sites()->count(); if ($existing < $target) { Site::factory()->count($target - $existing) ->create(['server_id' => $server->id]); } } $allSites = Site::query()->get(); /* ───── Certificates ───── */ foreach ($allSites as $site) { if (! $site->certificate) { Certificate::factory()->create([ 'site_id' => $site->id, 'domain' => '*.' . $site->domain, ]); } } /* ───── Backups (sample) ───── */ $backupSites = $allSites->random(min(28, $allSites->count())); foreach ($backupSites as $site) { Backup::factory()->count(rand(2, 6))->create(['site_id' => $site->id]); } /* ───── Crons (sample) ───── */ foreach ($allSites->random(min(20, $allSites->count())) as $site) { Cron::factory()->count(rand(1, 4))->create(['site_id' => $site->id]); } /* ───── Security events: 128 in last 24h (matches template stat) ───── */ SecurityEvent::factory()->count(128) ->create(['site_id' => $allSites->random()->id]); /* ───── Team members (4 + owner) ───── */ if (TeamMember::count() < 5) { User::factory()->count(4)->create()->each(function (User $u) { TeamMember::factory()->create(['user_id' => $u->id]); }); } /* ───── Pending invitations ───── */ if (Invitation::count() < 3) { Invitation::factory()->count(3)->create([ 'invited_by_user_id' => $owner->id, 'accepted_at' => null, ]); } /* ───── Activity feed (30 recent items) ───── */ Activity::factory()->count(30)->create(['user_id' => $owner->id]); } }