This package allows you to easily track your laravel jobs!

Overview

Trackable Jobs For Laravel

Trackable jobs for laravel

Latest Version on Packagist Total Downloads MIT Licensed StyleCI

This package allows you to track your laravel jobs! Using this package, you can easily persist the output and the status of any job in your application.

Installation

To install this package, use composer:

composer require mateusjunges/laravel-trackable-jobs

You can publish the configuration file with this command:

php artisan vendor:publish --tag=trackable-jobs-config

Run php artisan migrate to migrate the table needed by this package and now you are good to go!

Usage

Tracking jobs

To start tracking your jobs, you just need to use the Junges\TrackableJobs\Traits\Trackable trait in the job you want to track. For example, let's say you want to track the status of ProcessPodcastJob, just add the Trackable trait into your job:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Junges\TrackableJobs\Traits\Trackable;

class ProcessPodcastJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Trackable;

    public function handle()
    {
        //
    }
}

This trait provides 3 methods to your job: __construct, failed and middleware. It also adds a model public property to the job class. If you want to override any of the methods, you must copy and paste (because you can't use parent for traits) the content of each one inside your class, so this package still work as intended.

For example: if you need to change the constructor of your job, you can use the Junges\TrackableJobs\Traits\Trackable and alias the __construct with some other name, for example:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Junges\TrackableJobs\Traits\Trackable;
use App\Models\Podcast;
use Junges\TrackableJobs\Models\TrackedJob;

class ProcessPodcastJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Trackable {
        __construct as __baseConstruct;
    }

    public function __construct(Podcast $podcast)
    {
         $this->__baseConstruct($podcast);
         
         // Add your code here.
    }

    public function handle()
    {
        //
    }
}

It can be done with any method you want to change.

This package will store the last status of your job, which can be queued, started, failed or finished. Also, it stores the started_at and finished_at timestamps for each tracked job.

To use it, you just need to pass any model to your Job constructor:

dispatch(new ProcessPodcastJob($podcast));

Once this trait is added to your job, your job progress will be persisted to the database. You can configure the table name by publishing this package configuration file:

php artisan vendor:publish --tag=trackable-jobs-config

This command will create a new config file in config/trackable-jobs.php, with this content:

<?php

return [
    /*
     | The table where the tracked jobs will be stored.
     | By default, it's called 'tracked_jobs'.
     */
    'tables' => [
        'tracked_jobs' => 'tracked_jobs',
    ],
    'using_uuid' => false,
];

Tracking job chains

Laravel supports job chaining out of the box:

Bus::dispatchChain([
    new OptimizePodcast($podcast),
    new CompressPodcast($podcast),
    new ReleasePodcast($podcast)
])->dispatch();

It's a nice, fluent way of saying "Run this jobs sequentially, one after the previous one is complete.".

If you have a task which takes some steps to be completed, you can track the job chain used to do that and know the status for each job. If you are releasing a new podcast, for example, and it has to be optimized, compressed and released, you can track this steps by adding a steps relationship to your Podcast model:

public function steps()
{
    return $this->morphMany(Junges\TrackableJobs\Models\TrackedJob::class, 'trackable');
}

Now, you can have the status of each job that should be processed to release your podcast:

$steps = Podcast::find($id)->steps()->get();

Persist the output of a job

To persist the output of your job to the database, you only need to return something from your job. By default, if your job throws an exception, the output stored in the database will be the message of the given exception. If your job finishes successfully, you don't have to return anything, but you can store it's output by just returning something after the job is done. For example:

public function handle()
{
    //Do your stuff here
    
    return "Job finished successfully";
}

The string Job finished successfully will be stored as the output of this job.

Extending the TrackedJob model.

If, for some reason, you need to use your own custom model to the TrackedJob table, you can just create a new model and extend the existing Junges\TrackableJobs\Models\TrackedJob::class. Then, you need to bind the Junges\TrackableJobs\Contracts\TrackableJobContract to the new model, within your AppServiceProvider:

<?php

namespace App\Providers;

use App\Models\YourCustomModel;
use Illuminate\Support\ServiceProvider;
use Junges\TrackableJobs\Contracts\TrackableJobContract;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(TrackableJobContract::class, YourCustomModel::class);
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

Using UUIDs

To use UUIDs with this package, the only additional configuration you need to do is change the using_uuid to true, in config/trackable-jobs.php. Then it will automatically start using UUID's to store the tracked jobs and, if the model related to the tracked job also uses UUID, it will be stored to the database in the trackable_id field.

