86 lines
2.5 KiB
Markdown
86 lines
2.5 KiB
Markdown
# Phase 2 Completion Summary
|
|
|
|
## Goal
|
|
Add cycle persistence to work_orders table with 5-second throttling
|
|
|
|
## Changes Made
|
|
|
|
### Modified Files
|
|
1. **flows.json** - Updated "Machine cycles" function node (ID: 0d023d87a13bf56f)
|
|
|
|
### Code Modifications
|
|
|
|
#### Machine Cycles Function (/home/mdares/projects/Plastico/flows.json:1180)
|
|
|
|
**Added throttling logic:**
|
|
- Added `lastWorkOrderDbWrite` global variable to track last DB write timestamp
|
|
- Implemented 5-second throttle (5000ms) for work_orders persistence
|
|
- Only sends DB update when `timeSinceLastWrite >= 5000`
|
|
- Added debug logging for DB writes
|
|
|
|
**Updated SQL query on 4th output:**
|
|
```sql
|
|
UPDATE work_orders
|
|
SET cycle_count = ?,
|
|
good_parts = ?,
|
|
progress_percent = ?,
|
|
updated_at = NOW()
|
|
WHERE work_order_id = ?
|
|
```
|
|
|
|
**4th Output now sends** (when throttle allows):
|
|
```javascript
|
|
{
|
|
topic: "UPDATE work_orders SET cycle_count = ?, good_parts = ?, progress_percent = ?, updated_at = NOW() WHERE work_order_id = ?",
|
|
payload: [cycles, produced, progress, activeOrder.id]
|
|
}
|
|
```
|
|
|
|
### Wiring Verification
|
|
|
|
✅ Output 1 (port 0): Scrap prompt → link out + debug
|
|
✅ Output 2 (port 1): Production state → multiple consumers
|
|
✅ Output 3 (port 2): KPI trigger → multiple consumers
|
|
✅ Output 4 (port 3): **DB persistence** → DB Guard (Cycles) → mariaDB
|
|
|
|
### How It Works
|
|
|
|
1. Every machine cycle increments `cycleCount` and calculates `good_parts`
|
|
2. On every cycle, check if 5 seconds have passed since last DB write
|
|
3. If yes:
|
|
- Send UPDATE message on output 4
|
|
- Set `lastWorkOrderDbWrite` to current timestamp
|
|
- Log the DB write operation
|
|
4. If no:
|
|
- Send `null` on output 4 (no DB write)
|
|
|
|
### Data Loss Prevention
|
|
|
|
- **Maximum data loss on crash**: 5 seconds of cycles (typically 1-2 cycles depending on cycle time)
|
|
- Balances between:
|
|
- Data persistence (resume work orders)
|
|
- Database load (not writing every 3-15 second cycle)
|
|
- Recovery granularity (acceptable for manufacturing use case)
|
|
|
|
### Backup Created
|
|
|
|
`flows.json.backup_phase2_20251129_055629`
|
|
|
|
## Risk Assessment
|
|
|
|
**Risk Level**: LOW
|
|
- Only adds throttled writes to existing logic
|
|
- Doesn't modify existing UI or state management
|
|
- Default values (0) won't break existing work orders
|
|
- DB writes use parameterized queries (SQL injection safe)
|
|
|
|
## Dependencies Met
|
|
|
|
✅ Phase 1 complete (schema has cycle_count, good_parts columns)
|
|
✅ Existing 4th output wiring to DB Guard intact
|
|
✅ MariaDB node configured and connected
|
|
|
|
## Next Steps
|
|
|
|
Ready for Phase 3: Implement Resume/Restart prompt on Load
|