Files
api-btekno/bin/hourly_summary.php

114 lines
3.6 KiB
PHP
Raw Normal View History

#!/usr/bin/env php
<?php
declare(strict_types=1);
/**
* CLI script untuk generate hourly summary
*
* Usage:
* php bin/hourly_summary.php [date] [hour]
*
* Examples:
* 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: 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
$rootPath = dirname(__DIR__);
// Load autoloader
require $rootPath . '/vendor/autoload.php';
use App\Config\AppConfig;
use App\Modules\Retribusi\Summary\HourlySummaryService;
use App\Support\Database;
// Load environment variables
AppConfig::loadEnv($rootPath);
// 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) 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');
$dbName = AppConfig::get('DB_NAME', '');
$dbUser = AppConfig::get('DB_USER', '');
$dbPass = AppConfig::get('DB_PASS', '');
if (empty($dbName) || empty($dbUser)) {
echo "Error: Database configuration not found in .env\n";
exit(1);
}
$db = Database::getConnection($dbHost, $dbName, $dbUser, $dbPass);
// Initialize service
$service = new HourlySummaryService($db);
// Run aggregation
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);
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
exit(1);
}