mirror of
https://github.com/pelican-dev/panel.git
synced 2025-09-08 22:18:46 +02:00
Remove DaemonPowerRepository
This commit is contained in:
parent
925ab26fb4
commit
9556d3a90e
@ -3,11 +3,11 @@
|
|||||||
namespace App\Console\Commands\Server;
|
namespace App\Console\Commands\Server;
|
||||||
|
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Illuminate\Validation\Factory as ValidatorFactory;
|
use Illuminate\Validation\Factory as ValidatorFactory;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
class BulkPowerActionCommand extends Command
|
class BulkPowerActionCommand extends Command
|
||||||
@ -19,7 +19,7 @@ class BulkPowerActionCommand extends Command
|
|||||||
|
|
||||||
protected $description = 'Perform bulk power management on large groupings of servers or nodes at once.';
|
protected $description = 'Perform bulk power management on large groupings of servers or nodes at once.';
|
||||||
|
|
||||||
public function handle(DaemonPowerRepository $powerRepository, ValidatorFactory $validator): void
|
public function handle(DaemonServerRepository $serverRepository, ValidatorFactory $validator): void
|
||||||
{
|
{
|
||||||
$action = $this->argument('action');
|
$action = $this->argument('action');
|
||||||
$nodes = empty($this->option('nodes')) ? [] : explode(',', $this->option('nodes'));
|
$nodes = empty($this->option('nodes')) ? [] : explode(',', $this->option('nodes'));
|
||||||
@ -52,7 +52,7 @@ class BulkPowerActionCommand extends Command
|
|||||||
|
|
||||||
$bar = $this->output->createProgressBar($count);
|
$bar = $this->output->createProgressBar($count);
|
||||||
|
|
||||||
$this->getQueryBuilder($servers, $nodes)->get()->each(function ($server, int $index) use ($action, $powerRepository, &$bar): mixed {
|
$this->getQueryBuilder($servers, $nodes)->get()->each(function ($server, int $index) use ($action, $serverRepository, &$bar): mixed {
|
||||||
$bar->clear();
|
$bar->clear();
|
||||||
|
|
||||||
if (!$server instanceof Server) {
|
if (!$server instanceof Server) {
|
||||||
@ -60,7 +60,7 @@ class BulkPowerActionCommand extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$powerRepository->setServer($server)->send($action);
|
$serverRepository->setServer($server)->power($action);
|
||||||
} catch (Exception $exception) {
|
} catch (Exception $exception) {
|
||||||
$this->output->error(trans('command/messages.server.power.action_failed', [
|
$this->output->error(trans('command/messages.server.power.action_failed', [
|
||||||
'name' => $server->name,
|
'name' => $server->name,
|
||||||
|
@ -7,7 +7,7 @@ use App\Facades\Activity;
|
|||||||
use App\Models\Permission;
|
use App\Models\Permission;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Models\ServerVariable;
|
use App\Models\ServerVariable;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use Closure;
|
use Closure;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
@ -76,7 +76,7 @@ class GSLTokenSchema implements FeatureSchemaInterface
|
|||||||
->prefix(fn () => '{{' . $serverVariable->variable->env_variable . '}}')
|
->prefix(fn () => '{{' . $serverVariable->variable->env_variable . '}}')
|
||||||
->helperText(fn () => empty($serverVariable->variable->description) ? '—' : $serverVariable->variable->description),
|
->helperText(fn () => empty($serverVariable->variable->description) ? '—' : $serverVariable->variable->description),
|
||||||
])
|
])
|
||||||
->action(function (array $data, DaemonPowerRepository $powerRepository) use ($server, $serverVariable) {
|
->action(function (array $data, DaemonServerRepository $serverRepository) use ($server, $serverVariable) {
|
||||||
/** @var Server $server */
|
/** @var Server $server */
|
||||||
$server = Filament::getTenant();
|
$server = Filament::getTenant();
|
||||||
try {
|
try {
|
||||||
@ -98,7 +98,7 @@ class GSLTokenSchema implements FeatureSchemaInterface
|
|||||||
->log();
|
->log();
|
||||||
}
|
}
|
||||||
|
|
||||||
$powerRepository->setServer($server)->send('restart');
|
$serverRepository->setServer($server)->power('restart');
|
||||||
|
|
||||||
Notification::make()
|
Notification::make()
|
||||||
->title('GSL Token updated')
|
->title('GSL Token updated')
|
||||||
|
@ -6,7 +6,7 @@ use App\Extensions\Features\FeatureSchemaInterface;
|
|||||||
use App\Facades\Activity;
|
use App\Facades\Activity;
|
||||||
use App\Models\Permission;
|
use App\Models\Permission;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
@ -59,7 +59,7 @@ class JavaVersionSchema implements FeatureSchemaInterface
|
|||||||
->preload()
|
->preload()
|
||||||
->native(false),
|
->native(false),
|
||||||
])
|
])
|
||||||
->action(function (array $data, DaemonPowerRepository $powerRepository) use ($server) {
|
->action(function (array $data, DaemonServerRepository $serverRepository) use ($server) {
|
||||||
try {
|
try {
|
||||||
$new = $data['image'];
|
$new = $data['image'];
|
||||||
$original = $server->image;
|
$original = $server->image;
|
||||||
@ -71,7 +71,7 @@ class JavaVersionSchema implements FeatureSchemaInterface
|
|||||||
->log();
|
->log();
|
||||||
}
|
}
|
||||||
|
|
||||||
$powerRepository->setServer($server)->send('restart');
|
$serverRepository->setServer($server)->power('restart');
|
||||||
|
|
||||||
Notification::make()
|
Notification::make()
|
||||||
->title('Docker image updated')
|
->title('Docker image updated')
|
||||||
|
@ -5,7 +5,7 @@ namespace App\Extensions\Features\Schemas;
|
|||||||
use App\Extensions\Features\FeatureSchemaInterface;
|
use App\Extensions\Features\FeatureSchemaInterface;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Repositories\Daemon\DaemonFileRepository;
|
use App\Repositories\Daemon\DaemonFileRepository;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Filament\Actions\Action;
|
use Filament\Actions\Action;
|
||||||
use Filament\Facades\Filament;
|
use Filament\Facades\Filament;
|
||||||
@ -35,14 +35,14 @@ class MinecraftEulaSchema implements FeatureSchemaInterface
|
|||||||
->modalHeading('Minecraft EULA')
|
->modalHeading('Minecraft EULA')
|
||||||
->modalDescription(new HtmlString(Blade::render('By pressing "I Accept" below you are indicating your agreement to the <x-filament::link href="https://minecraft.net/eula" target="_blank">Minecraft EULA </x-filament::link>.')))
|
->modalDescription(new HtmlString(Blade::render('By pressing "I Accept" below you are indicating your agreement to the <x-filament::link href="https://minecraft.net/eula" target="_blank">Minecraft EULA </x-filament::link>.')))
|
||||||
->modalSubmitActionLabel('I Accept')
|
->modalSubmitActionLabel('I Accept')
|
||||||
->action(function (DaemonFileRepository $fileRepository, DaemonPowerRepository $powerRepository) {
|
->action(function (DaemonFileRepository $fileRepository, DaemonServerRepository $serverRepository) {
|
||||||
try {
|
try {
|
||||||
/** @var Server $server */
|
/** @var Server $server */
|
||||||
$server = Filament::getTenant();
|
$server = Filament::getTenant();
|
||||||
|
|
||||||
$fileRepository->setServer($server)->putContent('eula.txt', 'eula=true');
|
$fileRepository->setServer($server)->putContent('eula.txt', 'eula=true');
|
||||||
|
|
||||||
$powerRepository->setServer($server)->send('restart');
|
$serverRepository->setServer($server)->power('restart');
|
||||||
|
|
||||||
Notification::make()
|
Notification::make()
|
||||||
->title('Minecraft EULA accepted')
|
->title('Minecraft EULA accepted')
|
||||||
|
@ -8,7 +8,7 @@ use App\Filament\Components\Tables\Columns\ServerEntryColumn;
|
|||||||
use App\Filament\Server\Pages\Console;
|
use App\Filament\Server\Pages\Console;
|
||||||
use App\Models\Permission;
|
use App\Models\Permission;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use App\Traits\Filament\CanCustomizeHeaderActions;
|
use App\Traits\Filament\CanCustomizeHeaderActions;
|
||||||
use App\Traits\Filament\CanCustomizeHeaderWidgets;
|
use App\Traits\Filament\CanCustomizeHeaderWidgets;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
@ -38,11 +38,11 @@ class ListServers extends ListRecords
|
|||||||
|
|
||||||
public const WARNING_THRESHOLD = 0.7;
|
public const WARNING_THRESHOLD = 0.7;
|
||||||
|
|
||||||
private DaemonPowerRepository $daemonPowerRepository;
|
private DaemonServerRepository $daemonServerRepository;
|
||||||
|
|
||||||
public function boot(): void
|
public function boot(): void
|
||||||
{
|
{
|
||||||
$this->daemonPowerRepository = new DaemonPowerRepository();
|
$this->daemonServerRepository = new DaemonServerRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return Stack[] */
|
/** @return Stack[] */
|
||||||
@ -204,7 +204,7 @@ class ListServers extends ListRecords
|
|||||||
public function powerAction(Server $server, string $action): void
|
public function powerAction(Server $server, string $action): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->daemonPowerRepository->setServer($server)->send($action);
|
$this->daemonServerRepository->setServer($server)->power($action);
|
||||||
|
|
||||||
Notification::make()
|
Notification::make()
|
||||||
->title(trans('server/dashboard.power_actions'))
|
->title(trans('server/dashboard.power_actions'))
|
||||||
|
@ -5,9 +5,9 @@ namespace App\Http\Controllers\Api\Client\Servers;
|
|||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Facades\Activity;
|
use App\Facades\Activity;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
|
||||||
use App\Http\Controllers\Api\Client\ClientApiController;
|
use App\Http\Controllers\Api\Client\ClientApiController;
|
||||||
use App\Http\Requests\Api\Client\Servers\SendPowerRequest;
|
use App\Http\Requests\Api\Client\Servers\SendPowerRequest;
|
||||||
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use Dedoc\Scramble\Attributes\Group;
|
use Dedoc\Scramble\Attributes\Group;
|
||||||
use Illuminate\Http\Client\ConnectionException;
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ class PowerController extends ClientApiController
|
|||||||
/**
|
/**
|
||||||
* PowerController constructor.
|
* PowerController constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct(private DaemonPowerRepository $repository)
|
public function __construct(private DaemonServerRepository $repository)
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
}
|
}
|
||||||
@ -31,7 +31,7 @@ class PowerController extends ClientApiController
|
|||||||
*/
|
*/
|
||||||
public function index(SendPowerRequest $request, Server $server): Response
|
public function index(SendPowerRequest $request, Server $server): Response
|
||||||
{
|
{
|
||||||
$this->repository->setServer($server)->send(
|
$this->repository->setServer($server)->power(
|
||||||
$request->input('signal')
|
$request->input('signal')
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -5,11 +5,11 @@ namespace App\Jobs\Schedule;
|
|||||||
use App\Jobs\Job;
|
use App\Jobs\Job;
|
||||||
use Carbon\CarbonImmutable;
|
use Carbon\CarbonImmutable;
|
||||||
use App\Models\Task;
|
use App\Models\Task;
|
||||||
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use App\Services\Backups\InitiateBackupService;
|
use App\Services\Backups\InitiateBackupService;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
|
||||||
use App\Services\Files\DeleteFilesService;
|
use App\Services\Files\DeleteFilesService;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Http\Client\ConnectionException;
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
@ -31,7 +31,7 @@ class RunTaskJob extends Job implements ShouldQueue
|
|||||||
*/
|
*/
|
||||||
public function handle(
|
public function handle(
|
||||||
InitiateBackupService $backupService,
|
InitiateBackupService $backupService,
|
||||||
DaemonPowerRepository $powerRepository,
|
DaemonServerRepository $serverRepository,
|
||||||
DeleteFilesService $deleteFilesService
|
DeleteFilesService $deleteFilesService
|
||||||
): void {
|
): void {
|
||||||
// Do not process a task that is not set to active, unless it's been manually triggered.
|
// Do not process a task that is not set to active, unless it's been manually triggered.
|
||||||
@ -57,7 +57,7 @@ class RunTaskJob extends Job implements ShouldQueue
|
|||||||
try {
|
try {
|
||||||
switch ($this->task->action) {
|
switch ($this->task->action) {
|
||||||
case Task::ACTION_POWER:
|
case Task::ACTION_POWER:
|
||||||
$powerRepository->setServer($server)->send($this->task->payload);
|
$serverRepository->setServer($server)->power($this->task->payload);
|
||||||
break;
|
break;
|
||||||
case Task::ACTION_COMMAND:
|
case Task::ACTION_COMMAND:
|
||||||
$server->send($this->task->payload);
|
$server->send($this->task->payload);
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Repositories\Daemon;
|
|
||||||
|
|
||||||
use Illuminate\Http\Client\ConnectionException;
|
|
||||||
use Illuminate\Http\Client\Response;
|
|
||||||
|
|
||||||
class DaemonPowerRepository extends DaemonRepository
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Sends a power action to the server instance.
|
|
||||||
*
|
|
||||||
* @throws ConnectionException
|
|
||||||
*/
|
|
||||||
public function send(string $action): Response
|
|
||||||
{
|
|
||||||
return $this->getHttpClient()->post("/api/servers/{$this->server->uuid}/power",
|
|
||||||
['action' => $action],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -8,6 +8,7 @@ use Exception;
|
|||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Illuminate\Http\Client\ConnectionException;
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
use Illuminate\Http\Client\RequestException;
|
use Illuminate\Http\Client\RequestException;
|
||||||
|
use Illuminate\Http\Client\Response;
|
||||||
|
|
||||||
class DaemonServerRepository extends DaemonRepository
|
class DaemonServerRepository extends DaemonRepository
|
||||||
{
|
{
|
||||||
@ -149,4 +150,16 @@ class DaemonServerRepository extends DaemonRepository
|
|||||||
->throw()
|
->throw()
|
||||||
->json('data');
|
->json('data');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a power action to the server instance.
|
||||||
|
*
|
||||||
|
* @throws ConnectionException
|
||||||
|
*/
|
||||||
|
public function power(string $action): Response
|
||||||
|
{
|
||||||
|
return $this->getHttpClient()->post("/api/servers/{$this->server->uuid}/power",
|
||||||
|
['action' => $action],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ namespace App\Tests\Integration\Api\Client\Server;
|
|||||||
|
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
use App\Models\Permission;
|
use App\Models\Permission;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase;
|
use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase;
|
||||||
use PHPUnit\Framework\Attributes\DataProvider;
|
use PHPUnit\Framework\Attributes\DataProvider;
|
||||||
|
|
||||||
@ -49,8 +49,8 @@ class PowerControllerTest extends ClientApiIntegrationTestCase
|
|||||||
#[DataProvider('validPowerActionDataProvider')]
|
#[DataProvider('validPowerActionDataProvider')]
|
||||||
public function test_action_can_be_sent_to_server(string $action, string $permission): void
|
public function test_action_can_be_sent_to_server(string $action, string $permission): void
|
||||||
{
|
{
|
||||||
$service = \Mockery::mock(DaemonPowerRepository::class);
|
$service = \Mockery::mock(DaemonServerRepository::class);
|
||||||
$this->app->instance(DaemonPowerRepository::class, $service);
|
$this->app->instance(DaemonServerRepository::class, $service);
|
||||||
|
|
||||||
[$user, $server] = $this->generateTestAccount([$permission]);
|
[$user, $server] = $this->generateTestAccount([$permission]);
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ class PowerControllerTest extends ClientApiIntegrationTestCase
|
|||||||
}))
|
}))
|
||||||
->andReturnSelf()
|
->andReturnSelf()
|
||||||
->getMock()
|
->getMock()
|
||||||
->expects('send')
|
->expects('power')
|
||||||
->with(trim($action));
|
->with(trim($action));
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
|
@ -10,8 +10,8 @@ use App\Models\Server;
|
|||||||
use App\Models\Schedule;
|
use App\Models\Schedule;
|
||||||
use Illuminate\Support\Facades\Bus;
|
use Illuminate\Support\Facades\Bus;
|
||||||
use App\Jobs\Schedule\RunTaskJob;
|
use App\Jobs\Schedule\RunTaskJob;
|
||||||
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
use App\Tests\Integration\IntegrationTestCase;
|
use App\Tests\Integration\IntegrationTestCase;
|
||||||
use App\Repositories\Daemon\DaemonPowerRepository;
|
|
||||||
use Illuminate\Http\Client\ConnectionException;
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
use PHPUnit\Framework\Attributes\DataProvider;
|
use PHPUnit\Framework\Attributes\DataProvider;
|
||||||
|
|
||||||
@ -84,13 +84,13 @@ class RunTaskJobTest extends IntegrationTestCase
|
|||||||
'continue_on_failure' => false,
|
'continue_on_failure' => false,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$mock = \Mockery::mock(DaemonPowerRepository::class);
|
$mock = \Mockery::mock(DaemonServerRepository::class);
|
||||||
$this->instance(DaemonPowerRepository::class, $mock);
|
$this->instance(DaemonServerRepository::class, $mock);
|
||||||
|
|
||||||
$mock->expects('setServer')->with(\Mockery::on(function ($value) use ($server) {
|
$mock->expects('setServer')->with(\Mockery::on(function ($value) use ($server) {
|
||||||
return $value instanceof Server && $value->id === $server->id;
|
return $value instanceof Server && $value->id === $server->id;
|
||||||
}))->andReturnSelf();
|
}))->andReturnSelf();
|
||||||
$mock->expects('send')->with('start');
|
$mock->expects('power')->with('start');
|
||||||
|
|
||||||
Bus::dispatchSync(new RunTaskJob($task, $isManualRun));
|
Bus::dispatchSync(new RunTaskJob($task, $isManualRun));
|
||||||
|
|
||||||
@ -117,10 +117,10 @@ class RunTaskJobTest extends IntegrationTestCase
|
|||||||
'continue_on_failure' => $continueOnFailure,
|
'continue_on_failure' => $continueOnFailure,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$mock = \Mockery::mock(DaemonPowerRepository::class);
|
$mock = \Mockery::mock(DaemonServerRepository::class);
|
||||||
$this->instance(DaemonPowerRepository::class, $mock);
|
$this->instance(DaemonServerRepository::class, $mock);
|
||||||
|
|
||||||
$mock->expects('setServer->send')->andThrow(new ConnectionException());
|
$mock->expects('setServer->power')->andThrow(new ConnectionException());
|
||||||
|
|
||||||
if (!$continueOnFailure) {
|
if (!$continueOnFailure) {
|
||||||
$this->expectException(ConnectionException::class);
|
$this->expectException(ConnectionException::class);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user