Tests

Run composer test to test this package.

Contributing

Thank you for consider contributing for the Laravel Trackable Jobs package! The contribution guide can be found here.

Changelog

Please see the changelog for more information about the changes on this package.

Credits

License

The laravel trackable jobs is open-sourced software licensed under the terms of MIT License. Please see the license file for more information.

Comments
  • Output is 1 regardless of return value when queue connection is database

    Output is 1 regardless of return value when queue connection is database

    I am using this on chained jobs and it works perfectly. However, there is an issue with return output value

    When QUEUE_CONNECTION=sync and handle returns 'test' Then output is correct in database as 'test'

    When QUEUE_CONNECTION=database and handle returns 'test' Then output is set to 1 in database (only the last chained job returns 'test')

    opened by rxng 7
  • [FEATURE REQUEST] Allow to dispatch jobs without tracking

    [FEATURE REQUEST] Allow to dispatch jobs without tracking

    hi, i like the idea of this package. but when dealing with 100k of jobs, using it all the time is not that ideal. so i would like to ask if there is a way to tell the job by parameter if it´s trackable or not. in that case, i think, this package could be a great helper when it comes to debugging.

    thanks.

    enhancement 
    opened by michabbb 6
  • Jobs are not getting retried, using Laravel Horizon

    Jobs are not getting retried, using Laravel Horizon

    Hello,

    I'm running into an issue where Horizon is marking a job as failed without attempting any retries.

    Just a simple job for debugging purpose. If I add the Trackable trait, the job goes into failed jobs without any retry attempt. Without the Trackable trait it works as expected.

    class AssignIpaddress implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Trackable;
    
       public $tries = 10;
       public $backoff = [3, 5, 10]; 
    
        public function handle()
        {
    
            $ip = Ip::inRandomOrder()->first();
            logger("Domain {$this->model->name} was assigned to IP: #{$ip->id} {$ip->ipaddress}");
    
            throw new \Exception('OHH A RANDOM ERROR.');
    
            // Safe output to tracked_jobs table
            return "Domain {$this->model->name} was assigned to IP: #{$ip->id} {$ip->ipaddress}";
        }
    }
    
    
    bug 
    opened by DimaVIII 5
  • Potential to add prunable to base Model

    Potential to add prunable to base Model

    https://laravel.com/docs/8.x/eloquent#pruning-models

    Laravel supports auto pruning as of laravel 8, could this be added to the config? Otherwise the DB continues to grow

    enhancement 
    opened by bretto36 3
  • exception on using the trait

    exception on using the trait

    i try to use the trait on my job.

    this is my job class:

    class LogJob implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Trackable;
    
    	public string $info;
    
        public function __construct($info)
        {
             $this->info = $info;
        }
    
        public function handle()
        {
            \Log::info("Logged from job : ". $this->info);
    		return "LogJob Complete Successfully";
        }
    
    
    }
    

    but when i dispatch the job, i get the following error:

    Typed property App\Jobs\LogJob::$trackedJob must not be accessed before initialization {"exception":"[object] (Error(code: 0): Typed property App\Jobs\LogJob::$trackedJob must not be accessed before initialization at \vendor\mateusjunges\laravel-trackable-jobs\src\Traits\Trackable.php:36)

    the job class works just fine without the trait included and im using database for queue driver

    opened by AliBayat 3
  • Use Parent method trait

    Use Parent method trait

    Hi

    Instead of copy/paste constructor from Trackable trait like this ( copy from readme )

     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Trackable;
    
        public function __construct(Podcast $podcast)
        {
             $this->model = $podcast;
             
             $this->trackedJob = TrackedJob::create([
                'trackable_id'   => $this->model->id,
                'trackable_type' => get_class($this->model),
                'name'           => class_basename(static::class),
             ]);
             
             // Add your code here.
        }
    

    Thy you can use alias of contructor?

    Example

    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        use Trackable {
            __construct as constructTrackableTrait;
        }
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct(Model $model)
        {
            $this->constructTrackableTrait($model);
            //doing stuff
        }
    
    opened by Wit3 3
  • [v1.5.x] Allow to dispatch jobs without tracking

    [v1.5.x] Allow to dispatch jobs without tracking

    This PR introduces a new method called dispatchWithoutTracking, which, as the name suggests, will dispatch the job without tracking it.

    You can use it like this:

    MyJob::dispatchWithoutTracking();
    
    MyJob::dispatchWithoutTracking(User::first());
    

    This closes #8

    opened by mateusjunges 2
  • Wrong way to get Model Class

    Wrong way to get Model Class

    In Trackable.php file, line 22 there is:

    $this->trackedJob = TrackedJob::create([
                'trackable_id' => $this->model->id ?? $this->model->uuid,
                'trackable_type' => get_class($this->model),
                'name' => class_basename(static::class),
            ]);
    

    but should be:

    $this->trackedJob = TrackedJob::create([
                'trackable_id' => $this->model->id ?? $this->model->uuid,
                'trackable_type' => $this->model->getMorphClass(),
                'name' => class_basename(static::class),
            ]);
    

    This way, package will be respect Relation::morphMap setting.

    bug 
    opened by webard 2
  • Improvement Readme - Setup output content

    Improvement Readme - Setup output content

    Hi Mateus, nice job with this package.

    Bellow a sugestion to improve the documentation about how to setup output content:

    Set Output Content

    Easy to setup a output content on workflow job, bellow a example on handle method of job class:

    public function handle()
    {
        try {
            // Workflow Job
            $this->trackedJob->markAsFinished('Finished with success!');
        } catch (Throwable $e) {
            $this->trackedJob->markAsFailed('Oh No, an error occurred!');
        }
    }
    
    opened by tiagoamemiya 2
  • Add compatibility for laravel 9.*

    Add compatibility for laravel 9.*

    Hi I actually make a single change to make this package to Laravel 9. MocksApplicationServices trait removed from Orchestra\Testbench\TestCase in orchestra/testbench:7 due to mark this as deprecated in laravel 8 (laravel/framework#36716) So I used Event facade as it suggested in official document.

    I also changed workflow matrix to test Laravel 9 only with php 8.0 and not 7.4

    opened by yeganemehr 1
  • Middleware fix for released jobs

    Middleware fix for released jobs

    Regarding: https://github.com/mateusjunges/trackable-jobs-for-laravel/issues/35

    Fix for: Jobs which get released back into the queue are getting marked as finished instead of "retrying".

    Retrying status makes more sense here as setting the jobs as "queued" will be confusing. This will indicate that the job has been tried already.

    The method markAsQueued was still added to the model as there are scenarios where it's useful to have this method if creating custom/additional middleware for this package.

    started_at is not set to null to to display when the job was started last time.

    opened by DimaVIII 0
  • TrackedJob name

    TrackedJob name

    TrackedJob name is currently a class basename. Sometimes can happen like in my case that there are jobs with the same class name in different namespaces. Is this intentionally made this way?

    I have overridden the __construct and solved my current problem but would be great to not have this override.

    opened by brndusic 0
  • Trackable attempting access before being initialized

    Trackable attempting access before being initialized

    Hi,

    I've ran into an issue where i'm using a very simple job with an empty constructor, importing and using Trackable. This results in the job failing with an error attempting to access variable $trackedJob before it was initialized in vendor.

    class SubmitTestInfo implements ShouldQueue{
    
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Trackable;
        
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct()
        {
            //
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            var_dump('Process1');
            sleep(5);
            var_dump('5 secs passed');
        }
    }
    

    Error of the Job Failure:

    Error: Typed property App\Jobs\SubmitInfo::$trackedJob must not be accessed before initialization in .../vendor/mateusjunges/laravel-trackable-jobs/src/Jobs/Middleware/TrackedJobMiddleware.php:9
    
    Stack trace:
    #0 /var/www/49211/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Junges\TrackableJobs\Jobs\Middleware\TrackedJobMiddleware->handle()
    #1 /var/www/49211/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
    #2 /var/www/49211/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(125): Illuminate\Pipeline\Pipeline->then()
    #3 /var/www/49211/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(69): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware()
    #4 /var/www/49211/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call()
    #5 /var/www/49211/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(428): Illuminate\Queue\Jobs\Job->fire()
    #6 /var/www/49211/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(378): Illuminate\Queue\Worker->process()
    #7 /var/www/49211/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(172): Illuminate\Queue\Worker->runJob()
    #8 /var/www/49211/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(130): Illuminate\Queue\Worker->daemon()
    #9 /var/www/49211/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(114): Illuminate\Queue\Console\WorkCommand->runWorker()
    #10 /var/www/49211/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Queue\Console\WorkCommand->handle()
    #11 /var/www/49211/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
    #12 /var/www/49211/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
    #13 /var/www/49211/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
    #14 /var/www/49211/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\Container\BoundMethod::call()
    #15 /var/www/49211/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\Container\Container->call()
    #16 /var/www/49211/vendor/symfony/console/Command/Command.php(291): Illuminate\Console\Command->execute()
    #17 /var/www/49211/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run()
    #18 /var/www/49211/vendor/symfony/console/Application.php(998): Illuminate\Console\Command->run()
    #19 /var/www/49211/vendor/symfony/console/Application.php(299): Symfony\Component\Console\Application->doRunCommand()
    #20 /var/www/49211/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun()
    #21 /var/www/49211/vendor/laravel/framework/src/Illuminate/Console/Application.php(102): Symfony\Component\Console\Application->run()
    #22 /var/www/49211/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\Console\Application->run()
    #23 /var/www/49211/artisan(37): Illuminate\Foundation\Console\Kernel->handle()
    #24 {main}
    
    opened by ryangalea7 3
  • Unable to pass variables to job?

    Unable to pass variables to job?

    Hello!

    I seem to be struggling to pass variables to my job... Also trying out your PR which is making things better but still having issues (https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/33)

    I call my job with: GenerateAudioLogsPlaylist::dispatch($startTimestamp, $endTimestamp)

    And my job looks similar to...

    <?php
    
    namespace App\Jobs;
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Foundation\Bus\Dispatchable;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Support\Facades\Storage;
    use Junges\TrackableJobs\Concerns\Trackable;
    
    class GenerateAudioLogsPlaylist implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Trackable {
            __construct as __baseConstruct;
        }
    
        protected $startTimestamp;
        protected $endTimestamp;
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct($startTimestamp, $endTimestamp)
        {
            $this->startTimestamp = $startTimestamp;
            $this->endTimestamp = $endTimestamp;
            $this->__baseConstruct($startTimestamp, $endTimestamp);
        }
    

    I get the following which makes sense because your construct requires two variables trackable/shouldBeTracked), but how do I go about passing in variables?

    Too few arguments to function App\Jobs\GenerateAudioLogsPlaylist::__construct(), 1 passed in /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php on line 17 and exactly 2 expected
    
    opened by scottgrobinson 4
  • ShouldBeUnique compatibility

    ShouldBeUnique compatibility

    If a job implements ShouldBeUnique interface and the condition of the interface is met then the tracked job will remain with status queued.

    Maybe the status 'failed' or a new status 'cancelled' would be more appropriate in this case.

    opened by faacsousa 1
Releases(v1.5.2)
  • v1.5.2(Aug 5, 2022)

    What's Changed

    • Rewrite docs by @mateusjunges in https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/31
    • Middleware fix for released jobs by @DimaVIII in https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/36

    New Contributors

    • @DimaVIII made their first contribution in https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/36

    Full Changelog: https://github.com/mateusjunges/trackable-jobs-for-laravel/compare/v1.5.1...v1.5.2

    Source code(tar.gz)
    Source code(zip)
  • v1.5.1(Jun 2, 2022)

    What's Changed

    • Fix morph map by @mateusjunges in https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/30

    Full Changelog: https://github.com/mateusjunges/trackable-jobs-for-laravel/compare/v1.5.0...v1.5.1

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Apr 12, 2022)

    What's Changed

    • Add compatibility for laravel 9.* by @yeganemehr in https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/28

    New Contributors

    • @yeganemehr made their first contribution in https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/28

    Full Changelog: https://github.com/mateusjunges/trackable-jobs-for-laravel/compare/1.4.0...v1.5.0

    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Dec 20, 2021)

    What's Changed

    • Make TrackedJob prunable by @mateusjunges in https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/27
    • Drop support for Laravel 7 by @mateusjunges in https://github.com/mateusjunges/trackable-jobs-for-laravel/pull/27

    Full Changelog: https://github.com/mateusjunges/trackable-jobs-for-laravel/compare/1.3.0...1.4.0

    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Oct 25, 2021)

  • 1.2.0(Jun 16, 2021)

  • 1.1.3(Apr 22, 2021)

  • 1.1.2(Apr 19, 2021)

  • 1.1.1(Apr 16, 2021)

  • 1.1.0(Apr 13, 2021)

  • 1.0.0(Apr 6, 2021)

