TKK_E32230814/railway-worker/DEBUGGING_LOGS.md

6.5 KiB
Raw Blame History

🐛 Debugging Guide - Railway Worker

Masalah yang Ditemukan

1 Log Scheduler Tidak Muncul

Penyebab:

  • Kondisi logging now.getSeconds() < 60 tidak efektif
  • Interval check 60 detik tidak sinkron dengan menit yang tepat
  • Tidak ada konfirmasi bahwa fungsi checkScheduledWatering() berjalan

Solusi: Tambah counter untuk track setiap check Log setiap kali fungsi dipanggil: ⏱️ CHECK #X Log detail setiap 3 check atau setiap 5 menit Jalankan check pertama kali setelah 5 detik (tidak tunggu 60 detik)


2 Aktuator Tidak Trigger

Kemungkinan Penyebab:

  • Node /aktuator tidak ada di Firebase
  • Format waktu tidak match dengan jadwal
  • Queue tidak menjalankan job
  • Firebase update gagal tanpa error log

Solusi: Validasi node aktuator saat startup Log verbose untuk setiap Firebase update Verify state aktuator setelah update Log queue status (active/waiting jobs)


📊 Log Baru yang Akan Muncul

Saat Startup (5 detik pertama):

🔧 RUNNING DIAGNOSTIC CHECKS...
🕐 CURRENT TIME ANALYSIS:
   Server Local: Wed Feb 11 2026 10:20:05 GMT+0700
   Asia/Jakarta: 11/2/2026, 10.20.05
   TZ Env: Asia/Jakarta
   HH:MM Format: 10:20

📋 FIREBASE KONTROL:
   Mode Waktu: ENABLED ✅
   Waktu 1: 10:18
   Waktu 2: 09:00

🔍 CHECKING AKTUATOR NODE...
✅ Aktuator node exists:
   mosvet_1: false
   mosvet_2: false
   ...

🚀 Running first schedule check immediately...

Setiap 60 Detik:

⏱️ CHECK #1: 10:20:15 | Mode: ✅
⏱️ CHECK #2: 10:21:15 | Mode: ✅
⏱️ 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

Saat Jadwal Match:

⏱️ CHECK #8: 10:25:00 | Mode: ✅
   📅 Date: 2026-02-11
   🕐 Current: 10:25 (11/2/2026, 10.25.00)
   Mode Waktu: ✅ ENABLED
   Jadwal 1: 10:25 🔔 MATCH!
   Jadwal 2: 09:00

🕐 JADWAL 1 TRIGGERED: 10:25
   🎯 Attempting to add job to queue...
   ✅ Successfully added to queue: jadwal_1_2026-02-11_10:25
   📊 Queue status: 1 active, 0 waiting

💧 Processing Job: jadwal_1_2026-02-11_10:25
   Type: waktu_jadwal_1
   Pots: [1, 2, 3, 4, 5]
   Duration: 300s
   🔛 Turning ON: mosvet_1, mosvet_2, mosvet_3, mosvet_4, mosvet_5, mosvet_6, mosvet_7
   📌 Firebase path: aktuator
   📝 Updates: {
     "mosvet_1": true,
     "mosvet_2": true,
     ...
   }
   ✅ Firebase update successful
   🔍 Verified aktuator state: { ... }
   ⏳ 300s remaining...
   ⏳ 290s remaining...
   ...

Saat Sensor Trigger:

🌡️ SENSOR CHECK #10 | Mode Otomatis: ✅

🌡️ SENSOR TRIGGERED: POT 1
   Soil moisture: 35% < 40%
   Mode: smart, Duration: 600s
   📌 Added to queue: sensor-pot-1-...

🔧 Cara Testing

Test 1: Verifikasi Worker Berjalan

  1. Check Railway logs untuk CHECK #X setiap menit
  2. Pastikan counter naik: CHECK #1, #2, #3...
  3. Jika tidak ada, worker crash atau interval tidak jalan

