9.4 KiB
🚨 PERBAIKAN URGENT - Log Scheduler Tidak Muncul
❌ Bug yang Ditemukan (Dari Screenshot Railway):
1. Kondisi Logging Terlalu Ketat
// ❌ SALAH - Tidak akan log dengan benar
if (now.getMinutes() % 5 === 0 && now.getSeconds() < 60)
- Interval check 60 detik bisa jatuh di detik berapa saja
- Kondisi ini hampir tidak pernah terpenuhi
- HASIL: Log TIME CHECK tidak pernah muncul!
2. Tidak Ada Konfirmasi Check Berjalan
- Fungsi
checkScheduledWatering()jalan setiap 60 detik - Tapi TIDAK ADA LOG untuk konfirmasi
- HASIL: Tidak tahu apakah worker benar-benar check jadwal!
3. Worker Start Terlambat
- Dari screenshot: Worker start jam 10:20:05
- Jadwal
waktu_1: "10:18"sudah lewat 2 menit sebelumnya - First check baru jalan setelah 60 detik = 10:21:05
- HASIL: Jadwal yang dekat dengan startup time akan terlewat!
✅ Solusi yang Sudah Diterapkan:
1. Verbose Logging - Setiap Check Tercatat
// ✅ SEKARANG - Log setiap kali check
⏱️ CHECK #1: 10:20:15 | Mode: ✅
⏱️ CHECK #2: 10:21:15 | Mode: ✅
⏱️ CHECK #3: 10:22:15 | Mode: ✅
2. Detail Log Setiap 3 Check atau 5 Menit
⏱️ CHECK #3: 10:22:15 | Mode: ✅
📅 Date: 2026-02-11
🕐 Current: 10:22 (11/2/2026, 10.22.15)
Mode Waktu: ✅ ENABLED
Jadwal 1: 10:18
Jadwal 2: 09:00
3. First Check Immediate (5 detik setelah start)
setTimeout(() => {
console.log('🚀 Running first schedule check immediately...');
checkScheduledWatering();
}, 5000);
4. Logging Firebase Update yang Detail
🔛 Turning ON: mosvet_1, mosvet_2, mosvet_3...
📌 Firebase path: aktuator
📝 Updates: {
"mosvet_1": true,
"mosvet_2": true,
...
}
✅ Firebase update successful
🔍 Verified aktuator state: { ... }
5. Queue Status Monitoring
🕐 JADWAL 1 TRIGGERED: 10:25
🎯 Attempting to add job to queue...
✅ Successfully added to queue: jadwal_1_...
📊 Queue status: 1 active, 0 waiting
🎯 Yang Harus Dilakukan SEKARANG:
Step 1: Redeploy Railway Worker ⚡
- Buka Railway Dashboard
- Pilih service myreppril (worker)
- Klik Deploy (atau tunggu auto-deploy dari GitHub)
- Tunggu status jadi Active
Step 2: Monitor Log Real-time 👀
-
Klik tab Logs di Railway
-
Dalam 5 detik pertama harus muncul:
🔧 RUNNING DIAGNOSTIC CHECKS... 🕐 CURRENT TIME ANALYSIS: -
Dalam 10 detik harus muncul:
🚀 Running first schedule check immediately... ⏱️ CHECK #1: HH:MM:SS | Mode: ✅ -
Setiap 60 detik harus muncul:
⏱️ CHECK #2: HH:MM:SS | Mode: ✅ ⏱️ CHECK #3: HH:MM:SS | Mode: ✅
Step 3: Test dengan Jadwal +2 Menit 🧪
-
Lihat log Railway untuk cek waktu sekarang:
🕐 Current: 10:30 -
Buka Firebase Console → Realtime Database
-
Edit node
kontrol/waktu_1 -
Set ke waktu sekarang + 2 menit
- Contoh: Sekarang 10:30 → set
"10:32" - PENTING: Format harus 2 digit (
"10:32"bukan"10:32:00")
- Contoh: Sekarang 10:30 → set
-
Tunggu 2 menit sambil monitor log Railway
-
Saat waktu match, HARUS muncul:
⏱️ CHECK #X: 10:32:YY | Mode: ✅ Jadwal 1: 10:32 🔔 MATCH! 🕐 JADWAL 1 TRIGGERED: 10:32 🎯 Attempting to add job to queue... ✅ Successfully added to queue: jadwal_1_... 📊 Queue status: 1 active, 0 waiting 💧 Processing Job: jadwal_1_... Type: waktu_jadwal_1 Pots: [1, 2, 3, 4, 5] Duration: 300s 🔛 Turning ON: mosvet_1, mosvet_2, ... ✅ Firebase update successful
Step 4: Verifikasi di Firebase 🔍
Saat job running, buka Firebase Console dan cek node /aktuator:
mosvet_1harus jaditrue(Pompa Air)mosvet_2harus jaditrue(Pompa Pupuk)mosvet_3sampaimosvet_7harus jaditrue(Pot 1-5)
Setelah durasi selesai:
- Semua
mosvet_Xharus kembali jadifalse
🚨 Red Flags - Jika Masih Bermasalah:
❌ Log CHECK tidak muncul sama sekali
Kemungkinan: Worker crash saat init Action: Screenshot error di Railway → share
❌ CHECK muncul tapi mode: ❌
Kemungkinan: kontrol/waktu di Firebase = false
Action: Set kontrol/waktu = true di Firebase
❌ MATCH tapi tidak TRIGGERED
Kemungkinan: Queue error atau Redis disconnect Action: Check Redis service status
❌ TRIGGERED tapi tidak Processing
Kemungkinan: BullMQ worker error Action: Check error log di Railway setelah TRIGGERED
❌ Processing tapi aktuator tidak ON
Kemungkinan: Firebase update gagal atau permission error Action: Check "Firebase update successful" di log
📊 Ekspektasi Log Lengkap:
// ===== STARTUP (detik 0-10) =====
10:20:05 ✨ ApsGo Railway Worker is running!
10:20:05 ⏰ Timezone: Asia/Jakarta (Current: 11/2/2026, 10.20.05)
10:20:05 ✅ Firebase Admin initialized
10:20:05 ✅ Redis connected
10:20:05 💓 Heartbeat: Worker alive for 0h 0m
10:20:08 🔧 RUNNING DIAGNOSTIC CHECKS...
10:20:08 🕐 CURRENT TIME ANALYSIS:
10:20:08 Server Local: Wed Feb 11 2026 10:20:08 GMT+0700
10:20:08 Asia/Jakarta: 11/2/2026, 10.20.08
10:20:08 HH:MM Format: 10:20
10:20:08 📋 FIREBASE KONTROL:
10:20:08 Mode Waktu: ENABLED ✅
10:20:08 Waktu 1: 10:25
10:20:08 Waktu 2: 18:00
10:20:08 🔍 CHECKING AKTUATOR NODE...
10:20:08 ✅ Aktuator node exists:
10:20:08 mosvet_1: false
10:20:08 mosvet_2: false
... (sampai mosvet_8)
10:20:13 🚀 Running first schedule check immediately...
10:20:13 ⏱️ CHECK #1: 10:20:13 | Mode: ✅
// ===== CHECK RUTIN (setiap 60 detik) =====
10:21:13 ⏱️ CHECK #2: 10:21:13 | Mode: ✅
10:22:13 ⏱️ CHECK #3: 10:22:13 | Mode: ✅
10:22:13 📅 Date: 2026-02-11
10:22:13 🕐 Current: 10:22 (11/2/2026, 10.22.13)
10:22:13 Mode Waktu: ✅ ENABLED
10:22:13 Jadwal 1: 10:25
10:22:13 Jadwal 2: 18:00
10:23:13 ⏱️ CHECK #4: 10:23:13 | Mode: ✅
10:24:13 ⏱️ CHECK #5: 10:24:13 | Mode: ✅
// ===== JADWAL MATCH =====
10:25:13 ⏱️ CHECK #6: 10:25:13 | Mode: ✅
10:25:13 📅 Date: 2026-02-11
10:25:13 🕐 Current: 10:25 (11/2/2026, 10.25.13)
10:25:13 Mode Waktu: ✅ ENABLED
10:25:13 Jadwal 1: 10:25 🔔 MATCH!
10:25:13 Jadwal 2: 18:00
10:25:13 🕐 JADWAL 1 TRIGGERED: 10:25
10:25:13 🎯 Attempting to add job to queue...
10:25:13 ✅ Successfully added to queue: jadwal_1_2026-02-11_10:25
10:25:13 📊 Queue status: 1 active, 0 waiting
// ===== JOB EXECUTION =====
10:25:14 💧 Processing Job: jadwal_1_2026-02-11_10:25
10:25:14 Type: waktu_jadwal_1
10:25:14 Pots: [1, 2, 3, 4, 5]
10:25:14 Duration: 300s
10:25:14 🔛 Turning ON: mosvet_1, mosvet_2, mosvet_3, mosvet_4, mosvet_5, mosvet_6, mosvet_7
10:25:14 📌 Firebase path: aktuator
10:25:14 📝 Updates: {
10:25:14 "mosvet_1": true,
10:25:14 "mosvet_2": true,
10:25:14 "mosvet_3": true,
10:25:14 "mosvet_4": true,
10:25:14 "mosvet_5": true,
10:25:14 "mosvet_6": true,
10:25:14 "mosvet_7": true
10:25:14 }
10:25:14 ✅ Firebase update successful
10:25:14 🔍 Verified aktuator state: {...}
10:25:14 ⏳ 300s remaining...
10:25:24 ⏳ 290s remaining...
10:25:34 ⏳ 280s remaining...
... (setiap 10 detik)
// ===== JOB COMPLETE =====
10:30:14 ⏳ 5s remaining...
10:30:14 🔴 Turning OFF: mosvet_1, mosvet_2, ...
10:30:14 ✅ Aktuators turned OFF successfully
10:30:14 📊 History logged: 2026-02-11 10:25
10:30:14 ✅ Job completed successfully
10:30:14 ✅ Worker completed job jadwal_1_2026-02-11_10:25
// ===== NEXT CHECK =====
10:31:13 ⏱️ CHECK #7: 10:31:13 | Mode: ✅
10:31:13 ⏭️ Jadwal 1 already triggered: jadwal_1_2026-02-11_10:25
✅ Checklist Sukses:
Centang setelah verify di Railway logs:
- Worker start tanpa error
- Muncul DIAGNOSTIC CHECKS dalam 5 detik
- Muncul first CHECK #1 dalam 10 detik
- CHECK counter naik setiap 60 detik (#2, #3, #4...)
- Detail log muncul setiap 3 check
- Mode Waktu menunjukkan ✅ ENABLED
- Test jadwal +2 menit → muncul 🔔 MATCH!
- Muncul JADWAL TRIGGERED
- Muncul "Successfully added to queue"
- Muncul "Processing Job"
- Muncul "Firebase update successful"
- Aktuator berubah di Firebase Console
- Countdown berjalan setiap 10 detik
- Aktuator OFF setelah durasi
- History ter-log
- Job completed successfully
📌 File yang Sudah Di-Update:
- ✅
worker.js- Verbose logging + bug fixes - ✅
DEBUGGING_LOGS.md- Panduan lengkap debugging - ✅
URGENT_FIX.md- File ini (ringkasan untuk quick action)
GitHub Repo: https://github.com/awisnuu/myreppril.git
Branch: main
Latest Commits:
025c39a- Add comprehensive debugging guide76bb751- Fix: Add verbose logging for debugging8b8ad29- Add debugging functions
🆘 Jika Masih Stuck:
Share ini ke developer:
- Screenshot Railway logs (10 menit terakhir)
- Screenshot Firebase
/kontrolnode - Screenshot Firebase
/aktuatornode - Catat waktu test: "Set jadwal 10:32, tunggu sampai 10:33"
- File log lengkap (download dari Railway)
Expected vs Actual:
- Expected: Log CHECK muncul setiap menit
- Actual: [apa yang terjadi]
🎉 Good Luck!
Worker sekarang sudah SANGAT VERBOSE untuk debugging.
Setiap step tercatat dengan detail.
Tidak akan ada lagi misteri "kenapa tidak jalan"!
Redeploy sekarang dan monitor lognya! 🚀