Batch device count queries to reduce N+1 problem in dashboard.
Changes:
- Add Devices.batch_count_site_devices/1 function
* Uses single GROUP BY query instead of N separate queries
* Returns map of {site_id => %{total: count, down: count}}
* Aggregates both total devices and down devices in one query
- Update Dashboard.get_site_impact_summaries/1 to use batch function
* Eliminates 2N queries (count_site_devices + count_site_devices_down)
* Reduces to 1 query regardless of site count
Performance impact:
- 10 sites: Reduces from 20 device count queries to 1 (95% reduction)
- 50 sites: Reduces from 100 device count queries to 1 (99% reduction)
Remaining N+1 opportunities:
- Gaiia subscriber summaries (N queries)
- Preseem QoE data (M queries where M = total devices)
- Down device listings (N queries)
Files:
- lib/towerops/devices.ex
- lib/towerops/dashboard.ex
- CHANGELOG.txt
|
||
|---|---|---|
| .. | ||
| mix/tasks | ||
| snmpkit | ||
| towerops | ||
| towerops_web | ||
| snmp_lib.ex | ||
| snmp_mgr.ex | ||
| snmpkit.ex | ||
| towerops.ex | ||
| towerops_native.ex | ||
| towerops_web.ex | ||