TKK_E32230814/URGENT_FIX.md

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

  1. Buka Railway Dashboard
  2. Pilih service myreppril (worker)
  3. Klik Deploy (atau tunggu auto-deploy dari GitHub)
  4. Tunggu status jadi Active

Step 2: Monitor Log Real-time 👀

  1. Klik tab Logs di Railway

  2. Dalam 5 detik pertama harus muncul:

    🔧 RUNNING DIAGNOSTIC CHECKS...
    🕐 CURRENT TIME ANALYSIS:
    
  3. Dalam 10 detik harus muncul:

    🚀 Running first schedule check immediately...
    ⏱️ CHECK #1: HH:MM:SS | Mode: ✅
    
  4. Setiap 60 detik harus muncul:

    ⏱️ CHECK #2: HH:MM:SS | Mode: ✅
    ⏱️ CHECK #3: HH:MM:SS | Mode: ✅
    

Step 3: Test dengan Jadwal +2 Menit 🧪

  1. Lihat log Railway untuk cek waktu sekarang:

    🕐 Current: 10:30
    
  2. Buka Firebase Console → Realtime Database

  3. Edit node kontrol/waktu_1

  4. Set ke waktu sekarang + 2 menit

    • Contoh: Sekarang 10:30 → set "10:32"
    • PENTING: Format harus 2 digit ("10:32" bukan "10:32:00")
  5. Tunggu 2 menit sambil monitor log Railway

  6. 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_1 harus jadi true (Pompa Air)
  • mosvet_2 harus jadi true (Pompa Pupuk)
  • mosvet_3 sampai mosvet_7 harus jadi true (Pot 1-5)

Setelah durasi selesai:

  • Semua mosvet_X harus kembali jadi false

🚨 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:

  1. worker.js - Verbose logging + bug fixes
  2. DEBUGGING_LOGS.md - Panduan lengkap debugging
  3. 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 guide
  • 76bb751 - Fix: Add verbose logging for debugging
  • 8b8ad29 - Add debugging functions

🆘 Jika Masih Stuck:

Share ini ke developer:

  1. Screenshot Railway logs (10 menit terakhir)
  2. Screenshot Firebase /kontrol node
  3. Screenshot Firebase /aktuator node
  4. Catat waktu test: "Set jadwal 10:32, tunggu sampai 10:33"
  5. 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! 🚀