Owner
Mateus Junges
BA in Computer Engineering, studying for a Master's degree in Computational Security at UFPR. Working as Backend Engineer at Paylivre and open source lover.
Mateus Junges
A package to keep track of your pages & understand your audience

A clean way to track your pages & understand your user's behavior Installation You can install the package via composer: composer require coderflexx/l

Coderflex 178 Jan 4, 2023
A site which you can apply jobs or search for employees with cool functionalities..

About App An App which you can apply jobs or search for employees with cool functionalities. Some Pics of App Click Image to Zoom in Sign In & Up Empl

Fatih Canbolat 1 Jan 7, 2022
A package to keep track of outgoing emails in your Laravel application.

Keep track of outgoing emails and associate sent emails with Eloquent models This package helps you to keep track of outgoing emails in your Laravel a

Stefan Zweifel 108 Nov 1, 2022
A Laravel package to monitor the status and history of jobs on the queue.

Monitored Jobs for Laravel Overview This package tracks the status and history of your queued jobs by hooking into the events that Laravel fires for i

Aryeo 9 Dec 9, 2022
A Laravel package to help track user onboarding steps.

Onboard A Laravel package to help track user onboarding steps. Installation: Install the package via composer composer require calebporzio/onboard Reg

Caleb Porzio 440 Dec 17, 2022
Laravel plugin to track your users logins and alert when a suspicious login occurs

