Merge branch 'next' into add-emqx-as-a-service-template
This commit is contained in:
commit
6307bd1ad8
5 changed files with 91 additions and 10 deletions
|
|
@ -233,6 +233,9 @@ public function subscriptionEnded()
|
||||||
'is_reachable' => false,
|
'is_reachable' => false,
|
||||||
]);
|
]);
|
||||||
ServerReachabilityChanged::dispatch($server);
|
ServerReachabilityChanged::dispatch($server);
|
||||||
|
$server->unreachable_count = 3;
|
||||||
|
$server->unreachable_notification_sent = true;
|
||||||
|
$server->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -344,5 +347,4 @@ public function webhookNotificationSettings()
|
||||||
{
|
{
|
||||||
return $this->hasOne(WebhookNotificationSettings::class);
|
return $this->hasOne(WebhookNotificationSettings::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
*/
|
*/
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Server::query()->chunk(100, function ($servers) {
|
Server::query()->whereHas('team')->chunk(100, function ($servers) {
|
||||||
foreach ($servers as $server) {
|
foreach ($servers as $server) {
|
||||||
$existingKeys = SharedEnvironmentVariable::where('type', 'server')
|
$existingKeys = SharedEnvironmentVariable::where('type', 'server')
|
||||||
->where('server_id', $server->id)
|
->where('server_id', $server->id)
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,15 @@
|
||||||
{
|
{
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::table('local_persistent_volumes', function (Blueprint $table) {
|
if (! Schema::hasColumn('local_persistent_volumes', 'uuid')) {
|
||||||
$table->string('uuid')->nullable()->after('id');
|
Schema::table('local_persistent_volumes', function (Blueprint $table) {
|
||||||
});
|
$table->string('uuid')->nullable()->after('id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
DB::table('local_persistent_volumes')
|
DB::table('local_persistent_volumes')
|
||||||
->whereNull('uuid')
|
->whereNull('uuid')
|
||||||
->orderBy('id')
|
->chunkById(1000, function ($volumes) {
|
||||||
->chunk(1000, function ($volumes) {
|
|
||||||
foreach ($volumes as $volume) {
|
foreach ($volumes as $volume) {
|
||||||
DB::table('local_persistent_volumes')
|
DB::table('local_persistent_volumes')
|
||||||
->where('id', $volume->id)
|
->where('id', $volume->id)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
'updated_at' => now()->subDays(8),
|
'updated_at' => now()->subDays(8),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$originalIp = $server->ip;
|
$originalIp = (string) $server->ip;
|
||||||
|
|
||||||
$this->artisan('cleanup:unreachable-servers')->assertSuccessful();
|
$this->artisan('cleanup:unreachable-servers')->assertSuccessful();
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@
|
||||||
'updated_at' => now()->subDays(3),
|
'updated_at' => now()->subDays(3),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$originalIp = $server->ip;
|
$originalIp = (string) $server->ip;
|
||||||
|
|
||||||
$this->artisan('cleanup:unreachable-servers')->assertSuccessful();
|
$this->artisan('cleanup:unreachable-servers')->assertSuccessful();
|
||||||
|
|
||||||
|
|
@ -64,7 +64,7 @@
|
||||||
'updated_at' => now()->subDays(8),
|
'updated_at' => now()->subDays(8),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$originalIp = $server->ip;
|
$originalIp = (string) $server->ip;
|
||||||
|
|
||||||
$this->artisan('cleanup:unreachable-servers')->assertSuccessful();
|
$this->artisan('cleanup:unreachable-servers')->assertSuccessful();
|
||||||
|
|
||||||
|
|
|
||||||
78
tests/Feature/CleanupUnsubscribedServersTest.php
Normal file
78
tests/Feature/CleanupUnsubscribedServersTest.php
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Models\Server;
|
||||||
|
use App\Models\Subscription;
|
||||||
|
use App\Models\Team;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
|
||||||
|
uses(RefreshDatabase::class);
|
||||||
|
|
||||||
|
it('sets unreachable fields on servers when subscription ends', function () {
|
||||||
|
$team = Team::factory()->create();
|
||||||
|
Subscription::create([
|
||||||
|
'team_id' => $team->id,
|
||||||
|
'stripe_invoice_paid' => true,
|
||||||
|
]);
|
||||||
|
$server = Server::factory()->create([
|
||||||
|
'team_id' => $team->id,
|
||||||
|
'unreachable_count' => 0,
|
||||||
|
'unreachable_notification_sent' => false,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$team->subscriptionEnded();
|
||||||
|
|
||||||
|
$server->refresh();
|
||||||
|
expect($server->unreachable_count)->toBe(3);
|
||||||
|
expect($server->unreachable_notification_sent)->toBeTrue();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('cleans up unsubscribed server IP after 7 days via cleanup command', function () {
|
||||||
|
$team = Team::factory()->create();
|
||||||
|
$server = Server::factory()->create([
|
||||||
|
'team_id' => $team->id,
|
||||||
|
'unreachable_count' => 3,
|
||||||
|
'unreachable_notification_sent' => true,
|
||||||
|
'updated_at' => now()->subDays(8),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->artisan('cleanup:unreachable-servers')->assertSuccessful();
|
||||||
|
|
||||||
|
$server->refresh();
|
||||||
|
expect($server->ip)->toBe('1.2.3.4');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not clean up unsubscribed server IP within 7 day grace period', function () {
|
||||||
|
$team = Team::factory()->create();
|
||||||
|
$server = Server::factory()->create([
|
||||||
|
'team_id' => $team->id,
|
||||||
|
'unreachable_count' => 3,
|
||||||
|
'unreachable_notification_sent' => true,
|
||||||
|
'updated_at' => now()->subDays(3),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$originalIp = (string) $server->ip;
|
||||||
|
|
||||||
|
$this->artisan('cleanup:unreachable-servers')->assertSuccessful();
|
||||||
|
|
||||||
|
$server->refresh();
|
||||||
|
expect((string) $server->ip)->toBe($originalIp);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not affect servers with active subscriptions', function () {
|
||||||
|
$team = Team::factory()->create();
|
||||||
|
Subscription::create([
|
||||||
|
'team_id' => $team->id,
|
||||||
|
'stripe_invoice_paid' => true,
|
||||||
|
]);
|
||||||
|
$server = Server::factory()->create([
|
||||||
|
'team_id' => $team->id,
|
||||||
|
'unreachable_count' => 0,
|
||||||
|
'unreachable_notification_sent' => false,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$originalCount = $server->unreachable_count;
|
||||||
|
$originalNotification = $server->unreachable_notification_sent;
|
||||||
|
|
||||||
|
expect($originalCount)->toBe(0);
|
||||||
|
expect($originalNotification)->toBeFalse();
|
||||||
|
});
|
||||||
Loading…
Reference in a new issue