feat: remove horizon
CI / 🧪 Tests Laravel (push) Successful in 2m15s
CI / 🐳 Build & Push Images (push) Successful in 1m9s

This commit is contained in:
2026-08-13 16:58:13 +02:00
parent 8ef1a3cff8
commit ea5a5737ec
35 changed files with 24 additions and 2060 deletions
-1
View File
@@ -76,7 +76,6 @@ REVENUECAT_SUBSCRIPTION_ENTITLEMENT="bowli Pro"
REVENUECAT_CERTIFICATION_ENTITLEMENT=certification
HEALTH_SECRET_TOKEN=
HORIZON_HEARTBEAT_URL=
SCHEDULE_HEARTBEAT_URL=
IMAGE_TAG=latest
-1
View File
@@ -13,7 +13,6 @@ This application is a Laravel application and its main Laravel ecosystems packag
- filament/filament (FILAMENT) - v5
- laravel/ai (AI) - v0
- laravel/framework (LARAVEL) - v12
- laravel/horizon (HORIZON) - v5
- laravel/prompts (PROMPTS) - v0
- laravel/sanctum (SANCTUM) - v4
- laravel/scout (SCOUT) - v11
-2
View File
@@ -21,7 +21,6 @@ use Illuminate\Support\ServiceProvider;
use Spatie\Health\Checks\Checks\DatabaseCheck;
use Spatie\Health\Checks\Checks\DebugModeCheck;
use Spatie\Health\Checks\Checks\EnvironmentCheck;
use Spatie\Health\Checks\Checks\HorizonCheck;
use Spatie\Health\Checks\Checks\MeilisearchCheck;
use Spatie\Health\Checks\Checks\OptimizedAppCheck;
use Spatie\Health\Checks\Checks\RedisCheck;
@@ -98,7 +97,6 @@ class AppServiceProvider extends ServiceProvider
UsedDiskSpaceCheck::new(),
RedisCheck::new(),
ScheduleCheck::new(),
HorizonCheck::new(),
OptimizedAppCheck::new(),
EnvironmentCheck::new(),
DebugModeCheck::new(),
@@ -7,7 +7,6 @@ use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\AuthenticateSession;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Navigation\NavigationItem;
use Filament\Pages\Dashboard;
use Filament\Panel;
use Filament\PanelProvider;
@@ -19,7 +18,6 @@ use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
use ShuvroRoy\FilamentSpatieLaravelHealth\FilamentSpatieLaravelHealthPlugin;
class DashboardPanelProvider extends PanelProvider
@@ -36,14 +34,6 @@ class DashboardPanelProvider extends PanelProvider
->colors([
'primary' => Color::hex('#007f3a'),
])
->navigationItems([
NavigationItem::make('Horizon')
->url(url('/horizon'), shouldOpenInNewTab: true)
->icon('heroicon-o-queue-list')
->group('Settings')
->sort(3)
->visible(fn (): bool => auth()->user()?->isAdmin() === true),
])
->discoverResources(in: app_path('Filament/Resources'), for: 'App\Filament\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\Filament\Pages')
->pages([
@@ -70,7 +60,6 @@ class DashboardPanelProvider extends PanelProvider
->plugins([
FilamentSpatieLaravelHealthPlugin::make(),
FilamentExceptionsPlugin::make(),
FilamentSpatieLaravelBackupPlugin::make(),
]);
}
}
-33
View File
@@ -1,33 +0,0 @@
<?php
namespace App\Providers;
use App\Models\User;
use Illuminate\Support\Facades\Gate;
use Laravel\Horizon\Horizon;
use Laravel\Horizon\HorizonApplicationServiceProvider;
class HorizonServiceProvider extends HorizonApplicationServiceProvider
{
/**
* Bootstrap any application services.
*/
public function boot(): void
{
parent::boot();
// Horizon::routeSmsNotificationsTo('15556667777');
// Horizon::routeMailNotificationsTo('example@example.com');
// Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');
}
/**
* Register the Horizon gate.
*
* This gate determines who can access Horizon in non-local environments.
*/
protected function gate(): void
{
Gate::define('viewHorizon', fn (?User $user): bool => $user?->isAdmin() === true);
}
}
-1
View File
@@ -3,5 +3,4 @@
return [
App\Providers\AppServiceProvider::class,
App\Providers\Filament\DashboardPanelProvider::class,
App\Providers\HorizonServiceProvider::class,
];
+2 -2
View File
@@ -83,7 +83,7 @@ services:
- 'http://127.0.0.1:7700/health'
retries: 3
timeout: 5s
horizon:
worker:
build:
context: ./vendor/laravel/sail/runtimes/8.5
dockerfile: Dockerfile
@@ -104,7 +104,7 @@ services:
- sail
depends_on:
- redis
command: 'php artisan horizon'
command: 'php artisan queue:work redis --sleep=3 --tries=1 --timeout=60 --memory=128'
networks:
sail:
driver: bridge
-2
View File
@@ -14,7 +14,6 @@
"http-interop/http-factory-guzzle": "^1.2",
"laravel/ai": "^0.6.8",
"laravel/framework": "^12.0",
"laravel/horizon": "^5.45",
"laravel/octane": "^2.17",
"laravel/sanctum": "^4.0",
"laravel/scout": "^11.0",
@@ -24,7 +23,6 @@
"predis/predis": "^3.4",
"resend/resend-laravel": "^1.4",
"scalar/laravel": "^0.2.0",
"shuvroroy/filament-spatie-laravel-backup": "^3.3",
"shuvroroy/filament-spatie-laravel-health": "^3.2",
"spatie/laravel-health": "^1.39"
},
Generated
+1 -454
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "df1fb81f35dace6e7c3dd49b05ade882",
"content-hash": "df2b16c297c1e56ece6d0d3aa9b6fc5e",
"packages": [
{
"name": "anourvalar/eloquent-serialize",
@@ -2916,86 +2916,6 @@
},
"time": "2026-02-24T14:35:15+00:00"
},
{
"name": "laravel/horizon",
"version": "v5.45.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/horizon.git",
"reference": "80c4de73c56227c625e5a3c6bfaddff760ab0962"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/horizon/zipball/80c4de73c56227c625e5a3c6bfaddff760ab0962",
"reference": "80c4de73c56227c625e5a3c6bfaddff760ab0962",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-pcntl": "*",
"ext-posix": "*",
"illuminate/contracts": "^9.21|^10.0|^11.0|^12.0|^13.0",
"illuminate/queue": "^9.21|^10.0|^11.0|^12.0|^13.0",
"illuminate/support": "^9.21|^10.0|^11.0|^12.0|^13.0",
"laravel/sentinel": "^1.0",
"nesbot/carbon": "^2.17|^3.0",
"php": "^8.0",
"ramsey/uuid": "^4.0",
"symfony/console": "^6.0|^7.0|^8.0",
"symfony/error-handler": "^6.0|^7.0|^8.0",
"symfony/polyfill-php83": "^1.28",
"symfony/process": "^6.0|^7.0|^8.0"
},
"require-dev": {
"mockery/mockery": "^1.0",
"orchestra/testbench": "^7.56|^8.37|^9.16|^10.9|^11.0",
"phpstan/phpstan": "^1.10|^2.0",
"predis/predis": "^1.1|^2.0|^3.0"
},
"suggest": {
"ext-redis": "Required to use the Redis PHP driver.",
"predis/predis": "Required when not using the Redis PHP driver (^1.1|^2.0|^3.0)."
},
"type": "library",
"extra": {
"laravel": {
"aliases": {
"Horizon": "Laravel\\Horizon\\Horizon"
},
"providers": [
"Laravel\\Horizon\\HorizonServiceProvider"
]
},
"branch-alias": {
"dev-master": "6.x-dev"
}
},
"autoload": {
"psr-4": {
"Laravel\\Horizon\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylor@laravel.com"
}
],
"description": "Dashboard and code-driven configuration for Laravel queues.",
"keywords": [
"laravel",
"queue"
],
"support": {
"issues": "https://github.com/laravel/horizon/issues",
"source": "https://github.com/laravel/horizon/tree/v5.45.3"
},
"time": "2026-03-11T14:28:04+00:00"
},
{
"name": "laravel/octane",
"version": "v2.17.5",
@@ -3287,65 +3207,6 @@
},
"time": "2026-03-10T19:16:37+00:00"
},
{
"name": "laravel/sentinel",
"version": "v1.0.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/sentinel.git",
"reference": "7a98db53e0d9d6f61387f3141c07477f97425603"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/sentinel/zipball/7a98db53e0d9d6f61387f3141c07477f97425603",
"reference": "7a98db53e0d9d6f61387f3141c07477f97425603",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/container": "^8.37|^9.0|^10.0|^11.0|^12.0|^13.0",
"php": "^8.0"
},
"require-dev": {
"laravel/pint": "^1.27",
"orchestra/testbench": "^6.47.1|^7.56|^8.37|^9.16|^10.9|^11.0",
"phpstan/phpstan": "^2.1.33"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Laravel\\Sentinel\\SentinelServiceProvider"
]
},
"branch-alias": {
"dev-main": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Laravel\\Sentinel\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylor@laravel.com"
},
{
"name": "Mior Muhammad Zaki",
"email": "mior@laravel.com"
}
],
"support": {
"source": "https://github.com/laravel/sentinel/tree/v1.0.1"
},
"time": "2026-02-12T13:32:54+00:00"
},
{
"name": "laravel/serializable-closure",
"version": "v2.0.10",
@@ -6781,82 +6642,6 @@
],
"time": "2022-12-17T21:53:22+00:00"
},
{
"name": "shuvroroy/filament-spatie-laravel-backup",
"version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/shuvroroy/filament-spatie-laravel-backup.git",
"reference": "e9a360bfa20efb6c3824288d8d3f2529307ec252"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/shuvroroy/filament-spatie-laravel-backup/zipball/e9a360bfa20efb6c3824288d8d3f2529307ec252",
"reference": "e9a360bfa20efb6c3824288d8d3f2529307ec252",
"shasum": ""
},
"require": {
"filament/filament": "^4.0|^5.0",
"php": "^8.2",
"spatie/laravel-backup": "^8.0|^9.0",
"spatie/laravel-package-tools": "^1.9"
},
"require-dev": {
"larastan/larastan": "^3.0",
"laravel/pint": "^1.0",
"nunomaduro/collision": "^8.1.1||^7.10.0",
"orchestra/testbench": "^9.0||^10.0",
"pestphp/pest": "^2.0||^3.0",
"pestphp/pest-plugin-arch": "^2.0||^3.0",
"pestphp/pest-plugin-laravel": "^2.0||^3.0",
"phpstan/extension-installer": "^1.4",
"phpstan/phpstan": "^2.1",
"phpstan/phpstan-deprecation-rules": "^2.0",
"phpstan/phpstan-phpunit": "^2.0"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"ShuvroRoy\\FilamentSpatieLaravelBackup\\FilamentSpatieLaravelBackupServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"ShuvroRoy\\FilamentSpatieLaravelBackup\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Shuvro Roy",
"email": "shuvro.nsu.cse@gmail.com",
"role": "Developer"
}
],
"description": "This plugin is built on top of Spatie's Laravel-backup package",
"homepage": "https://github.com/shuvroroy/filament-spatie-laravel-backup",
"keywords": [
"filament",
"filament-spatie-laravel-backup",
"laravel-backup"
],
"support": {
"issues": "https://github.com/shuvroroy/filament-spatie-laravel-backup/issues",
"source": "https://github.com/shuvroroy/filament-spatie-laravel-backup/tree/v3.3.0"
},
"funding": [
{
"url": "https://www.buymeacoffee.com/shuvroroy",
"type": "buy_me_a_coffee"
}
],
"time": "2026-01-17T04:50:15+00:00"
},
{
"name": "shuvroroy/filament-spatie-laravel-health",
"version": "v3.2.0",
@@ -6933,69 +6718,6 @@
],
"time": "2026-01-17T12:24:55+00:00"
},
{
"name": "spatie/db-dumper",
"version": "3.8.3",
"source": {
"type": "git",
"url": "https://github.com/spatie/db-dumper.git",
"reference": "eac3221fbe27fac51f388600d27b67b1b079406e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/db-dumper/zipball/eac3221fbe27fac51f388600d27b67b1b079406e",
"reference": "eac3221fbe27fac51f388600d27b67b1b079406e",
"shasum": ""
},
"require": {
"php": "^8.0",
"symfony/process": "^5.0|^6.0|^7.0|^8.0"
},
"require-dev": {
"pestphp/pest": "^1.22"
},
"type": "library",
"autoload": {
"psr-4": {
"Spatie\\DbDumper\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"homepage": "https://spatie.be",
"role": "Developer"
}
],
"description": "Dump databases",
"homepage": "https://github.com/spatie/db-dumper",
"keywords": [
"database",
"db-dumper",
"dump",
"mysqldump",
"spatie"
],
"support": {
"source": "https://github.com/spatie/db-dumper/tree/3.8.3"
},
"funding": [
{
"url": "https://spatie.be/open-source/support-us",
"type": "custom"
},
{
"url": "https://github.com/spatie",
"type": "github"
}
],
"time": "2026-01-05T16:26:03+00:00"
},
{
"name": "spatie/enum",
"version": "3.13.0",
@@ -7131,106 +6853,6 @@
],
"time": "2024-05-17T09:06:10+00:00"
},
{
"name": "spatie/laravel-backup",
"version": "9.4.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-backup.git",
"reference": "0dff805039617b4a6f48291cef0697a73bc0392e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-backup/zipball/0dff805039617b4a6f48291cef0697a73bc0392e",
"reference": "0dff805039617b4a6f48291cef0697a73bc0392e",
"shasum": ""
},
"require": {
"ext-zip": "^1.14.0",
"illuminate/console": "^12.40",
"illuminate/contracts": "^12.40",
"illuminate/events": "^12.40",
"illuminate/filesystem": "^12.40",
"illuminate/notifications": "^12.40",
"illuminate/support": "^12.40",
"league/flysystem": "^3.30.2",
"php": "^8.3",
"spatie/db-dumper": "^3.8.1",
"spatie/laravel-package-tools": "^1.92.7",
"spatie/laravel-signal-aware-command": "^2.1",
"spatie/temporary-directory": "^2.3",
"symfony/console": "^7.3.6|^8.0",
"symfony/finder": "^7.3.5|^8.0"
},
"require-dev": {
"composer-runtime-api": "^2.0",
"ext-pcntl": "*",
"larastan/larastan": "^3.8",
"laravel/slack-notification-channel": "^3.7",
"league/flysystem-aws-s3-v3": "^3.30.1",
"mockery/mockery": "^1.6.12",
"orchestra/testbench": "^10.8",
"pestphp/pest": "^4.1.5",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
"phpstan/phpstan-phpunit": "^2.0.8",
"rector/rector": "^2.2.8"
},
"suggest": {
"laravel/slack-notification-channel": "Required for sending notifications via Slack"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Spatie\\Backup\\BackupServiceProvider"
]
}
},
"autoload": {
"files": [
"src/Helpers/functions.php"
],
"psr-4": {
"Spatie\\Backup\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"homepage": "https://spatie.be",
"role": "Developer"
}
],
"description": "A Laravel package to backup your application",
"homepage": "https://github.com/spatie/laravel-backup",
"keywords": [
"backup",
"database",
"laravel-backup",
"spatie"
],
"support": {
"issues": "https://github.com/spatie/laravel-backup/issues",
"source": "https://github.com/spatie/laravel-backup/tree/9.4.1"
},
"funding": [
{
"url": "https://github.com/sponsors/spatie",
"type": "github"
},
{
"url": "https://spatie.be/open-source/support-us",
"type": "other"
}
],
"time": "2026-02-15T19:05:20+00:00"
},
{
"name": "spatie/laravel-health",
"version": "1.39.1",
@@ -7384,81 +7006,6 @@
],
"time": "2026-02-21T12:49:54+00:00"
},
{
"name": "spatie/laravel-signal-aware-command",
"version": "2.1.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-signal-aware-command.git",
"reference": "54dcc1efd152bfb3eb0faf56a5fc28569b864b5d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-signal-aware-command/zipball/54dcc1efd152bfb3eb0faf56a5fc28569b864b5d",
"reference": "54dcc1efd152bfb3eb0faf56a5fc28569b864b5d",
"shasum": ""
},
"require": {
"illuminate/contracts": "^11.0|^12.0|^13.0",
"php": "^8.2",
"spatie/laravel-package-tools": "^1.4.3",
"symfony/console": "^7.0|^8.0"
},
"require-dev": {
"brianium/paratest": "^6.2|^7.0",
"ext-pcntl": "*",
"nunomaduro/collision": "^5.3|^6.0|^7.0|^8.0",
"orchestra/testbench": "^9.0|^10.0",
"pestphp/pest-plugin-laravel": "^1.3|^2.0|^3.0",
"phpunit/phpunit": "^9.5|^10|^11",
"spatie/laravel-ray": "^1.17"
},
"type": "library",
"extra": {
"laravel": {
"aliases": {
"Signal": "Spatie\\SignalAwareCommand\\Facades\\Signal"
},
"providers": [
"Spatie\\SignalAwareCommand\\SignalAwareCommandServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Spatie\\SignalAwareCommand\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"role": "Developer"
}
],
"description": "Handle signals in artisan commands",
"homepage": "https://github.com/spatie/laravel-signal-aware-command",
"keywords": [
"laravel",
"laravel-signal-aware-command",
"spatie"
],
"support": {
"issues": "https://github.com/spatie/laravel-signal-aware-command/issues",
"source": "https://github.com/spatie/laravel-signal-aware-command/tree/2.1.2"
},
"funding": [
{
"url": "https://github.com/spatie",
"type": "github"
}
],
"time": "2026-02-22T08:16:31+00:00"
},
{
"name": "spatie/regex",
"version": "3.1.1",
+1 -14
View File
@@ -111,15 +111,6 @@ return [
'url' => '/oh-dear-health-check-results',
],
/*
* You can specify a heartbeat URL for the Horizon check.
* This URL will be pinged if the Horizon check is successful.
* This way you can get notified if Horizon goes down.
*/
'horizon' => [
'heartbeat_url' => env('HORIZON_HEARTBEAT_URL'),
],
/*
* You can specify a heartbeat URL for the Schedule check.
* This URL will be pinged if the Schedule check is successful.
@@ -137,11 +128,7 @@ return [
*/
'theme' => 'light',
/*
* When enabled, completed `HealthQueueJob`s will be displayed
* in Horizon's silenced jobs screen.
*/
'silence_health_queue_job' => true,
'silence_health_queue_job' => false,
/*
* The response code to use for HealthCheckJsonResultsController when a health
-254
View File
@@ -1,254 +0,0 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Horizon Name
|--------------------------------------------------------------------------
|
| This name appears in notifications and in the Horizon UI. Unique names
| can be useful while running multiple instances of Horizon within an
| application, allowing you to identify the Horizon you're viewing.
|
*/
'name' => env('HORIZON_NAME'),
/*
|--------------------------------------------------------------------------
| Horizon Domain
|--------------------------------------------------------------------------
|
| This is the subdomain where Horizon will be accessible from. If this
| setting is null, Horizon will reside under the same domain as the
| application. Otherwise, this value will serve as the subdomain.
|
*/
'domain' => env('HORIZON_DOMAIN'),
/*
|--------------------------------------------------------------------------
| Horizon Path
|--------------------------------------------------------------------------
|
| This is the URI path where Horizon will be accessible from. Feel free
| to change this path to anything you like. Note that the URI will not
| affect the paths of its internal API that aren't exposed to users.
|
*/
'path' => env('HORIZON_PATH', 'horizon'),
/*
|--------------------------------------------------------------------------
| Horizon Redis Connection
|--------------------------------------------------------------------------
|
| This is the name of the Redis connection where Horizon will store the
| meta information required for it to function. It includes the list
| of supervisors, failed jobs, job metrics, and other information.
|
*/
'use' => 'default',
/*
|--------------------------------------------------------------------------
| Horizon Redis Prefix
|--------------------------------------------------------------------------
|
| This prefix will be used when storing all Horizon data in Redis. You
| may modify the prefix when you are running multiple installations
| of Horizon on the same server so that they don't have problems.
|
*/
'prefix' => env(
'HORIZON_PREFIX',
Str::slug(env('APP_NAME', 'laravel'), '_').'_horizon:'
),
/*
|--------------------------------------------------------------------------
| Horizon Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will get attached onto each Horizon route, giving you
| the chance to add your own middleware to this list or change any of
| the existing middleware. Or, you can simply stick with this list.
|
*/
'middleware' => ['web'],
/*
|--------------------------------------------------------------------------
| Queue Wait Time Thresholds
|--------------------------------------------------------------------------
|
| This option allows you to configure when the LongWaitDetected event
| will be fired. Every connection / queue combination may have its
| own, unique threshold (in seconds) before this event is fired.
|
*/
'waits' => [
'redis:default' => 60,
],
/*
|--------------------------------------------------------------------------
| Job Trimming Times
|--------------------------------------------------------------------------
|
| Here you can configure for how long (in minutes) you desire Horizon to
| persist the recent and failed jobs. Typically, recent jobs are kept
| for one hour while all failed jobs are stored for an entire week.
|
*/
'trim' => [
'recent' => 60,
'pending' => 60,
'completed' => 60,
'recent_failed' => 10080,
'failed' => 10080,
'monitored' => 10080,
],
/*
|--------------------------------------------------------------------------
| Silenced Jobs
|--------------------------------------------------------------------------
|
| Silencing a job will instruct Horizon to not place the job in the list
| of completed jobs within the Horizon dashboard. This setting may be
| used to fully remove any noisy jobs from the completed jobs list.
|
*/
'silenced' => [
// App\Jobs\ExampleJob::class,
],
'silenced_tags' => [
// 'notifications',
],
/*
|--------------------------------------------------------------------------
| Metrics
|--------------------------------------------------------------------------
|
| Here you can configure how many snapshots should be kept to display in
| the metrics graph. This will get used in combination with Horizon's
| `horizon:snapshot` schedule to define how long to retain metrics.
|
*/
'metrics' => [
'trim_snapshots' => [
'job' => 24,
'queue' => 24,
],
],
/*
|--------------------------------------------------------------------------
| Fast Termination
|--------------------------------------------------------------------------
|
| When this option is enabled, Horizon's "terminate" command will not
| wait on all of the workers to terminate unless the --wait option
| is provided. Fast termination can shorten deployment delay by
| allowing a new instance of Horizon to start while the last
| instance will continue to terminate each of its workers.
|
*/
'fast_termination' => false,
/*
|--------------------------------------------------------------------------
| Memory Limit (MB)
|--------------------------------------------------------------------------
|
| This value describes the maximum amount of memory the Horizon master
| supervisor may consume before it is terminated and restarted. For
| configuring these limits on your workers, see the next section.
|
*/
'memory_limit' => 64,
/*
|--------------------------------------------------------------------------
| Queue Worker Configuration
|--------------------------------------------------------------------------
|
| Here you may define the queue worker settings used by your application
| in all environments. These supervisors and settings handle all your
| queued jobs and will be provisioned by Horizon during deployment.
|
*/
'defaults' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'auto',
'autoScalingStrategy' => 'time',
'maxProcesses' => 1,
'maxTime' => 0,
'maxJobs' => 0,
'memory' => 128,
'tries' => 1,
'timeout' => 60,
'nice' => 0,
],
],
'environments' => [
'production' => [
'supervisor-1' => [
'maxProcesses' => 10,
'balanceMaxShift' => 1,
'balanceCooldown' => 3,
],
],
'local' => [
'supervisor-1' => [
'maxProcesses' => 3,
],
],
],
/*
|--------------------------------------------------------------------------
| File Watcher Configuration
|--------------------------------------------------------------------------
|
| The following list of directories and files will be watched when using
| the `horizon:listen` command. Whenever any directories or files are
| changed, Horizon will automatically restart to apply all changes.
|
*/
'watch' => [
'app',
'bootstrap',
'config/**/*.php',
'database/**/*.php',
'public/**/*.php',
'resources/**/*.php',
'routes',
'composer.lock',
'composer.json',
'.env',
],
];
+14 -3
View File
@@ -73,15 +73,26 @@ services:
timeout: 5s
retries: 12
horizon:
worker:
<<: *app-service
container_name: daily-meal-api-horizon
container_name: daily-meal-api-worker
healthcheck:
disable: true
depends_on:
app:
condition: service_healthy
command: ["php", "artisan", "horizon"]
command:
[
"php",
"artisan",
"queue:work",
"redis",
"--sleep=3",
"--tries=1",
"--timeout=60",
"--memory=128",
"--max-time=3600",
]
scheduler:
<<: *app-service
+2 -2
View File
@@ -20,7 +20,7 @@ if [ "$confirmation" != "$confirmation_phrase" ]; then
exit 1
fi
docker compose -f "$compose_file" stop app horizon scheduler db-backup
docker compose -f "$compose_file" stop app worker scheduler db-backup
if ! RESTORE_CONFIRM="$confirmation_phrase" docker compose \
-f "$compose_file" \
@@ -32,6 +32,6 @@ then
exit 1
fi
docker compose -f "$compose_file" up -d app horizon scheduler db-backup
docker compose -f "$compose_file" up -d app worker scheduler db-backup
echo "Application restarted after database restoration."
+1 -1
View File
@@ -3,7 +3,7 @@ set -eu
cd /app
# Allow Docker Compose services such as Horizon and the scheduler to override
# Allow Docker Compose services such as the queue worker and scheduler to override
# the default FrankenPHP process with their own command.
if [ "$#" -gt 0 ]; then
exec "$@"
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'تحميل',
'delete' => 'حذف',
],
'fields' => [
'path' => 'المسار',
'disk' => 'قرص التخزين',
'date' => 'التاريخ',
'size' => 'الحجم',
],
'filters' => [
'disk' => 'قرص التخزين',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'الإسم',
'disk' => 'قرص التخزين',
'healthy' => 'الحالة',
'amount' => 'السعة',
'newest' => 'الأحدث',
'used_storage' => 'السعة المستخدمة',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'إنشاء نسخة إحتياطية',
],
'heading' => 'النسخ الإحتياطي',
'messages' => [
'backup_success' => 'إنشاء نسخة إحتياطية في الخلفية.',
'backup_delete_success' => 'تم حذف النسخة الإحتياطية بنجاح.',
],
'modal' => [
'buttons' => [
'only_db' => 'قاعدة البيانات',
'only_files' => 'الملفات',
'db_and_files' => 'الملفات والقاعدة',
],
'label' => 'الرجاء الاختيار لإنشاء نسخة إحتياطية',
],
'navigation' => [
'group' => 'إعدادات',
'label' => 'النسخ الإحتياطي',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Stáhnout',
'delete' => 'Smazat',
],
'fields' => [
'path' => 'Cesta',
'disk' => 'Disk',
'date' => 'Datum',
'size' => 'Velikost',
],
'filters' => [
'disk' => 'Disk',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Název',
'disk' => 'Disk',
'healthy' => 'Stav zdraví',
'amount' => 'Počet',
'newest' => 'Nejnovější',
'used_storage' => 'Využité místo',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Vytvořit zálohu',
],
'heading' => 'Zálohy',
'messages' => [
'backup_success' => 'Nová záloha byla úspěšně vytvořena.',
'backup_delete_success' => '"Záloha byla úspěšně odstraněna.',
],
'modal' => [
'buttons' => [
'only_db' => 'Pouze databáze',
'only_files' => 'Pouze soubory',
'db_and_files' => 'Databáze a soubory',
],
'label' => 'Vyberte prosím jednu z možností',
],
'navigation' => [
'group' => 'Nastavení',
'label' => 'Zálohy',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Download',
'delete' => 'Löschen',
],
'fields' => [
'path' => 'Pfad',
'disk' => 'Speicher',
'date' => 'Datum',
'size' => 'Größe',
],
'filters' => [
'disk' => 'Speicher',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Name',
'disk' => 'Speicher',
'healthy' => 'Gesund',
'amount' => 'Anzahl',
'newest' => 'Neuestes',
'used_storage' => 'Verwendeter Speicher',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Sicherung erstellen',
],
'heading' => 'Backups',
'messages' => [
'backup_success' => 'Erstelle eine neue Sicherung im Hintergrund.',
'backup_delete_success' => 'Lösche die Sicherung im Hintergrund.',
],
'modal' => [
'buttons' => [
'only_db' => 'Nur DB',
'only_files' => 'Nur Dateien',
'db_and_files' => 'DB & Dateien',
],
'label' => 'Bitte eine Option auswählen',
],
'navigation' => [
'group' => 'Einstellungen',
'label' => 'Sicherungen',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Download',
'delete' => 'Delete',
],
'fields' => [
'path' => 'Path',
'disk' => 'Disk',
'date' => 'Date',
'size' => 'Size',
],
'filters' => [
'disk' => 'Disk',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Name',
'disk' => 'Disk',
'healthy' => 'Healthy',
'amount' => 'Amount',
'newest' => 'Newest',
'used_storage' => 'Used Storage',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Create Backup',
],
'heading' => 'Backups',
'messages' => [
'backup_success' => 'Creating a new backup in background.',
'backup_delete_success' => 'Deleting this backup in background.',
],
'modal' => [
'buttons' => [
'only_db' => 'Only DB',
'only_files' => 'Only Files',
'db_and_files' => 'DB & Files',
],
'label' => 'Please choose an option',
],
'navigation' => [
'group' => 'Settings',
'label' => 'Backups',
],
],
],
];
-69
View File
@@ -1,69 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Descargar',
'delete' => 'Eliminar',
],
'fields' => [
'path' => 'Ruta',
'disk' => 'Disco',
'date' => 'Fecha',
'size' => 'Tamaño',
],
'filters' => [
'disk' => 'Disco',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Nombre',
'disk' => 'Disco',
'healthy' => 'Estado',
'amount' => 'Cantidad',
'newest' => 'Más reciente',
'used_storage' => 'Espacio utilizado',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Hacer respaldo',
],
'heading' => 'Respaldos',
'messages' => [
'backup_success' => 'Creando un nuevo respaldo en segundo plano.',
],
'modal' => [
'buttons' => [
'only_db' => 'Solo la base de datos',
'only_files' => 'Solo los archivos',
'db_and_files' => 'Base de datos y archivos',
],
'label' => 'Elija una opción',
],
'navigation' => [
'group' => 'Configuraciones',
'label' => 'Respaldos',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'دانلود',
'delete' => 'حذف',
],
'fields' => [
'path' => 'مسیر',
'disk' => 'دیسک',
'date' => 'تاریخ',
'size' => 'حجم',
],
'filters' => [
'disk' => 'دیسک',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'نام',
'disk' => 'دیسک',
'healthy' => 'سالم',
'amount' => 'تعداد',
'newest' => 'جدیدترین',
'used_storage' => 'فضای استفاده شده',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'ایجاد پشتیبان',
],
'heading' => 'پشتیبان‌ها',
'messages' => [
'backup_success' => 'در حال ایجاد پشتیبان در پس‌زمینه.',
'backup_delete_success' => 'در حال حذف این پشتیبان در پس‌زمینه.',
],
'modal' => [
'buttons' => [
'only_db' => 'فقط دیتابیس',
'only_files' => 'فقط فایل‌ها',
'db_and_files' => 'فایل‌ها و دیتابیس',
],
'label' => 'یک گزینه را انتخاب کنید',
],
'navigation' => [
'group' => 'تنظیمات',
'label' => 'پشتیبان‌ها',
],
],
],
];
-69
View File
@@ -1,69 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Télécharger',
'delete' => 'Supprimer',
],
'fields' => [
'path' => 'Chemin d\'accès',
'disk' => 'Disque',
'date' => 'Date',
'size' => 'Taille',
],
'filters' => [
'disk' => 'Disque',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Nom',
'disk' => 'Disque',
'healthy' => 'Statut',
'amount' => 'Montant',
'newest' => 'Plus récent',
'used_storage' => 'Stockage utilisé',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Créer une sauvegarde',
],
'heading' => 'Sauvegardes',
'messages' => [
'backup_success' => 'Création d\'une nouvelle sauvegarde en arrière-plan.',
],
'modal' => [
'buttons' => [
'only_db' => 'Seulement la base de données',
'only_files' => 'Seulement les fichiers',
'db_and_files' => 'Base de données & Fichiers',
],
'label' => 'Veuillez choisir une option',
],
'navigation' => [
'group' => 'Paramètres',
'label' => 'Sauvegardes',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Unduh',
'delete' => 'Hapus',
],
'fields' => [
'path' => 'Lokasi',
'disk' => 'Penyimpanan',
'date' => 'Tanggal',
'size' => 'Ukuran',
],
'filters' => [
'disk' => 'Penyimpanan',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Nama',
'disk' => 'Penyimpanan',
'healthy' => 'Sehat',
'amount' => 'Jumlah',
'newest' => 'Terbaru',
'used_storage' => 'Penyimpanan Terpakai',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Buat Cadangan',
],
'heading' => 'Cadangan',
'messages' => [
'backup_success' => 'Membuat cadangan baru di latar belakang.',
'backup_delete_success' => 'Menghapus cadangan ini di latar belakang.',
],
'modal' => [
'buttons' => [
'only_db' => 'Hanya DB',
'only_files' => 'Hanya Berkas',
'db_and_files' => 'DB & Berkas',
],
'label' => 'Silakan pilih salah satu opsi',
],
'navigation' => [
'group' => 'Pengaturan',
'label' => 'Cadangan',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Download',
'delete' => 'Cancella',
],
'fields' => [
'path' => 'Percorso',
'disk' => 'Disco',
'date' => 'Data',
'size' => 'Dimensione',
],
'filters' => [
'disk' => 'Disco',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Nome',
'disk' => 'Disco',
'healthy' => 'Salute',
'amount' => 'Quantità',
'newest' => 'Più recente',
'used_storage' => 'Storage Utilizzato',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Crea Backup',
],
'heading' => 'Backup',
'messages' => [
'backup_success' => 'Creazione di un nuovo backup in background.',
'backup_delete_success' => 'Eliminazione di questo backup in background.',
],
'modal' => [
'buttons' => [
'only_db' => 'Solo DB',
'only_files' => 'Solo File',
'db_and_files' => 'DB & File',
],
'label' => "Scegli un'opzione",
],
'navigation' => [
'group' => 'Impostazioni',
'label' => 'Backup',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => '다운로드',
'delete' => '삭제',
],
'fields' => [
'path' => '경로',
'disk' => '디스크',
'date' => '날짜',
'size' => '크기',
],
'filters' => [
'disk' => '디스크',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => '이름',
'disk' => '디스크',
'healthy' => '상태',
'amount' => '개수',
'newest' => '최신',
'used_storage' => '사용된 저장소',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => '백업 생성',
],
'heading' => '백업',
'messages' => [
'backup_success' => '새 백업을 백그라운드에서 생성하는 중입니다.',
'backup_delete_success' => '이 백업을 백그라운드에서 삭제하는 중입니다.',
],
'modal' => [
'buttons' => [
'only_db' => '데이터베이스만',
'only_files' => '파일만',
'db_and_files' => '데이터베이스 & 파일',
],
'label' => '옵션을 선택해 주세요',
],
'navigation' => [
'group' => '설정',
'label' => '백업',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Download',
'delete' => 'Verwijderen',
],
'fields' => [
'path' => 'Pad',
'disk' => 'Disk',
'date' => 'Datum',
'size' => 'Grootte',
],
'filters' => [
'disk' => 'Disk',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Naam',
'disk' => 'Disk',
'healthy' => 'Gezond',
'amount' => 'Aantal',
'newest' => 'Laatste',
'used_storage' => 'Gebruikte opslag',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Backup maken',
],
'heading' => 'Backups',
'messages' => [
'backup_success' => 'Backup maken in de achtergrond.',
'backup_delete_success' => 'Backup verwijderen in de achtergrond.',
],
'modal' => [
'buttons' => [
'only_db' => 'Alleen DB',
'only_files' => 'Alleen bestanden',
'db_and_files' => 'DB en bestanden',
],
'label' => 'Kies een optie',
],
'navigation' => [
'group' => 'Instellingen',
'label' => 'Backups',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Download',
'delete' => 'Eliminar',
],
'fields' => [
'path' => 'Caminho',
'disk' => 'Disco',
'date' => 'Data',
'size' => 'Tamanho',
],
'filters' => [
'disk' => 'Disco',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Nome',
'disk' => 'Disco',
'healthy' => 'Estado',
'amount' => 'Quantidade',
'newest' => 'Recente',
'used_storage' => 'Espaço Utilizado',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Criar Cópia de Segurança',
],
'heading' => 'Cópias de Segurança',
'messages' => [
'backup_success' => 'A criar uma nova cópia de segurança em segundo plano.',
'backup_delete_success' => 'A eliminar esta cópia de segurança em segundo plano.',
],
'modal' => [
'buttons' => [
'only_db' => 'Apenas BD',
'only_files' => 'Apenas Ficheiros',
'db_and_files' => 'BD & Ficheiros',
],
'label' => 'Por favor, seleccione uma opção',
],
'navigation' => [
'group' => 'Definições',
'label' => 'Cópias de Segurança',
],
],
],
];
-69
View File
@@ -1,69 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Download',
'delete' => 'Excluir',
],
'fields' => [
'path' => 'Caminho',
'disk' => 'Disco',
'date' => 'Data',
'size' => 'Tamanho',
],
'filters' => [
'disk' => 'Disco',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Nome',
'disk' => 'Disco',
'healthy' => 'Saúde',
'amount' => 'Quant.',
'newest' => 'Recente',
'used_storage' => 'Espaço utilizado',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Criar Backup',
],
'heading' => 'Backups',
'messages' => [
'backup_success' => 'Criando um novo em segundo plano.',
],
'modal' => [
'buttons' => [
'only_db' => 'Apenas DB',
'only_files' => 'Apenas arquivos',
'db_and_files' => 'DB & Arquivos',
],
'label' => 'Por favor, escolha uma opção',
],
'navigation' => [
'group' => 'Configurações',
'label' => 'Backups',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Descarregar',
'delete' => 'Eliminar',
],
'fields' => [
'path' => 'Caminho',
'disk' => 'Disco',
'date' => 'Data',
'size' => 'Tamanho',
],
'filters' => [
'disk' => 'Disco',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Nome',
'disk' => 'Disco',
'healthy' => 'Estado',
'amount' => 'Quantidade',
'newest' => 'Recente',
'used_storage' => 'Espaço Utilizado',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Criar Cópia de Segurança',
],
'heading' => 'Cópias de Segurança',
'messages' => [
'backup_success' => 'A criar uma nova cópia de segurança em segundo plano.',
'backup_delete_success' => 'A eliminar esta cópia de segurança em segundo plano.',
],
'modal' => [
'buttons' => [
'only_db' => 'Apenas BD',
'only_files' => 'Apenas Ficheiros',
'db_and_files' => 'BD & Ficheiros',
],
'label' => 'Por favor, seleccione uma opção',
],
'navigation' => [
'group' => 'Definições',
'label' => 'Cópias de Segurança',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Скачать',
'delete' => 'Удалить',
],
'fields' => [
'path' => 'Путь',
'disk' => 'Диск',
'date' => 'Дата',
'size' => 'Размер',
],
'filters' => [
'disk' => 'Диск',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Имя',
'disk' => 'Диск',
'healthy' => 'Исправен',
'amount' => 'Количество',
'newest' => 'Последний',
'used_storage' => 'Объём в хранилище',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Создать резервную копию',
],
'heading' => 'Резервные копии',
'messages' => [
'backup_success' => 'Создание новой резервной копии в фоновом режиме.',
'backup_delete_success' => 'Удаление этой резервной копии в фоновом режиме.',
],
'modal' => [
'buttons' => [
'only_db' => 'Только база',
'only_files' => 'Только файлы',
'db_and_files' => 'База и файлы',
],
'label' => 'Пожалуйста, выберите опцию',
],
'navigation' => [
'group' => 'Настройки',
'label' => 'Резервные копии',
],
],
],
];
-69
View File
@@ -1,69 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'İndir',
'delete' => 'Sil',
],
'fields' => [
'path' => 'Yol',
'disk' => 'Disk',
'date' => 'Tarih',
'size' => 'Boyut',
],
'filters' => [
'disk' => 'Disk',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Ad',
'disk' => 'Disk',
'healthy' => 'Sağlık',
'amount' => 'Adet',
'newest' => 'Zaman',
'used_storage' => 'Kullanılan Depolama',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Yedek Oluştur',
],
'heading' => 'Yedekler',
'messages' => [
'backup_success' => 'Arka planda yeni bir yedek oluşturuluyor.',
],
'modal' => [
'buttons' => [
'only_db' => 'Sadece Veri Tabanı',
'only_files' => 'Sadece Dosyalar',
'db_and_files' => 'Veri Tabanı & Dosyalar',
],
'label' => 'Bir seçenek seçin',
],
'navigation' => [
'group' => 'Ayarlar',
'label' => 'Yedekler',
],
],
],
];
-69
View File
@@ -1,69 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => 'Tải xuống',
'delete' => 'Xóa',
],
'fields' => [
'path' => 'Đường dẫn',
'disk' => 'Ổ đĩa',
'date' => 'Ngày',
'size' => 'Kích thước',
],
'filters' => [
'disk' => 'Ổ đĩa',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => 'Tên',
'disk' => 'Ổ đĩa',
'healthy' => 'Sức khỏe',
'amount' => 'Số lượng',
'newest' => 'Mới nhất',
'used_storage' => 'Bộ nhớ đã dùng',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => 'Tạo bản sao lưu',
],
'heading' => 'Sao lưu',
'messages' => [
'backup_success' => 'Đang chạy tạo bản sao lưu dưới nền.',
],
'modal' => [
'buttons' => [
'only_db' => 'Chỉ DB',
'only_files' => 'Chỉ Tệp tin',
'db_and_files' => 'DB & Tệp tin',
],
'label' => 'Vui lòng chọn một tùy chọn',
],
'navigation' => [
'group' => 'Cài đặt',
'label' => 'Sao lưu',
],
],
],
];
-70
View File
@@ -1,70 +0,0 @@
<?php
return [
'components' => [
'backup_destination_list' => [
'table' => [
'actions' => [
'download' => '下载',
'delete' => '删除',
],
'fields' => [
'path' => '路径',
'disk' => '磁盘',
'date' => '日期',
'size' => '大小',
],
'filters' => [
'disk' => '磁盘',
],
],
],
'backup_destination_status_list' => [
'table' => [
'fields' => [
'name' => '文件名',
'disk' => '所属磁盘',
'healthy' => '健康状况',
'amount' => '大小',
'newest' => '最新备份',
'used_storage' => '占用空间',
],
],
],
],
'pages' => [
'backups' => [
'actions' => [
'create_backup' => '创建备份',
],
'heading' => '数据备份',
'messages' => [
'backup_success' => '在后台创建新备份',
'backup_delete_success' => '在后台删除此备份',
],
'modal' => [
'buttons' => [
'only_db' => '仅备份数据库',
'only_files' => '仅备份文件',
'db_and_files' => '备份数据库和文件',
],
'label' => '请选择一个选项',
],
'navigation' => [
'group' => '系统设置',
'label' => '数据备份',
],
],
],
];
@@ -1 +0,0 @@
.fsb-flex{display:flex}.fsb-flex-col{flex-direction:column}.fsb-justify-between{justify-content:space-between}.fsb-mb-10{margin-bottom:2.5rem}.fsb-gap-x-2{column-gap:.5rem}.fsb-gap-y-8{row-gap:2rem}.fsb-w-full{width:100%}
-1
View File
@@ -8,7 +8,6 @@ Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');
Schedule::command('horizon:snapshot')->everyFiveMinutes();
Schedule::command('sanctum:prune-expired --hours=24')
->daily()
->withoutOverlapping()
+3 -22
View File
@@ -18,33 +18,14 @@ it('allows only administrators through production tooling gates', function (): v
'role' => UserRole::USER,
]);
expect(Gate::forUser($admin)->allows('viewHorizon'))->toBeTrue()
->and(Gate::forUser($admin)->allows('viewApiDocs'))->toBeTrue()
->and(Gate::forUser($moderator)->allows('viewHorizon'))->toBeFalse()
expect(Gate::forUser($admin)->allows('viewApiDocs'))->toBeTrue()
->and(Gate::forUser($moderator)->allows('viewApiDocs'))->toBeFalse()
->and(Gate::forUser($user)->allows('viewHorizon'))->toBeFalse()
->and(Gate::forUser($user)->allows('viewApiDocs'))->toBeFalse()
->and(Gate::allows('viewHorizon'))->toBeFalse()
->and(Gate::allows('viewApiDocs'))->toBeFalse();
});
it('protects the horizon dashboard outside local environments', function (): void {
$admin = User::factory()->create([
'role' => UserRole::ADMIN,
]);
$moderator = User::factory()->create([
'role' => UserRole::MODERATOR,
]);
$this->get('/horizon')->assertForbidden();
$this->actingAs($moderator)
->get('/horizon')
->assertForbidden();
$this->actingAs($admin)
->get('/horizon')
->assertSuccessful();
it('does not expose a queue dashboard', function (): void {
$this->get('/horizon')->assertNotFound();
});
it('protects the scramble documentation outside local environments', function (): void {