fix: channels

feat: database backup is realtime now
This commit is contained in:
Andras Bacsai
2023-12-11 10:23:10 +01:00
parent 63dff5961e
commit 3ffd3fc819
15 changed files with 81 additions and 26 deletions

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class BackupCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $teamId;
public function __construct($teamId = null)
{
if (is_null($teamId)) {
$teamId = auth()->user()->currentTeam()->id ?? null;
}
if (is_null($teamId)) {
throw new \Exception("Team id is null");
}
$this->teamId = $teamId;
}
public function broadcastOn(): array
{
return [
new PrivateChannel("team.{$this->teamId}"),
];
}
}

View File

@@ -28,7 +28,7 @@ class DatabaseStatusChanged implements ShouldBroadcast
public function broadcastOn(): array
{
return [
new PrivateChannel("custom.{$this->userId}"),
new PrivateChannel("user.{$this->userId}"),
];
}
}

View File

@@ -28,7 +28,7 @@ class ServiceStatusChanged implements ShouldBroadcast
public function broadcastOn(): array
{
return [
new PrivateChannel("custom.{$this->userId}"),
new PrivateChannel("user.{$this->userId}"),
];
}
}

View File

@@ -22,7 +22,7 @@ class TestEvent implements ShouldBroadcast
public function broadcastOn(): array
{
return [
new PrivateChannel("custom.{$this->teamId}"),
new PrivateChannel("team.{$this->teamId}"),
];
}
}

View File

@@ -79,6 +79,10 @@ class Controller extends BaseController
if (isInstanceAdmin()) {
$settings = InstanceSettings::get();
$database = StandalonePostgresql::whereName('coolify-db')->first();
if ($database->status !== 'running') {
$database->status = 'running';
$database->save();
}
if ($database) {
$s3s = S3Storage::whereTeamId(0)->get();
}

View File

@@ -3,6 +3,7 @@
namespace App\Jobs;
use App\Actions\Database\StopDatabase;
use App\Events\BackupCreated;
use App\Models\S3Storage;
use App\Models\ScheduledDatabaseBackup;
use App\Models\ScheduledDatabaseBackupExecution;
@@ -74,6 +75,7 @@ class DatabaseBackupJob implements ShouldQueue, ShouldBeEncrypted
public function handle(): void
{
try {
BackupCreated::dispatch($this->team->id);
// Check if team is exists
if (is_null($this->team)) {
$this->backup->update(['status' => 'failed']);
@@ -307,6 +309,8 @@ class DatabaseBackupJob implements ShouldQueue, ShouldBeEncrypted
} catch (\Throwable $e) {
send_internal_notification('DatabaseBackupJob failed with: ' . $e->getMessage());
throw $e;
} finally {
BackupCreated::dispatch($this->team->id);
}
}
private function backup_standalone_mongodb(string $databaseWithCollections): void

View File

@@ -10,7 +10,15 @@ class BackupExecutions extends Component
public $backup;
public $executions;
public $setDeletableBackup;
protected $listeners = ['refreshBackupExecutions', 'deleteBackup'];
public function getListeners()
{
$userId = auth()->user()->id;
return [
"echo-private:team.{$userId},BackupCreated" => 'refreshBackupExecutions',
"refreshBackupExecutions",
"deleteBackup"
];
}
public function deleteBackup($exeuctionId)
{

View File

@@ -21,7 +21,7 @@ class Heading extends Component
{
$userId = auth()->user()->id;
return [
"echo-private:custom.{$userId},DatabaseStatusChanged" => 'activityFinished',
"echo-private:user.{$userId},DatabaseStatusChanged" => 'activityFinished',
];
}

View File

@@ -17,7 +17,7 @@ class Index extends Component
{
$userId = auth()->user()->id;
return [
"echo-private:custom.{$userId},ServiceStatusChanged" => 'checkStatus',
"echo-private:user.{$userId},ServiceStatusChanged" => 'checkStatus',
"refreshStacks",
"checkStatus",
];

View File

@@ -8,12 +8,12 @@ class Sponsorship extends Component
{
public function getListeners()
{
$userId = auth()->user()->id;
$teamId = auth()->user()->currentTeam()->id;
return [
"echo-private:custom.{$userId},TestEvent" => 'testEvent',
"echo-private:team.{$teamId},TestEvent" => 'testEvent',
];
}
public function testEvent($asd)
public function testEvent()
{
$this->dispatch('success', 'Realtime events configured!');
}