Laravel Suspicious Logins Detect suspicious logins for standard Laravel authentication (base Laravel, Jetstream, etc) and notify a list of administrat

Advent Development 74 May 1, 2022
Dispatch Laravel jobs via Artisan

This package can register jobs as Artisan commands. All you need to do is let your job implement the empty ArtisanDispatchable interface.

Spatie 135 Nov 7, 2022
Add variables to the payload of all jobs in a Laravel app

Inject extra info to the payloads of all jobs in a Laravel app This package makes it easy to inject things in every job. Imagine that you want to have

Spatie 62 Dec 9, 2022
Chain Laravel jobs without having to glue it to a starting job

Laravel Job Chainer JobChainer does chain a variable amount of jobs by adding them with the add() method. This makes it possible to chain jobs without

Just Iversen 69 Nov 18, 2022
This project is based on the aggregation of jobs from some technology companies.

FIND-JOBS-ALERT ?? ?? ?? This project is based on the aggregation of jobs from some technology companies. Check below, some companies avaliable in pro

Wellisson Ribeiro 2 Dec 1, 2021
Smeify is a Stable Automated Solution for Airtime and Data businesses in Nigeria, this package helps you integrate smeify easily into your laravel application.

Smeify is a Stable Automated Solution for Airtime and Data businesses in Nigeria, this package helps you integrate smeify easily into your laravel application.