Test 2: Test Jadwal Manual

  1. Lihat log CURRENT TIME ANALYSIS untuk waktu saat ini
  2. Set waktu_1 di Firebase = waktu saat ini + 2 menit
    • Contoh: Sekarang 10:30 → set waktu_1: "10:32"
  3. Tunggu 2 menit
  4. Harus muncul log JADWAL 1 TRIGGERED: 10:32

Test 3: Verifikasi Queue

  1. Saat jadwal trigger, cek log Queue status:
  2. Pastikan ada 1 active atau 1 waiting
  3. Kemudian lihat Processing Job: muncul

Test 4: Verifikasi Firebase Aktuator

  1. Saat job running, buka Firebase Console
  2. Lihat node /aktuator
  3. Pastikan mosvet yang relevan = true
  4. Setelah durasi selesai, harus kembali false

🚨 Troubleshooting

Problem: Log CHECK tidak muncul

Diagnosis: Worker crash atau interval tidak jalan Solution:

  • Check Railway logs untuk error
  • Restart worker di Railway Dashboard

Problem: CHECK muncul tapi tidak TRIGGERED

Diagnosis: Format waktu tidak match Solution:

  • Cek log detail (setiap 3 check): lihat "Current: HH:MM"
  • Bandingkan dengan "Jadwal 1: HH:MM" di Firebase
  • Pastikan format sama persis (2 digit: "09:00" bukan "9:00")

Problem: TRIGGERED tapi tidak Processing

Diagnosis: Queue error atau Redis disconnect Solution:

  • Cek log HEALTH CHECK untuk Redis status
  • Cek log Successfully added to queue
  • Restart Redis service jika perlu

Problem: Processing tapi aktuator tidak ON

Diagnosis: Firebase update gagal atau node tidak ada Solution:

  • Cek log Firebase update successful
  • Cek log Verified aktuator state
  • Lihat Firebase Console untuk konfirmasi nilai

📝 Checklist Debugging

  • Worker menghasilkan log CHECK #X setiap menit
  • Counter naik terus (tidak reset tanpa alasan)
  • Mode Waktu menunjukkan ENABLED di Firebase
  • Format waktu di log match dengan jadwal (HH:MM)
  • Saat match, muncul "🔔 MATCH!"
  • Muncul "JADWAL X TRIGGERED"
  • Muncul "Successfully added to queue"
  • Queue status menunjukkan job active/waiting
  • Muncul "Processing Job:"
  • Muncul "Firebase update successful"
  • Muncul "Verified aktuator state"
  • Node /aktuator di Firebase berubah nilai
  • Setelah durasi, aktuator OFF dan muncul log history

🎯 Expected Behavior

Normal Flow:

  1. Worker start → Diagnostic checks (5 detik)
  2. First check immediately → CHECK #1
  3. Check setiap 60 detik → CHECK #2, #3, #4...
  4. Saat match → TRIGGERED
  5. Add to queue → Queue status updated
  6. Worker process job → Aktuator ON
  7. Wait duration → Progress logs setiap 10s
  8. Duration done → Aktuator OFF
  9. Log history → Complete

Timeline Example:

10:20:05 - Worker start + diagnostics
10:20:10 - First check (CHECK #1)
10:21:10 - CHECK #2
10:22:10 - CHECK #3 (detail log)
10:23:10 - CHECK #4
10:24:10 - CHECK #5
10:25:10 - CHECK #6 (detail log) + JADWAL TRIGGERED!
10:25:15 - Job processing started
10:25:15 - Aktuator ON
10:30:15 - Aktuator OFF (after 300s)
10:30:15 - History logged
10:30:15 - Job completed

💡 Tips

  1. Monitor Railway logs secara real-time saat testing
  2. Gunakan waktu + 2 menit untuk test (beri waktu buffer)
  3. Cek Firebase Console bersamaan dengan Railway logs
  4. Screenshot error logs jika ada masalah untuk analisis
  5. Restart worker setelah update kode atau environment variable

📞 Support

Jika masih ada masalah setelah ikuti guide ini:

  1. Export Railway logs (10 menit terakhir)
  2. Screenshot Firebase /kontrol node
  3. Screenshot Firebase /aktuator node
  4. Catat waktu test dilakukan
  5. Dokumentasikan expected vs actual behavior