Plugins base (#613)

* wip

* wip

* cleanup

* notification channels

* phpstan

* services

* remove server types

* refactoring

* refactoring
This commit is contained in:
Saeed Vaziry
2025-06-14 14:35:18 +02:00
committed by GitHub
parent adc0653d15
commit 131b828807
311 changed files with 3976 additions and 2660 deletions

View File

@ -18,9 +18,14 @@ public function handle(): void
ServerStatus::READY,
ServerStatus::DISCONNECTED,
])->chunk(50, function ($servers) {
$dispatchTime = now();
/** @var Server $server */
foreach ($servers as $server) {
dispatch(function () use ($server) {
dispatch(function () use ($server, $dispatchTime) {
// check connection if dispatch time is less than 5 minutes ago
if ($dispatchTime->diffInMinutes(now()) > 5) {
return;
}
$server->checkConnection();
})->onConnection('ssh');
}

View File

@ -2,6 +2,7 @@
namespace App\Console\Commands;
use App\Enums\ServerStatus;
use App\Models\Server;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Builder;
@ -15,17 +16,19 @@ class GetMetricsCommand extends Command
public function handle(): void
{
$checkedMetrics = 0;
Server::query()->whereHas('services', function (Builder $query): void {
$query->where('type', 'monitoring')
->where('name', 'remote-monitor');
})->chunk(10, function ($servers) use (&$checkedMetrics): void {
/** @var Server $server */
foreach ($servers as $server) {
$info = $server->os()->resourceInfo();
$server->metrics()->create(array_merge($info, ['server_id' => $server->id]));
$checkedMetrics++;
}
});
Server::query()
->where('status', ServerStatus::READY)
->whereHas('services', function (Builder $query): void {
$query->where('type', 'monitoring')
->where('name', 'remote-monitor');
})->chunk(10, function ($servers) use (&$checkedMetrics): void {
/** @var Server $server */
foreach ($servers as $server) {
$info = $server->os()->resourceInfo();
$server->metrics()->create(array_merge($info, ['server_id' => $server->id]));
$checkedMetrics++;
}
});
$this->info("Checked $checkedMetrics metrics");
}
}

View File

@ -2,6 +2,28 @@
namespace App\Console\Commands;
use App\Models\Backup;
use App\Models\BackupFile;
use App\Models\CronJob;
use App\Models\Database;
use App\Models\DatabaseUser;
use App\Models\Deployment;
use App\Models\DeploymentScript;
use App\Models\FirewallRule;
use App\Models\GitHook;
use App\Models\NotificationChannel;
use App\Models\Project;
use App\Models\Server;
use App\Models\ServerLog;
use App\Models\ServerProvider;
use App\Models\Service;
use App\Models\Site;
use App\Models\SourceControl;
use App\Models\SshKey;
use App\Models\Ssl;
use App\Models\StorageProvider;
use App\Models\User;
use App\Models\Worker;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
@ -26,28 +48,28 @@ public function handle(): void
$this->call('migrate', ['--force' => true]);
$this->migrateModel(\App\Models\Backup::class);
$this->migrateModel(\App\Models\BackupFile::class);
$this->migrateModel(\App\Models\CronJob::class);
$this->migrateModel(\App\Models\Database::class);
$this->migrateModel(\App\Models\DatabaseUser::class);
$this->migrateModel(\App\Models\Deployment::class);
$this->migrateModel(\App\Models\DeploymentScript::class);
$this->migrateModel(\App\Models\FirewallRule::class);
$this->migrateModel(\App\Models\GitHook::class);
$this->migrateModel(\App\Models\NotificationChannel::class);
$this->migrateModel(\App\Models\Project::class);
$this->migrateModel(\App\Models\Worker::class);
$this->migrateModel(\App\Models\Server::class);
$this->migrateModel(\App\Models\ServerLog::class);
$this->migrateModel(\App\Models\ServerProvider::class);
$this->migrateModel(\App\Models\Service::class);
$this->migrateModel(\App\Models\Site::class);
$this->migrateModel(\App\Models\SourceControl::class);
$this->migrateModel(\App\Models\SshKey::class);
$this->migrateModel(\App\Models\Ssl::class);
$this->migrateModel(\App\Models\StorageProvider::class);
$this->migrateModel(\App\Models\User::class);
$this->migrateModel(Backup::class);
$this->migrateModel(BackupFile::class);
$this->migrateModel(CronJob::class);
$this->migrateModel(Database::class);
$this->migrateModel(DatabaseUser::class);
$this->migrateModel(Deployment::class);
$this->migrateModel(DeploymentScript::class);
$this->migrateModel(FirewallRule::class);
$this->migrateModel(GitHook::class);
$this->migrateModel(NotificationChannel::class);
$this->migrateModel(Project::class);
$this->migrateModel(Worker::class);
$this->migrateModel(Server::class);
$this->migrateModel(ServerLog::class);
$this->migrateModel(ServerProvider::class);
$this->migrateModel(Service::class);
$this->migrateModel(Site::class);
$this->migrateModel(SourceControl::class);
$this->migrateModel(SshKey::class);
$this->migrateModel(Ssl::class);
$this->migrateModel(StorageProvider::class);
$this->migrateModel(User::class);
$env = File::get(base_path('.env'));
$env = str_replace('DB_CONNECTION=mysql', 'DB_CONNECTION=sqlite', $env);