Ogundiran Adewale Charles 2 Jul 27, 2022
Vandar Cashier is a Laravel package that allows you to seamlessly implement IPG and Direct Debit on your application

Vandar Cashier is a Laravel package that provides you with a seamless integration with Vandar services. Take a look at Vandar Documentation for more i

Vandar 11 Dec 14, 2022
This package provides a Logs page that allows you to view your Laravel log files in a simple UI

A simplistics log viewer for your Filament apps. This package provides a Logs page that allows you to view your Laravel log files in a simple UI. Inst

Ryan Chandler 9 Sep 17, 2022
A Laravel package that allows you to validate your config values and environment.

Table of Contents Overview Installation Requirements Install the Package Publishing the Default Rulesets Usage Creating a Validation Ruleset Using the

Ash Allen 152 Dec 15, 2022
Thunder is an advanced Laravel tool to track user consumption using Cashier's Metered Billing for Stripe. ⚡

⚡ Thunder Thunder is an advanced Laravel tool to track user consumption using Cashier's Metered Billing for Stripe. ⚡ ?? Supporting If you are using o

Renoki Co. 10 Nov 21, 2022
🕵🏻‍♂️  The easiest way to respect the "do not track" header in Laravel

trackable The easiest way to respect the "do not track" header in Laravel Installation composer require s360digital/trackable API Trackable will expos

s360 2 Oct 7, 2022
Laravel Seeable - Keep track of the date and time a user was last seen.

Laravel Seeable This package makes it easy to keep track of the date and time a user was last seen. Installation Install this package. composer requir

Zep Fietje 29 Dec 26, 2022
Save Model is a Laravel package that allows you to save data in the database in a new way.

Save Model is a Laravel package that allows you to save data in the database in a new way. No need to worry about $guarded and $fillable properties in the model anymore. Just relax an use Save Model package.

Laratips 27 Mar 2, 2022
A Laravel package that allows you to use multiple ".env" files in a precedent manner. Use ".env" files per domain (multi-tentant)!

Laravel Multi ENVs Use multiple .envs files and have a chain of precedence for the environment variables in these different .envs files. Use the .env

Allyson Silva 48 Dec 29, 2022