Fix hourly summary: default to today for realtime updates, add hour parameter for efficient updates
This commit is contained in:
@@ -7,17 +7,18 @@ declare(strict_types=1);
|
||||
* CLI script untuk generate hourly summary
|
||||
*
|
||||
* Usage:
|
||||
* php bin/hourly_summary.php [date]
|
||||
* php bin/hourly_summary.php [date] [hour]
|
||||
*
|
||||
* Examples:
|
||||
* php bin/hourly_summary.php 2025-01-01
|
||||
* php bin/hourly_summary.php # default: yesterday
|
||||
* php bin/hourly_summary.php 2025-01-01 # Rekap semua jam untuk tanggal tertentu
|
||||
* php bin/hourly_summary.php # Default: hari ini (untuk update realtime)
|
||||
* php bin/hourly_summary.php 2025-01-01 14 # Rekap jam 14 saja untuk tanggal tertentu
|
||||
* php bin/hourly_summary.php today 13 # Rekap jam 13 hari ini
|
||||
*
|
||||
* Note:
|
||||
* Default menggunakan yesterday karena:
|
||||
* - Data hari ini mungkin belum lengkap (masih ada event yang masuk)
|
||||
* - Cron biasanya jalan di akhir hari untuk rekap hari sebelumnya
|
||||
* - Lebih aman untuk rekap data yang sudah final
|
||||
* - Default: hari ini (untuk update realtime via cron setiap jam)
|
||||
* - Untuk rekap final kemarin, gunakan: php bin/hourly_summary.php yesterday
|
||||
* - Untuk update jam tertentu saja, tambahkan parameter hour (0-23)
|
||||
*/
|
||||
|
||||
// Get project root directory
|
||||
@@ -33,18 +34,43 @@ use App\Support\Database;
|
||||
// Load environment variables
|
||||
AppConfig::loadEnv($rootPath);
|
||||
|
||||
// Get date from command line argument or use yesterday (deterministic)
|
||||
$date = $argv[1] ?? date('Y-m-d', strtotime('-1 day'));
|
||||
// Get date from command line argument or use today (for realtime updates)
|
||||
$dateInput = $argv[1] ?? 'today';
|
||||
|
||||
// Handle special keywords
|
||||
if ($dateInput === 'today') {
|
||||
$date = date('Y-m-d');
|
||||
} elseif ($dateInput === 'yesterday') {
|
||||
$date = date('Y-m-d', strtotime('-1 day'));
|
||||
} else {
|
||||
$date = $dateInput;
|
||||
}
|
||||
|
||||
// Validate date format
|
||||
$dateTime = DateTime::createFromFormat('Y-m-d', $date);
|
||||
if ($dateTime === false || $dateTime->format('Y-m-d') !== $date) {
|
||||
echo "Error: Invalid date format. Expected Y-m-d (e.g., 2025-01-01)\n";
|
||||
echo "Usage: php bin/hourly_summary.php [date]\n";
|
||||
echo " If date is omitted, defaults to yesterday\n";
|
||||
echo "Error: Invalid date format. Expected Y-m-d (e.g., 2025-01-01) or 'today'/'yesterday'\n";
|
||||
echo "Usage: php bin/hourly_summary.php [date] [hour]\n";
|
||||
echo " date: Y-m-d format, 'today', or 'yesterday' (default: today)\n";
|
||||
echo " hour: 0-23 (optional, untuk update jam tertentu saja)\n";
|
||||
echo "Examples:\n";
|
||||
echo " php bin/hourly_summary.php # Update hari ini\n";
|
||||
echo " php bin/hourly_summary.php yesterday # Rekap kemarin\n";
|
||||
echo " php bin/hourly_summary.php 2025-01-01 14 # Rekap jam 14 tanggal tertentu\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Get hour from command line (optional, 0-23)
|
||||
$hour = null;
|
||||
if (isset($argv[2])) {
|
||||
$hourInput = (int) $argv[2];
|
||||
if ($hourInput < 0 || $hourInput > 23) {
|
||||
echo "Error: Hour must be between 0 and 23\n";
|
||||
exit(1);
|
||||
}
|
||||
$hour = $hourInput;
|
||||
}
|
||||
|
||||
try {
|
||||
// Get database connection
|
||||
$dbHost = AppConfig::get('DB_HOST', 'localhost');
|
||||
@@ -63,12 +89,20 @@ try {
|
||||
$service = new HourlySummaryService($db);
|
||||
|
||||
// Run aggregation
|
||||
echo "Processing hourly summary for date: {$date}\n";
|
||||
$result = $service->aggregateForDate($date);
|
||||
|
||||
echo "Success!\n";
|
||||
echo "Date: {$result['date']}\n";
|
||||
echo "Rows processed: {$result['rows_processed']}\n";
|
||||
if ($hour !== null) {
|
||||
echo "Processing hourly summary for date: {$date}, hour: {$hour}\n";
|
||||
$result = $service->aggregateForDate($date, $hour);
|
||||
echo "Success!\n";
|
||||
echo "Date: {$result['date']}\n";
|
||||
echo "Hour: {$result['hour']}\n";
|
||||
echo "Rows processed: {$result['rows_processed']}\n";
|
||||
} else {
|
||||
echo "Processing hourly summary for date: {$date} (all hours)\n";
|
||||
$result = $service->aggregateForDate($date);
|
||||
echo "Success!\n";
|
||||
echo "Date: {$result['date']}\n";
|
||||
echo "Rows processed: {$result['rows_processed']}\n";
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user