khanegi setting and prices records
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Services\LivePriceTickService;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class PriceTickCommand extends Command
|
||||
{
|
||||
protected $signature = 'prices:tick';
|
||||
|
||||
protected $description = 'Fetch live prices, sync products, cache last/list, log snapshot (every 10s)';
|
||||
|
||||
public function handle(LivePriceTickService $tickService): int
|
||||
{
|
||||
$tickService->tick();
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Services\PriceSnapshotService;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class PrunePriceSnapshotsCommand extends Command
|
||||
{
|
||||
protected $signature = 'prices:prune';
|
||||
|
||||
protected $description = 'Downsample and prune price history (daily at midnight)';
|
||||
|
||||
public function handle(PriceSnapshotService $snapshots): int
|
||||
{
|
||||
$stats = $snapshots->pruneHistory();
|
||||
$this->info(json_encode($stats, JSON_UNESCAPED_UNICODE));
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
}
|
||||
@@ -2,19 +2,18 @@
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Services\ProductPriceSyncService;
|
||||
use App\Services\LivePriceTickService;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class SyncProductPrices extends Command
|
||||
{
|
||||
protected $signature = 'product:sync-prices';
|
||||
|
||||
protected $description = 'Fetch zaarbox price board + sync product DB (scheduler: every 30s)';
|
||||
protected $description = 'Alias for prices:tick (backward compatible cron)';
|
||||
|
||||
public function handle(ProductPriceSyncService $syncService): int
|
||||
public function handle(LivePriceTickService $tickService): int
|
||||
{
|
||||
// کران: GET https://price.zaarbox.ir/api/free (یا zaarbox_api_url) → کش + UPDATE محصولات
|
||||
$syncService->syncAll(true);
|
||||
$tickService->tick();
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
||||
+13
-19
@@ -2,44 +2,38 @@
|
||||
|
||||
namespace App\Console;
|
||||
|
||||
use App\Console\Commands\Price;
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
protected $commands = [
|
||||
Price::class,
|
||||
Commands\Price::class,
|
||||
];
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
// همگامسازی قیمت محصولات متغیر (reading_method) — هر ۳۰ ثانیه
|
||||
// تیک قیمت — هر ۱۰ ثانیه (۶ بار در دقیقه)
|
||||
$schedule->call(function () {
|
||||
for ($i = 0; $i < 2; $i++) {
|
||||
\Illuminate\Support\Facades\Artisan::call('product:sync-prices');
|
||||
if ($i < 1) {
|
||||
sleep(30);
|
||||
for ($i = 0; $i < 6; $i++) {
|
||||
\Illuminate\Support\Facades\Artisan::call('prices:tick');
|
||||
if ($i < 5) {
|
||||
sleep(10);
|
||||
}
|
||||
}
|
||||
})->everyMinute()->name('sync_product_prices_30s')->withoutOverlapping();
|
||||
})->everyMinute()->name('prices_tick_10s')->withoutOverlapping();
|
||||
|
||||
$schedule->command('prices:refresh-zaarbox')
|
||||
->everyThirtyMinutes()
|
||||
->name('refresh_zaarbox_prices')
|
||||
->withoutOverlapping();
|
||||
|
||||
// پاکسازی و downsample تاریخچه — ساعت ۱۲ شب
|
||||
$schedule->command('prices:prune')
|
||||
->dailyAt('00:00')
|
||||
->name('prune_price_snapshots');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function commands()
|
||||
{
|
||||
$this->load(__DIR__.'/Commands');
|
||||
|
||||
Reference in New Issue
Block a user