insowe/datalogger

Save data logs to Cloud Storage.

v0.2.0-beta 2020-09-11 04:56 UTC

This package is auto-updated.

Last update: 2024-09-11 13:06:27 UTC


README

This package help log the data after every updated, and upload to cloud storage not database to reduce loading of the database.

Installation

Via Composer

$ composer require insowe/datalogger

Execute php artisan vendor:publish, choose Provider: Insowe\DataLogger\DataLoggerServiceProvider to publish database migration to ~/database/migrations/2020_01_22_023910_create_data_logs_table.php.

You should put all the data types you need to enum column setting.

Schema::create('data_logs', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->enum('data_type', [

    // Put data types of the app here!

    ])->comment('資料類型');

For example:

Schema::create('data_logs', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->enum('data_type', [
        Model::getDataLogType(),
        Product::getDataLogType(),
        CleaningService::getDataLogType(),
    ])->comment('資料類型');

This package use queue, make sure the queue environment is ready, or just let QUEUE_CONNECTION=sync.

Usage

If an Eloquent Model will be logged, let it implement the interface Insowe\DataLogger\Models\IData.

class Model extends BaseModel implements IData
{
    public function getDataLogId()
    {
        return $this->id;
    }
    
    public static function getDataLogType()
    {
        return 'model';
    }
}

Create a createLog method in the controller after data has beed updated.

public function createOrUpdate(Request $request)
{
    if (intval($request->id) === 0) {
        $item = $this->create($request);
    }
    else {
        $item = $this->update($request);
    }
    $this->createLog($item->id, $request->user()->id);
}

In the method createLog,get the newest data and trigger the event Updated, the listener will add a log row to database and make a queue for upload log file to the cloud.

public function createLog($modelId, $userId)
{
    $item = Model::with('brand')
            ->with('type')
            ->with('age')
            ->with('minAge')
            ->with('usages')
            ->with('detail')
            ->with('accessories')
            ->where('id', $modelId)
            ->first();
    
    $item->setHidden([
        'product_quantity',
        'product_in_stock',
        'updated_at',
        'deleted_at',
    ]);
    
    event(new Updated($item, $userId));
}

Notice: should hide the machine-updated columns like updated_at, deleted_at and other statistics columns.

Change log

Please see the changelog for more information on what has changed recently.

Contributing

Please see contributing.md for details and a todolist.

Security

If you discover any security related issues, please email author email instead of using the issue tracker.

License

license. Please see the license file for more information.