6.0 KiB
6.0 KiB
Test Manual Cron - Hourly Summary
Cara Test Manual Execute Cron
1. Test Update Hari Ini (Semua Jam)
cd /www/wwwroot/api.btekno.cloud/api
php bin/hourly_summary.php today
Yang terjadi:
- ✅ Query semua event hari ini dari
entry_events - ✅ Group by jam (0-23), location, gate, category
- ✅ Upsert ke
hourly_summary(INSERT jika baru, UPDATE jika sudah ada) - ✅ Data lama DIGANTI dengan hasil rekap ulang
2. Test Update Jam Tertentu Hari Ini
# Update jam 14 (2 siang) hari ini
php bin/hourly_summary.php today 14
# Update jam 1 pagi hari ini
php bin/hourly_summary.php today 1
Yang terjadi:
- ✅ Query hanya event jam tertentu hari ini
- ✅ Lebih cepat karena hanya proses 1 jam
- ✅ Upsert ke
hourly_summaryuntuk jam tersebut
3. Test Rekap Kemarin
php bin/hourly_summary.php yesterday
Yang terjadi:
- ✅ Query semua event kemarin dari
entry_events - ✅ Rekap semua jam kemarin (0-23)
- ✅ Upsert ke
hourly_summaryuntuk kemarin
Verifikasi Data Ter-Update
Sebelum Execute Cron
-- Cek data jam tertentu hari ini
SELECT
summary_date,
summary_hour,
location_code,
gate_code,
category,
total_count,
total_amount,
updated_at
FROM hourly_summary
WHERE summary_date = CURDATE()
AND summary_hour = HOUR(NOW())
ORDER BY summary_hour DESC, location_code, gate_code, category;
-- Atau cek jam tertentu (misalnya jam 14)
SELECT * FROM hourly_summary
WHERE summary_date = CURDATE()
AND summary_hour = 14;
Execute Cron Manual
# Contoh: update jam 14 hari ini
php bin/hourly_summary.php today 14
Output yang diharapkan:
Processing hourly summary for date: 2025-12-17, hour: 14
Success!
Date: 2025-12-17
Hour: 14
Rows processed: 12
Setelah Execute Cron
-- Cek lagi data yang sama
SELECT
summary_date,
summary_hour,
location_code,
gate_code,
category,
total_count,
total_amount,
updated_at
FROM hourly_summary
WHERE summary_date = CURDATE()
AND summary_hour = 14;
-- Bandingkan:
-- 1. total_count dan total_amount harus sesuai dengan entry_events
-- 2. updated_at harus ter-update (jika kolom ada)
Verifikasi dengan Entry Events
-- Hitung manual dari entry_events untuk jam tertentu
SELECT
DATE(event_time) as date,
HOUR(event_time) as hour,
location_code,
gate_code,
category,
COUNT(*) as count_from_events
FROM entry_events
WHERE DATE(event_time) = CURDATE()
AND HOUR(event_time) = 14
GROUP BY DATE(event_time), HOUR(event_time), location_code, gate_code, category;
-- Bandingkan dengan hourly_summary:
SELECT
summary_date,
summary_hour,
location_code,
gate_code,
category,
total_count as count_from_summary
FROM hourly_summary
WHERE summary_date = CURDATE()
AND summary_hour = 14;
-- Harusnya count_from_events = count_from_summary
Contoh Test Lengkap
Step 1: Cek Data Sebelumnya
# Masuk ke MySQL
mysql -u sql_retribusi -p sql_retribusi
# Query data jam 14 hari ini
SELECT * FROM hourly_summary
WHERE summary_date = CURDATE()
AND summary_hour = 14
LIMIT 5;
Catat nilai:
- total_count: ?
- total_amount: ?
Step 2: Execute Cron Manual
# Keluar dari MySQL (exit)
# Execute cron manual
cd /www/wwwroot/api.btekno.cloud/api
php bin/hourly_summary.php today 14
Output:
Processing hourly summary for date: 2025-12-17, hour: 14
Success!
Date: 2025-12-17
Hour: 14
Rows processed: 12
Step 3: Cek Data Setelah Update
# Masuk ke MySQL lagi
mysql -u sql_retribusi -p sql_retribusi
# Query data yang sama
SELECT * FROM hourly_summary
WHERE summary_date = CURDATE()
AND summary_hour = 14
LIMIT 5;
Bandingkan:
- ✅ total_count harus sesuai dengan COUNT dari entry_events
- ✅ total_amount harus sesuai dengan total_count × tariff.price
- ✅ Data DIGANTI dengan nilai baru (bukan ditambah)
Step 4: Verifikasi dengan Entry Events
-- Hitung dari source data
SELECT
location_code,
gate_code,
category,
COUNT(*) as event_count
FROM entry_events
WHERE DATE(event_time) = CURDATE()
AND HOUR(event_time) = 14
GROUP BY location_code, gate_code, category;
-- Bandingkan dengan summary
SELECT
location_code,
gate_code,
category,
total_count
FROM hourly_summary
WHERE summary_date = CURDATE()
AND summary_hour = 14;
-- Harusnya event_count = total_count untuk setiap kombinasi
Troubleshooting
Problem: Data Tidak Ter-Update
Cek:
-
Apakah ada error saat execute?
php bin/hourly_summary.php today 14 2>&1 -
Apakah ada data di entry_events untuk jam tersebut?
SELECT COUNT(*) FROM entry_events WHERE DATE(event_time) = CURDATE() AND HOUR(event_time) = 14; -
Apakah location/gate aktif?
SELECT * FROM locations WHERE code = 'kerkof_01' AND is_active = 1; SELECT * FROM gates WHERE location_code = 'kerkof_01' AND is_active = 1;
Problem: Data Double/Triple Count
Ini TIDAK mungkin terjadi karena menggunakan ON DUPLICATE KEY UPDATE:
- Data selalu diganti, bukan ditambah
- Jika terlihat double, kemungkinan ada masalah di query aggregation
Cek:
-- Cek apakah ada duplikasi di hourly_summary
SELECT
summary_date,
summary_hour,
location_code,
gate_code,
category,
COUNT(*) as duplicate_count
FROM hourly_summary
WHERE summary_date = CURDATE()
GROUP BY summary_date, summary_hour, location_code, gate_code, category
HAVING duplicate_count > 1;
-- Harusnya tidak ada hasil (karena ada PRIMARY KEY)
Kesimpulan
✅ Manual execute cron AKAN mengupdate data
- Data lama diganti dengan hasil rekap ulang
- Bukan ditambah, tapi diganti
- Memastikan data summary selalu sesuai dengan entry_events
✅ Cara test:
- Cek data sebelum execute
- Execute cron manual
- Cek data setelah execute
- Verifikasi dengan entry_events
✅ Expected behavior:
- Data ter-update sesuai dengan entry_events
- Nilai lama diganti dengan nilai baru
- Konsisten dan akurat