2023-08-29 12:36:17 +00:00
|
|
|
<div>
|
2023-08-29 13:51:30 +00:00
|
|
|
@if (session('error'))
|
2023-08-30 16:23:55 +00:00
|
|
|
<span x-data x-init="$wire.emit('error', '{{ session('error') }}')" />
|
2023-08-29 13:51:30 +00:00
|
|
|
@endif
|
2024-03-21 13:30:35 +00:00
|
|
|
<h1>Dashboard</h1>
|
|
|
|
<div class="subtitle">Your self-hosted infrastructure.</div>
|
2023-08-30 16:23:55 +00:00
|
|
|
@if (request()->query->get('success'))
|
2024-03-20 14:46:59 +00:00
|
|
|
<div class="mb-10 rounded dark:text-white alert-success">
|
2023-08-30 16:23:55 +00:00
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 stroke-current shrink-0" fill="none"
|
|
|
|
viewBox="0 0 24 24">
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
|
|
|
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
|
|
</svg>
|
2024-01-27 17:44:40 +00:00
|
|
|
<span>Your subscription has been activated! Welcome onboard! <br>It could take a few seconds before your
|
|
|
|
subscription is activated.<br> Please be patient.</span>
|
2023-08-30 16:23:55 +00:00
|
|
|
</div>
|
|
|
|
@endif
|
2024-03-18 13:32:49 +00:00
|
|
|
<h3 class="pb-4">Projects</h3>
|
2024-03-22 10:34:15 +00:00
|
|
|
@if ($projects->count() > 0)
|
|
|
|
<div class="grid grid-cols-1 gap-2 xl:grid-cols-2">
|
|
|
|
@foreach ($projects as $project)
|
|
|
|
<div class="gap-2 border border-transparent cursor-pointer box group">
|
|
|
|
@if (data_get($project, 'environments')->count() === 1)
|
2024-03-25 15:42:41 +00:00
|
|
|
<a class="flex flex-col justify-center flex-1 mx-6"
|
2024-03-22 10:34:15 +00:00
|
|
|
href="{{ route('project.resource.index', ['project_uuid' => data_get($project, 'uuid'), 'environment_name' => data_get($project, 'environments.0.name', 'production')]) }}">
|
|
|
|
<div class="box-title">{{ $project->name }}</div>
|
2024-03-25 15:42:41 +00:00
|
|
|
<div class="box-description"> {{ $project->description }}</div>
|
2024-03-22 10:34:15 +00:00
|
|
|
</a>
|
|
|
|
@else
|
2024-03-25 15:42:41 +00:00
|
|
|
<a class="flex flex-col justify-center flex-1 mx-6"
|
2024-03-22 10:34:15 +00:00
|
|
|
href="{{ route('project.show', ['project_uuid' => data_get($project, 'uuid')]) }}">
|
|
|
|
<div class="box-title">{{ $project->name }}</div>
|
|
|
|
<div class="box-description">
|
|
|
|
{{ $project->description }}</div>
|
|
|
|
</a>
|
|
|
|
@endif
|
2024-03-25 15:42:41 +00:00
|
|
|
<div class="flex items-center justify-center gap-2 pt-4 pb-2 mr-4 text-xs lg:py-0 lg:justify-normal">
|
2024-03-24 15:00:25 +00:00
|
|
|
<a class="hover:underline"
|
2024-03-22 10:34:15 +00:00
|
|
|
href="{{ route('project.resource.create', ['project_uuid' => data_get($project, 'uuid'), 'environment_name' => data_get($project, 'environments.0.name', 'production')]) }}">
|
2024-03-24 15:00:25 +00:00
|
|
|
<span class="p-2 font-bold">+
|
2024-03-22 10:34:15 +00:00
|
|
|
Add Resource</span>
|
|
|
|
</a>
|
2024-03-24 15:00:25 +00:00
|
|
|
<a class="font-bold hover:underline"
|
2024-03-22 10:34:15 +00:00
|
|
|
href="{{ route('project.edit', ['project_uuid' => data_get($project, 'uuid')]) }}">
|
2024-03-25 09:41:44 +00:00
|
|
|
Settings
|
2024-03-22 10:34:15 +00:00
|
|
|
</a>
|
|
|
|
</div>
|
2024-02-23 11:59:14 +00:00
|
|
|
</div>
|
2024-03-22 10:34:15 +00:00
|
|
|
@endforeach
|
|
|
|
</div>
|
|
|
|
@else
|
|
|
|
<div class="flex flex-col gap-1">
|
2024-03-22 16:02:09 +00:00
|
|
|
<div class='font-bold dark:text-warning'>No projects found.</div>
|
|
|
|
<div class="flex items-center gap-1">
|
|
|
|
<x-modal-input buttonTitle="Add" title="New Project">
|
|
|
|
<livewire:project.add-empty />
|
|
|
|
</x-modal-input> your first project or
|
2024-03-21 13:30:35 +00:00
|
|
|
go to the <a class="underline dark:text-white" href="{{ route('onboarding') }}">onboarding</a> page.
|
2024-03-18 13:35:46 +00:00
|
|
|
</div>
|
2024-03-22 10:34:15 +00:00
|
|
|
</div>
|
|
|
|
@endif
|
|
|
|
|
2023-10-18 16:02:09 +00:00
|
|
|
<h3 class="py-4">Servers</h3>
|
2024-03-22 10:34:15 +00:00
|
|
|
@if ($servers->count() > 0)
|
|
|
|
<div class="grid grid-cols-1 gap-2 xl:grid-cols-2">
|
|
|
|
@foreach ($servers as $server)
|
|
|
|
<a href="{{ route('server.show', ['server_uuid' => data_get($server, 'uuid')]) }}"
|
|
|
|
@class([
|
|
|
|
'gap-2 border cursor-pointer box group',
|
|
|
|
'border-transparent' => $server->settings->is_reachable,
|
|
|
|
'border-red-500' => !$server->settings->is_reachable,
|
|
|
|
])>
|
2024-03-25 15:42:41 +00:00
|
|
|
<div class="flex flex-col justify-center mx-6">
|
2024-03-22 10:34:15 +00:00
|
|
|
<div class="box-title">
|
|
|
|
{{ $server->name }}
|
|
|
|
</div>
|
|
|
|
<div class="box-description">
|
|
|
|
{{ $server->description }}</div>
|
|
|
|
<div class="flex gap-1 text-xs text-error">
|
|
|
|
@if (!$server->settings->is_reachable)
|
2024-03-25 15:42:41 +00:00
|
|
|
Not reachable
|
2024-03-22 10:34:15 +00:00
|
|
|
@endif
|
|
|
|
@if (!$server->settings->is_reachable && !$server->settings->is_usable)
|
|
|
|
&
|
|
|
|
@endif
|
|
|
|
@if (!$server->settings->is_usable)
|
2024-03-25 15:42:41 +00:00
|
|
|
Not usable by Coolify
|
2024-03-22 10:34:15 +00:00
|
|
|
@endif
|
|
|
|
</div>
|
2024-03-18 13:35:46 +00:00
|
|
|
</div>
|
2024-03-22 10:34:15 +00:00
|
|
|
<div class="flex-1"></div>
|
|
|
|
</a>
|
|
|
|
@endforeach
|
|
|
|
</div>
|
|
|
|
@else
|
|
|
|
@if ($private_keys->count() === 0)
|
|
|
|
<div class="flex flex-col gap-1">
|
2024-03-22 16:02:09 +00:00
|
|
|
<div class='font-bold dark:text-warning'>No private keys found.</div>
|
|
|
|
<div class="flex items-center gap-1">Before you can add your server, first <x-modal-input
|
|
|
|
buttonTitle="add" title="New Private Key">
|
|
|
|
<livewire:security.private-key.create from="server" />
|
|
|
|
</x-modal-input> a private key
|
|
|
|
or
|
2024-03-21 13:30:35 +00:00
|
|
|
go to the <a class="underline dark:text-white" href="{{ route('onboarding') }}">onboarding</a>
|
|
|
|
page.
|
|
|
|
</div>
|
2024-03-22 10:34:15 +00:00
|
|
|
</div>
|
|
|
|
@else
|
2024-03-24 15:00:25 +00:00
|
|
|
<div class="flex flex-col gap-1">
|
|
|
|
<div class='font-bold dark:text-warning'>No servers found.</div>
|
2024-03-25 09:41:44 +00:00
|
|
|
<div class="flex items-center gap-1"><x-modal-input buttonTitle="Add" title="New Server">
|
|
|
|
<livewire:server.create />
|
|
|
|
</x-modal-input> your first server
|
|
|
|
or
|
|
|
|
go to the <a class="underline dark:text-white" href="{{ route('onboarding') }}">onboarding</a>
|
|
|
|
page.
|
|
|
|
</div>
|
2024-03-24 15:00:25 +00:00
|
|
|
</div>
|
2024-03-22 10:34:15 +00:00
|
|
|
@endif
|
|
|
|
@endif
|
2024-03-22 16:02:09 +00:00
|
|
|
@if ($servers->count() > 0 && $projects->count() > 0)
|
|
|
|
<div class="flex items-center gap-2">
|
|
|
|
<h3 class="py-4">Deployments</h3>
|
|
|
|
@if (count($deployments_per_server) > 0)
|
|
|
|
<x-loading />
|
|
|
|
@endif
|
|
|
|
<x-forms.button wire:click='cleanup_queue'>Cleanup Queues</x-forms.button>
|
|
|
|
</div>
|
2024-03-24 15:00:25 +00:00
|
|
|
<div wire:poll.3000ms="get_deployments" class="grid grid-cols-1">
|
2024-03-22 16:02:09 +00:00
|
|
|
@forelse ($deployments_per_server as $server_name => $deployments)
|
|
|
|
<h4 class="py-4">{{ $server_name }}</h4>
|
|
|
|
<div class="grid grid-cols-1 gap-2 lg:grid-cols-3">
|
|
|
|
@foreach ($deployments as $deployment)
|
|
|
|
<a href="{{ data_get($deployment, 'deployment_url') }}" @class([
|
|
|
|
'gap-2 cursor-pointer box group border-l-2 border-dotted',
|
|
|
|
'dark:border-coolgray-300' => data_get($deployment, 'status') === 'queued',
|
|
|
|
'border-yellow-500' => data_get($deployment, 'status') === 'in_progress',
|
|
|
|
])>
|
2024-03-25 15:42:41 +00:00
|
|
|
<div class="flex flex-col justify-center mx-6">
|
2024-03-22 16:02:09 +00:00
|
|
|
<div class="box-title">
|
|
|
|
{{ data_get($deployment, 'application_name') }}
|
|
|
|
</div>
|
|
|
|
@if (data_get($deployment, 'pull_request_id') !== 0)
|
|
|
|
<div class="box-description">
|
|
|
|
PR #{{ data_get($deployment, 'pull_request_id') }}
|
|
|
|
</div>
|
|
|
|
@endif
|
2024-03-20 14:46:59 +00:00
|
|
|
<div class="box-description">
|
2024-03-22 16:02:09 +00:00
|
|
|
{{ str(data_get($deployment, 'status'))->headline() }}
|
2024-03-18 13:32:49 +00:00
|
|
|
</div>
|
2024-02-02 10:50:28 +00:00
|
|
|
</div>
|
2024-03-22 16:02:09 +00:00
|
|
|
<div class="flex-1"></div>
|
|
|
|
</a>
|
|
|
|
@endforeach
|
|
|
|
</div>
|
|
|
|
@empty
|
|
|
|
<div>No deployments running.</div>
|
|
|
|
@endforelse
|
|
|
|
</div>
|
|
|
|
@endif
|
2024-03-18 13:32:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
function gotoProject(uuid, environment = 'production') {
|
|
|
|
window.location.href = '/project/' + uuid + '/' + environment;
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
{{-- <x-forms.button wire:click='getIptables'>Get IPTABLES</x-forms.button> --}}
|
2023-08-29 12:36:17 +00:00
|
|
|
</div>
|