Remove DaemonPowerRepository

This commit is contained in:
RMartinOscar 2025-09-05 20:00:47 +00:00
parent 925ab26fb4
commit 9556d3a90e
11 changed files with 47 additions and 55 deletions

View File

@ -3,11 +3,11 @@
namespace App\Console\Commands\Server;
use App\Models\Server;
use App\Repositories\Daemon\DaemonServerRepository;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Validation\ValidationException;
use Illuminate\Validation\Factory as ValidatorFactory;
use App\Repositories\Daemon\DaemonPowerRepository;
use Exception;
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.';
public function handle(DaemonPowerRepository $powerRepository, ValidatorFactory $validator): void
public function handle(DaemonServerRepository $serverRepository, ValidatorFactory $validator): void
{
$action = $this->argument('action');
$nodes = empty($this->option('nodes')) ? [] : explode(',', $this->option('nodes'));
@ -52,7 +52,7 @@ class BulkPowerActionCommand extends Command
$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();
if (!$server instanceof Server) {
@ -60,7 +60,7 @@ class BulkPowerActionCommand extends Command
}
try {
$powerRepository->setServer($server)->send($action);
$serverRepository->setServer($server)->power($action);
} catch (Exception $exception) {
$this->output->error(trans('command/messages.server.power.action_failed', [
'name' => $server->name,

View File

@ -7,7 +7,7 @@ use App\Facades\Activity;
use App\Models\Permission;
use App\Models\Server;
use App\Models\ServerVariable;
use App\Repositories\Daemon\DaemonPowerRepository;
use App\Repositories\Daemon\DaemonServerRepository;
use Closure;
use Exception;
use Filament\Actions\Action;
@ -76,7 +76,7 @@ class GSLTokenSchema implements FeatureSchemaInterface
->prefix(fn () => '{{' . $serverVariable->variable->env_variable . '}}')
->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 */
$server = Filament::getTenant();
try {
@ -98,7 +98,7 @@ class GSLTokenSchema implements FeatureSchemaInterface
->log();
}
$powerRepository->setServer($server)->send('restart');
$serverRepository->setServer($server)->power('restart');
Notification::make()
->title('GSL Token updated')

View File

@ -6,7 +6,7 @@ use App\Extensions\Features\FeatureSchemaInterface;
use App\Facades\Activity;
use App\Models\Permission;
use App\Models\Server;
use App\Repositories\Daemon\DaemonPowerRepository;
use App\Repositories\Daemon\DaemonServerRepository;
use Exception;
use Filament\Actions\Action;
use Filament\Facades\Filament;
@ -59,7 +59,7 @@ class JavaVersionSchema implements FeatureSchemaInterface
->preload()
->native(false),
])
->action(function (array $data, DaemonPowerRepository $powerRepository) use ($server) {
->action(function (array $data, DaemonServerRepository $serverRepository) use ($server) {
try {
$new = $data['image'];
$original = $server->image;
@ -71,7 +71,7 @@ class JavaVersionSchema implements FeatureSchemaInterface
->log();
}
$powerRepository->setServer($server)->send('restart');
$serverRepository->setServer($server)->power('restart');
Notification::make()
->title('Docker image updated')

View File

@ -5,7 +5,7 @@ namespace App\Extensions\Features\Schemas;
use App\Extensions\Features\FeatureSchemaInterface;
use App\Models\Server;
use App\Repositories\Daemon\DaemonFileRepository;
use App\Repositories\Daemon\DaemonPowerRepository;
use App\Repositories\Daemon\DaemonServerRepository;
use Exception;
use Filament\Actions\Action;
use Filament\Facades\Filament;
@ -35,14 +35,14 @@ class MinecraftEulaSchema implements FeatureSchemaInterface
->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>.')))
->modalSubmitActionLabel('I Accept')
->action(function (DaemonFileRepository $fileRepository, DaemonPowerRepository $powerRepository) {
->action(function (DaemonFileRepository $fileRepository, DaemonServerRepository $serverRepository) {
try {
/** @var Server $server */
$server = Filament::getTenant();
$fileRepository->setServer($server)->putContent('eula.txt', 'eula=true');
$powerRepository->setServer($server)->send('restart');
$serverRepository->setServer($server)->power('restart');
Notification::make()
->title('Minecraft EULA accepted')

View File

@ -8,7 +8,7 @@ use App\Filament\Components\Tables\Columns\ServerEntryColumn;
use App\Filament\Server\Pages\Console;
use App\Models\Permission;
use App\Models\Server;
use App\Repositories\Daemon\DaemonPowerRepository;
use App\Repositories\Daemon\DaemonServerRepository;
use App\Traits\Filament\CanCustomizeHeaderActions;
use App\Traits\Filament\CanCustomizeHeaderWidgets;
use Filament\Notifications\Notification;
@ -38,11 +38,11 @@ class ListServers extends ListRecords
public const WARNING_THRESHOLD = 0.7;
private DaemonPowerRepository $daemonPowerRepository;
private DaemonServerRepository $daemonServerRepository;
public function boot(): void
{
$this->daemonPowerRepository = new DaemonPowerRepository();
$this->daemonServerRepository = new DaemonServerRepository();
}
/** @return Stack[] */
@ -204,7 +204,7 @@ class ListServers extends ListRecords
public function powerAction(Server $server, string $action): void
{
try {
$this->daemonPowerRepository->setServer($server)->send($action);
$this->daemonServerRepository->setServer($server)->power($action);
Notification::make()
->title(trans('server/dashboard.power_actions'))

View File

@ -5,9 +5,9 @@ namespace App\Http\Controllers\Api\Client\Servers;
use Illuminate\Http\Response;
use App\Models\Server;
use App\Facades\Activity;
use App\Repositories\Daemon\DaemonPowerRepository;
use App\Http\Controllers\Api\Client\ClientApiController;
use App\Http\Requests\Api\Client\Servers\SendPowerRequest;
use App\Repositories\Daemon\DaemonServerRepository;
use Dedoc\Scramble\Attributes\Group;
use Illuminate\Http\Client\ConnectionException;
@ -17,7 +17,7 @@ class PowerController extends ClientApiController
/**
* PowerController constructor.
*/
public function __construct(private DaemonPowerRepository $repository)
public function __construct(private DaemonServerRepository $repository)
{
parent::__construct();
}
@ -31,7 +31,7 @@ class PowerController extends ClientApiController
*/
public function index(SendPowerRequest $request, Server $server): Response
{
$this->repository->setServer($server)->send(
$this->repository->setServer($server)->power(
$request->input('signal')
);

View File

@ -5,11 +5,11 @@ namespace App\Jobs\Schedule;
use App\Jobs\Job;
use Carbon\CarbonImmutable;
use App\Models\Task;
use App\Repositories\Daemon\DaemonServerRepository;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Services\Backups\InitiateBackupService;
use App\Repositories\Daemon\DaemonPowerRepository;
use App\Services\Files\DeleteFilesService;
use Exception;
use Illuminate\Http\Client\ConnectionException;
@ -31,7 +31,7 @@ class RunTaskJob extends Job implements ShouldQueue
*/
public function handle(
InitiateBackupService $backupService,
DaemonPowerRepository $powerRepository,
DaemonServerRepository $serverRepository,
DeleteFilesService $deleteFilesService
): void {
// 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 {
switch ($this->task->action) {
case Task::ACTION_POWER:
$powerRepository->setServer($server)->send($this->task->payload);
$serverRepository->setServer($server)->power($this->task->payload);
break;
case Task::ACTION_COMMAND:
$server->send($this->task->payload);

View File

@ -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],
);
}
}

View File

@ -8,6 +8,7 @@ use Exception;
use Filament\Notifications\Notification;
use Illuminate\Http\Client\ConnectionException;
use Illuminate\Http\Client\RequestException;
use Illuminate\Http\Client\Response;
class DaemonServerRepository extends DaemonRepository
{
@ -149,4 +150,16 @@ class DaemonServerRepository extends DaemonRepository
->throw()
->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],
);
}
}

View File

@ -4,7 +4,7 @@ namespace App\Tests\Integration\Api\Client\Server;
use Illuminate\Http\Response;
use App\Models\Permission;
use App\Repositories\Daemon\DaemonPowerRepository;
use App\Repositories\Daemon\DaemonServerRepository;
use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase;
use PHPUnit\Framework\Attributes\DataProvider;
@ -49,8 +49,8 @@ class PowerControllerTest extends ClientApiIntegrationTestCase
#[DataProvider('validPowerActionDataProvider')]
public function test_action_can_be_sent_to_server(string $action, string $permission): void
{
$service = \Mockery::mock(DaemonPowerRepository::class);
$this->app->instance(DaemonPowerRepository::class, $service);
$service = \Mockery::mock(DaemonServerRepository::class);
$this->app->instance(DaemonServerRepository::class, $service);
[$user, $server] = $this->generateTestAccount([$permission]);
@ -60,7 +60,7 @@ class PowerControllerTest extends ClientApiIntegrationTestCase
}))
->andReturnSelf()
->getMock()
->expects('send')
->expects('power')
->with(trim($action));
$this->actingAs($user)

View File

@ -10,8 +10,8 @@ use App\Models\Server;
use App\Models\Schedule;
use Illuminate\Support\Facades\Bus;
use App\Jobs\Schedule\RunTaskJob;
use App\Repositories\Daemon\DaemonServerRepository;
use App\Tests\Integration\IntegrationTestCase;
use App\Repositories\Daemon\DaemonPowerRepository;
use Illuminate\Http\Client\ConnectionException;
use PHPUnit\Framework\Attributes\DataProvider;
@ -84,13 +84,13 @@ class RunTaskJobTest extends IntegrationTestCase
'continue_on_failure' => false,
]);
$mock = \Mockery::mock(DaemonPowerRepository::class);
$this->instance(DaemonPowerRepository::class, $mock);
$mock = \Mockery::mock(DaemonServerRepository::class);
$this->instance(DaemonServerRepository::class, $mock);
$mock->expects('setServer')->with(\Mockery::on(function ($value) use ($server) {
return $value instanceof Server && $value->id === $server->id;
}))->andReturnSelf();
$mock->expects('send')->with('start');
$mock->expects('power')->with('start');
Bus::dispatchSync(new RunTaskJob($task, $isManualRun));
@ -117,10 +117,10 @@ class RunTaskJobTest extends IntegrationTestCase
'continue_on_failure' => $continueOnFailure,
]);
$mock = \Mockery::mock(DaemonPowerRepository::class);
$this->instance(DaemonPowerRepository::class, $mock);
$mock = \Mockery::mock(DaemonServerRepository::class);
$this->instance(DaemonServerRepository::class, $mock);
$mock->expects('setServer->send')->andThrow(new ConnectionException());
$mock->expects('setServer->power')->andThrow(new ConnectionException());
if (!$continueOnFailure) {
$this->expectException(ConnectionException::class);