Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
HPWebdeveloper committed Feb 4, 2024
1 parent 3f22e1d commit 9230c0b
Showing 1 changed file with 93 additions and 7 deletions.
100 changes: 93 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@

## Introduction:

If you're running an application with a queue driver other than Redis, which is exclusively supported by [Laravel Horizon](https://github.com/laravel/horizon), you might be missing out on the elegant features that Horizon offers. Laravel Horizon is known for its elegance and a wide range of implemented features. One of its standout features is its ability to present detailed information about failed job payloads and automatically load new failed jobs.
If you're running an application with a queue driver other than Redis or dispatch a job to [a particular connection](https://laravel.com/docs/10.x/queues#dispatching-to-a-particular-connection) other than Redis, which is exclusively supported by [Laravel Horizon](https://laravel.com/docs/10.x/horizon), you might be missing out on the elegant features that Horizon offers. Laravel Horizon is known for its elegance and a wide range of implemented features. One of its standout features is its ability to present detailed information about failed job payloads and automatically load new failed jobs.

In your specific application, if you've been longing for a similar Horizon-like UI to monitor failed_jobs, the Laravel-Failed-Jobs package has got you covered. This package simplifies the process of visualizing failed jobs.
In your specific application, if you've been longing for a similar Horizon-like UI to monitor failed jobs, the Laravel-Failed-Jobs package has got you covered. This package streamlines the visualization of failed jobs, eliminating the need to connect to a database client locally and search through `failed_jobs` records to identify the cause of a job's failure.

