TKK_E32230814/URGENT_FIX.md

325 lines
9.4 KiB
Markdown

# 🚨 PERBAIKAN URGENT - Log Scheduler Tidak Muncul
## ❌ Bug yang Ditemukan (Dari Screenshot Railway):
### 1. **Kondisi Logging Terlalu Ketat**
```javascript
// ❌ 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**
```javascript
// ✅ 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**
```javascript
⏱️ 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)**
```javascript
setTimeout(() => {
console.log('🚀 Running first schedule check immediately...');
checkScheduledWatering();
}, 5000);
```
### 4. **Logging Firebase Update yang Detail**
```javascript
🔛 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**
```javascript
🕐 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! 🚀**