TKK_E32231105/railway-scheduler/README.md

95 lines
2.6 KiB
Markdown

<<<<<<< HEAD
# TelurKu Railway Scheduler
Worker Node.js untuk menjalankan penjadwalan panen otomatis di Railway.
## Fungsi Utama
- Menjalankan cek jadwal setiap menit (timezone default `Asia/Jakarta`).
- Membaca jadwal aktif dari `kontrol/penjadwalan`.
- Membaca sensor dari `data` berdasarkan `infraPath` kandang (`kontrol/kandang`).
- Menyimpan hasil ke:
- `panen_snapshot/{yyyy-MM-dd}`
- `riwayat/records`
- `riwayat/summary`
- Mencegah duplikasi eksekusi dengan lock harian di `scheduler_runs/{yyyy-MM-dd}`.
## Struktur Folder
- `worker.js` : engine scheduler + health endpoint
- `package.json` : dependency dan start command
- `Dockerfile` : container build untuk Railway
- `.dockerignore` : optimasi image build
- `.env.example` : template environment variables
- `railway.json` : config deploy Railway
## Environment Variables (Railway)
Gunakan nilai ini di Railway Variables:
- `PORT=3000`
- `TZ=Asia/Jakarta`
- `SCHEDULER_ENABLED=true`
- `FIREBASE_SERVICE_ACCOUNT_JSON=<json-service-account-penuh>` (opsi paling mudah)
- `FIREBASE_PROJECT_ID=telurku-fa78c`
- `FIREBASE_CLIENT_EMAIL=<service-account-email>`
- `FIREBASE_PRIVATE_KEY=<private-key-dengan-escaped-newline>`
- `FIREBASE_DATABASE_URL=https://telurku-fa78c-default-rtdb.asia-southeast1.firebasedatabase.app`
Catatan untuk `FIREBASE_PRIVATE_KEY`:
- Gunakan format satu baris dengan `\n` (lihat `.env.example`).
- Jangan commit private key ke Git.
Catatan untuk `FIREBASE_SERVICE_ACCOUNT_JSON`:
- Bisa isi seluruh JSON service account dalam satu variable Railway.
- Tetap jangan taruh nilainya di source code atau file yang di-commit.
## Deploy di Railway
1. Buat service baru dari repo ini.
2. Set **Root Directory** ke `railway-scheduler`.
3. Railway bisa build via `Dockerfile` atau Nixpacks.
4. Isi semua environment variables.
5. Deploy.
6. Cek log, pastikan muncul:
- `[init] Firebase Admin connected`
- `[init] Scheduler active`
## Health Check
- Endpoint: `/health`
- Response: `{ "ok": true, "service": "telurku-railway-scheduler" }`
## Local Test
```bash
cd railway-scheduler
npm install
cp .env.example .env
# isi env yang benar
npm start
```
## Data Path yang Dipakai
- Read: `kontrol/penjadwalan`
- Read: `kontrol/kandang`
- Read: `data`
- Write: `riwayat/records`
- Write: `riwayat/summary`
- Write: `panen_snapshot/{date}`
- Write lock: `scheduler_runs/{date}`
## Reset Otomatis Sore
Setelah jadwal sore berhasil dieksekusi, worker akan me-reset:
- `data/infra1 = 0`
- `data/infra2 = 0`
Ringkasan harian di `riwayat/summary` tetap disimpan untuk kebutuhan tampilan Flutter.
=======
# lurtelurku_backend
Deployment project for Railway
>>>>>>> 6d5419d62de4e76250a0a5160a8d0820de478a16