![Screenshot 2024-02-01 at 7 55 42 PM](https://github.com/HPWebdeveloper/laravel-failed-jobs/assets/16323354/2ec7ebad-1ad9-4927-8bff-5ce4002e1a7c)

Expand All @@ -19,35 +19,121 @@ In your specific application, if you've been longing for a similar Horizon-like
- Seamless Integration: You can seamlessly integrate the Laravel-Failed-Jobs package into your project, even if you are already using Laravel Horizon. There's no conflict between the two.
- While Horizon primarily reads and writes data to Redis, Laravel-Failed-Jobs retrieves data from the failed_jobs table.
- With Laravel-Failed-Jobs, you can enjoy the convenience of monitoring failed jobs in your application, regardless of your queue driver. This package brings the power and elegance of Laravel Horizon's failed job handling to your specific setup.

- Remote Connection Mode: This package offers two operational modes, each with its distinct setup.
The Basic mode setup and dashboard authentication mirror that of Laravel Horizon.
Remote mode is particularly beneficial for applications functioning solely as API service providers,
where there is no user model or admin user.
In such scenarios, the Gate definition within `FailedJobsServiceProvider`,
which typically restricts access the Laravel-Failed-Jobs dashboard in non-local environments,
is not applicable.
Remote mode enables access to the main application from a separate Laravel application,
hosted on a distinct URL address, in both local and production environments.

As you correctly understood, it's important to note that the Laravel-Failed-Jobs package focuses solely on enhancing the visualization of failed jobs and does not offer managing of faild jobs or the comprehensive set of robust features found in Laravel Horizon.

## I - Installation (basice mode):
If you have already installed Laravel Horizon, you can still install Laravel-Failed-Jobs without any conflict.
Also it follows the same installation process as Laravel Horizon.

## Installation:
You may install Laravel-Failed-Jobs package into your project using the Composer package manager:

```bash
composer require hpwebdeveloper/laravel-failed-jobs
```

After installing Laravel-Failed-Jobs, publish its assets using the failedjobs:install Artisan command:

After installing Laravel-Failed-Jobs, publish the assets using the `failedjobs:install` Artisan command.
```bash
php artisan failedjobs:install
```
This command will automatically publish the `failedjobs` config file, `FailedJobsServiceProvider` service provider and also the resource view files into the `public/vendor/failedjobs` directory.

To upgrade the package, you need to use the following command after upgrading via composer:

```bash
php artisan failedjobs:publish
```

You may need to modify the `FailedJobsServiceProvider` to determine
who can access the dashboard in production environment.


## Dashboard

The Laravel-Failed-Jobs dashboard is accessible through the `/failedjobs` route by default. However, if you wish to define a new path, you can do so by setting the `FAILEDJOBS_PATH` variable in the `.env` file.

## Dashboard Authorization

Find `app/Providers/FailedJobsServiceProvider.php` and then follow the [same document of Horizon](https://laravel.com/docs/10.x/horizon#dashboard-authorization) to secure the dashboard in production environment.
Find `app/Providers/FailedJobsServiceProvider.php` class which applies Laravel `Gate` to determine who can access FailedJobs in non-local environments. and then follow the [same document of Horizon](https://laravel.com/docs/10.x/horizon#dashboard-authorization) to secure the dashboard in production environment.

![Screenshot 2024-02-01 at 7 54 17 PM](https://github.com/HPWebdeveloper/laravel-failed-jobs/assets/16323354/05abc4ab-ede6-4e90-b713-bc540015435d)

![Screenshot 2024-02-01 at 7 55 27 PM](https://github.com/HPWebdeveloper/laravel-failed-jobs/assets/16323354/30e1dd9e-316b-4d8e-80a4-ef7df195bbcd)

## II - Installation (remote mode):
Remote mode enables access to the main application from a separate Laravel application,
hosted on a distinct URL address, in both local and production environments.

### Prepare package in both applications
To use this package in remote mode, you need to install the package in both different applications.

You may install the Laravel-Failed-Jobs package into your project using the Composer package manager:

```bash
composer require hpwebdeveloper/laravel-failed-jobs:dev-feature/remote-connect
```
Then install the assets using the `failedjobs:install` Artisan command.
```bash
php artisan failedjobs:install
```

### Prepare the environments variables

In this mode you need to propertly configure the following environment variables in both applications:

```bash
'axios_base_url' => env('AXIOS_BASE_URL', ''),
'server_access_token' => env('FAILEDJOBS_SERVER_ACCESS_TOKEN'),
'dashboard_access_token' => env('FAILEDJOBS_DASHBOARD_ACCESS_TOKEN'),
```

`axios_base_url` is the base URL of the main application which you have to set in the local/remote application.
Setting this variable is mandatory in remote mode.

`server_access_token` is the access token to access the main application from the remote application.
It is mandatory to set this variable in the main application `.env` file.
It is mandatory to set 'dashboard_access_token' variable in the
remote application equal to the value of the `server_access_token` in the main application.

### Secure the endpoint
As in the `failedjobs` config file defined, the dashboard is accessible through the `/failedjobs` route
by default.
But it is recommended to change it when using the package in the remote mode.

It is simply possible by setting the `FAILEDJOBS_PATH` variable in the `.env`
file of both applications with a hash value and then define that value as a path in the `cors` config file of the main application.

Modifying the `cors` config file in the main application is required because in the remote mode we are
dealing with two different applications served in two different URLs. Laravel automatically respond to Cross-Origin Resource Sharing (CORS)
OPTIONS HTTP requests with values that you configure in the `cors` config file. Read more about [CORS](https://laravel.com/docs/10.x/routing#cors).

Hence in summary
- Set the `FAILEDJOBS_PATH` variable in the `.env` file of the **main** application with a hash value like `failedjobs99999999`
- Set the `FAILEDJOBS_PATH` variable in the `.env` file of the **remote** application with a hash value like `failedjobs99999999`
- Open the `cors.php` config file of the main application and add modify the following code:
```php
// before
'paths' => ['api/*', 'sanctum/csrf-cookie'],
// after
'paths' => ['failedjobs99999999/*', 'api/*', 'sanctum/csrf-cookie'],
```

Then access the dashboard using the following URL: `http://your-local-application.test/failedjobs99999999`.

As your main application in the production is configure like `APP_ENV=production` the dashboard in not accessible in the production environment.
While you can access the dashboard in the local environment. through the URL: `http://your-local-application.test/failedjobs99999999`.

Of course you can access the dashboard in the main application
if you set the `axios_base_url` variable in the main application `.env` file as well.

## Licensing

Expand Down

0 comments on commit 9230c0b

Please sign in to comment.