325 lines
9.4 KiB
Markdown
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! 🚀**
|