diff --git a/app/Http/Livewire/Project/Application/Command.php b/app/Http/Livewire/Project/Application/Command.php
index 3ee89dbdf..5fea572ee 100644
--- a/app/Http/Livewire/Project/Application/Command.php
+++ b/app/Http/Livewire/Project/Application/Command.php
@@ -16,31 +16,28 @@ class Command extends Component
{
public string $command;
public string $container;
- public string $dir;
- public $server;
+ public $containers;
+ public $parameters;
+ public $resource;
+ public string $type;
+ public string $workDir = '';
+ public Server $server;
public $servers = [];
protected $rules = [
'server' => 'required',
'container' => 'required',
'command' => 'required',
- ];
- protected $validationAttributes = [
- 'server' => 'server',
- 'container' => 'container',
- 'command' => 'command',
+ 'workDir' => 'nullable',
];
public function mount()
{
-
$this->containers = collect();
$this->parameters = get_route_parameters();
- $this->query = request()->query();
if (data_get($this->parameters, 'application_uuid')) {
$this->type = 'application';
$this->resource = Application::where('uuid', $this->parameters['application_uuid'])->firstOrFail();
- $this->status = $this->resource->status;
$this->server = $this->resource->destination->server;
$containers = getCurrentApplicationContainerStatus($this->server, $this->resource->id, 0);
if ($containers->count() > 0) {
@@ -67,22 +64,27 @@ public function mount()
}
}
$this->resource = $resource;
- $this->status = $this->resource->status;
$this->server = $this->resource->destination->server;
$this->container = $this->resource->uuid;
$this->containers->push($this->container);
} else if (data_get($this->parameters, 'service_uuid')) {
$this->type = 'service';
$this->resource = Service::where('uuid', $this->parameters['service_uuid'])->firstOrFail();
- $service_name = data_get($this->parameters, 'service_name');
- $this->serviceSubType = $this->resource->applications()->where('name', $service_name)->first();
- if (!$this->serviceSubType) {
- $this->serviceSubType = $this->resource->databases()->where('name', $service_name)->first();
- }
- $this->status = $this->resource->status;
+ $this->resource->applications()->get()->each(function ($application) {
+ if (str(data_get($application, 'status'))->contains('running')) {
+ $this->containers->push(data_get($application, 'name') . '-' . data_get($this->resource, 'uuid'));
+ }
+ });
+ $this->resource->databases()->get()->each(function ($database) {
+ if (str(data_get($database, 'status'))->contains('running')) {
+ $this->containers->push(data_get($database, 'name') . '-' . data_get($this->resource, 'uuid'));
+ }
+ });
+
$this->server = $this->resource->server;
- $this->container = data_get($this->parameters, 'service_name') . '-' . $this->resource->uuid;
- $this->containers->push($this->container);
+ }
+ if ($this->containers->count() > 1) {
+ $this->container = $this->containers->first();
}
}
@@ -90,10 +92,9 @@ public function runCommand()
{
$this->validate();
try {
- if (!empty($this->dir)) {
- $exec = "docker exec -w {$this->dir} {$this->container} {$this->command}";
- }
- else {
+ if (!empty($this->workDir)) {
+ $exec = "docker exec -w {$this->workDir} {$this->container} {$this->command}";
+ } else {
$exec = "docker exec {$this->container} {$this->command}";
}
$activity = remote_process([$exec], $this->server, ignore_errors: true);
@@ -102,4 +103,8 @@ public function runCommand()
return handleError($e, $this);
}
}
-}
\ No newline at end of file
+ public function render()
+ {
+ return view('livewire.project.shared.execute-container-command');
+ }
+}
diff --git a/app/Http/Livewire/Project/Shared/ExecuteContainerCommand.php b/app/Http/Livewire/Project/Shared/ExecuteContainerCommand.php
new file mode 100644
index 000000000..cfe149b92
--- /dev/null
+++ b/app/Http/Livewire/Project/Shared/ExecuteContainerCommand.php
@@ -0,0 +1,110 @@
+ 'required',
+ 'container' => 'required',
+ 'command' => 'required',
+ 'workDir' => 'nullable',
+ ];
+
+ public function mount()
+ {
+ $this->containers = collect();
+ $this->parameters = get_route_parameters();
+ if (data_get($this->parameters, 'application_uuid')) {
+ $this->type = 'application';
+ $this->resource = Application::where('uuid', $this->parameters['application_uuid'])->firstOrFail();
+ $this->server = $this->resource->destination->server;
+ $containers = getCurrentApplicationContainerStatus($this->server, $this->resource->id, 0);
+ if ($containers->count() > 0) {
+ $containers->each(function ($container) {
+ $this->containers->push(str_replace('/', '', $container['Names']));
+ });
+ }
+ } else if (data_get($this->parameters, 'database_uuid')) {
+ $this->type = 'database';
+ $resource = StandalonePostgresql::where('uuid', $this->parameters['database_uuid'])->first();
+ if (is_null($resource)) {
+ $resource = StandaloneRedis::where('uuid', $this->parameters['database_uuid'])->first();
+ if (is_null($resource)) {
+ $resource = StandaloneMongodb::where('uuid', $this->parameters['database_uuid'])->first();
+ if (is_null($resource)) {
+ $resource = StandaloneMysql::where('uuid', $this->parameters['database_uuid'])->first();
+ if (is_null($resource)) {
+ $resource = StandaloneMariadb::where('uuid', $this->parameters['database_uuid'])->first();
+ if (is_null($resource)) {
+ abort(404);
+ }
+ }
+ }
+ }
+ }
+ $this->resource = $resource;
+ $this->server = $this->resource->destination->server;
+ $this->container = $this->resource->uuid;
+ $this->containers->push($this->container);
+ } else if (data_get($this->parameters, 'service_uuid')) {
+ $this->type = 'service';
+ $this->resource = Service::where('uuid', $this->parameters['service_uuid'])->firstOrFail();
+ $this->resource->applications()->get()->each(function ($application) {
+ if (str(data_get($application, 'status'))->contains('running')) {
+ $this->containers->push(data_get($application, 'name') . '-' . data_get($this->resource, 'uuid'));
+ }
+ });
+ $this->resource->databases()->get()->each(function ($database) {
+ if (str(data_get($database, 'status'))->contains('running')) {
+ $this->containers->push(data_get($database, 'name') . '-' . data_get($this->resource, 'uuid'));
+ }
+ });
+
+ $this->server = $this->resource->server;
+ }
+ if ($this->containers->count() > 1) {
+ $this->container = $this->containers->first();
+ }
+ }
+
+ public function runCommand()
+ {
+ $this->validate();
+ try {
+ if (!empty($this->workDir)) {
+ $exec = "docker exec -w {$this->workDir} {$this->container} {$this->command}";
+ } else {
+ $exec = "docker exec {$this->container} {$this->command}";
+ }
+ $activity = remote_process([$exec], $this->server, ignore_errors: true);
+ $this->emit('newMonitorActivity', $activity->id);
+ } catch (\Throwable $e) {
+ return handleError($e, $this);
+ }
+ }
+ public function render()
+ {
+ return view('livewire.project.shared.execute-container-command');
+ }
+}
diff --git a/resources/views/components/applications/navbar.blade.php b/resources/views/components/applications/navbar.blade.php
index 8c7da3296..628175f75 100644
--- a/resources/views/components/applications/navbar.blade.php
+++ b/resources/views/components/applications/navbar.blade.php
@@ -3,17 +3,17 @@
href="{{ route('project.application.configuration', $parameters) }}">
-
-
+
+
-
-
+
+