insowe / datalogger
Save data logs to Cloud Storage.
Requires
- laravel/framework: >6.2
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.