towerops/lib/towerops
Graham McIntire 701ce12f08 perf+refactor: codebase-wide query and antipattern audit
Performance:
- schedule_live: preload page once instead of get_schedule!/1 per row
- alert_live + alerts: DB-side status filter; Repo.aggregate counts replace length/Enum.count over 500-row fetches on every event
- dashboard_live: drop duplicate get_device_status_counts; cap active alerts to 20 + use count_active_alerts/1
- maintenance.active_windows_for_device: 3 round-trips collapsed into one query (per-site-id branch keeps Postgres parameter types unambiguous)
- sites.build_site_tree: O(N^2) -> O(N) via group_by(parent_site_id)
- accounts.sole_owner_organizations: single group_by + having instead of per-org Repo.aggregate loop
- agents + agent_live (org + admin): count_assigned_devices_batch/1 + count_agent_polling_targets/1 (no preloads)
- alert_digest_worker: list_alerts_by_ids/1 batches digest fetch
- gaiia: distinct: true at DB; limit 50 on bidirectional ilike

Indexes:
- maintenance_windows(organization_id, starts_at, ends_at) WHERE suppress_alerts = true
- alerts(check_id) WHERE resolved_at IS NULL

Antipatterns:
- agents.delete_agent_token: PubSub.broadcast moved outside Repo.transaction so a rollback no longer leaves subscribers acting on a non-existent deletion
- integrations_controller.to_atom_keys: replaced String.to_existing_atom on user-controlled JSON keys with explicit allowlist
- 9 Task.start callsites converted to Task.Supervisor.start_child(Towerops.TaskSupervisor, ...) so background DB writes survive shutdown (test-mode discovery shims left as-is for sandbox semantics)
2026-04-28 16:58:51 -05:00
..
accounts tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
admin fix: comprehensive security audit fixes (#108) 2026-03-22 10:10:27 -05:00
agents tests: disable Req retries in test env to eliminate ~7s-per-test delays 2026-04-24 10:04:52 -05:00
alerts tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
api_tokens dialyzer: fix unknown_type warnings (60 → 0) 2026-04-21 09:43:37 -05:00
billing tests: disable Req retries in test env to eliminate ~7s-per-test delays 2026-04-24 10:04:52 -05:00
capacity refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
cn_maestro tests: disable Req retries in test env to eliminate ~7s-per-test delays 2026-04-24 10:04:52 -05:00
config_changes tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
contexts help update 2026-02-04 17:56:48 -06:00
devices dialyzer: fix remaining 88 warnings — clean dialyzer run 2026-04-21 10:32:42 -05:00
ecto_types dialyzer: fix remaining 88 warnings — clean dialyzer run 2026-04-21 10:32:42 -05:00
gaiia tests: disable Req retries in test env to eliminate ~7s-per-test delays 2026-04-24 10:04:52 -05:00
geoip remove Mix.env and support ip database import 2026-01-28 13:08:06 -06:00
integrations paperclip/TOW-21-uisp-integration-phase1 (#31) 2026-03-15 17:57:36 -05:00
job_monitoring more tests and fixes 2026-02-07 11:50:18 -06:00
maintenance Add maintenance windows and weather overlay (backend) 2026-02-16 10:01:19 -06:00
mobile_sessions refactor/dry-improvements (#202) 2026-03-28 10:56:34 -05:00
monitoring tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
netbox tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
on_call feat(on_call): drag-drop reorder + restrictions editor + new-schedule polish 2026-04-28 14:27:38 -05:00
organizations refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
pagerduty tests: remove remaining 1s sleeps in slow tests 2026-04-24 10:13:17 -05:00
preseem tests: disable Req retries in test env to eliminate ~7s-per-test delays 2026-04-24 10:04:52 -05:00
profiles chore: pending worktree changes (k8s probe, profile loader, e2e Makefile) 2026-04-28 12:39:26 -05:00
proto dialyzer: fix remaining 88 warnings — clean dialyzer run 2026-04-21 10:32:42 -05:00
rate_limit chore: rate_limit rewrite + on-call redesign plan + handoff_notifications_mode 2026-04-28 12:17:29 -05:00
reports fix: make sidebar sticky with header and resolve all credo issues (#32) 2026-03-15 18:19:09 -05:00
security dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
settings fix/findings-medium-priority (#188) 2026-03-27 12:31:53 -05:00
sites feat: add geographic location to sites with geocoding, address fields, and Leaflet.js network map 2026-02-14 13:07:14 -06:00
snmp tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
sonar tests: disable Req retries in test env to eliminate ~7s-per-test delays 2026-04-24 10:04:52 -05:00
splynx tests: disable Req retries in test env to eliminate ~7s-per-test delays 2026-04-24 10:04:52 -05:00
status_pages fix: make sidebar sticky with header and resolve all credo issues (#32) 2026-03-15 18:19:09 -05:00
topology tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
uisp tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
visp fix: humanize raw error strings in integration sync modules 2026-03-12 13:53:28 -05:00
weather tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
workers perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
accounts.ex perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
activity_feed.ex reliability-audit-fixes (#181) 2026-03-26 14:10:36 -05:00
admin.ex fix: replace Repo.rollback with proper error handling for Oban compatibility (#201) 2026-03-28 09:11:21 -05:00
agents.ex perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
alerts.ex perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
api_tokens.ex dialyzer: fix remaining 88 warnings — clean dialyzer run 2026-04-21 10:32:42 -05:00
application.ex perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
billing.ex fix: infer device role during discovery and handle string price values 2026-03-10 13:25:51 -05:00
capacity.ex done i think (#177) 2026-03-26 10:23:26 -05:00
config_changes.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
dashboard.ex fix/findings-medium-priority (#188) 2026-03-27 12:31:53 -05:00
devices.ex dialyzer: remove all @dialyzer suppressions, refactor Ecto.Multi → Repo.transaction 2026-04-21 13:04:03 -05:00
error_tracker_ignorer.ex Ignore pod shutdown errors in ErrorTracker 2026-02-17 10:59:51 -06:00
gaiia.ex perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
geocoding.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
geoip.ex db-performance-migrations (#234) 2026-04-04 14:22:25 -05:00
honeybadger_filter.ex fix: suppress benign shutdown errors during K8s pod rollouts 2026-02-12 12:16:40 -06:00
http.ex tests: disable Req retries in test env to eliminate ~7s-per-test delays 2026-04-24 10:04:52 -05:00
integrations.ex refactor/dry-improvements (#202) 2026-03-28 10:56:34 -05:00
job_monitoring.ex more tests and fixes 2026-02-07 11:50:18 -06:00
log_filter.ex Add comprehensive Dialyzer type specifications 2026-01-17 10:52:02 -06:00
logger_filters.ex fix: suppress benign shutdown errors during K8s pod rollouts 2026-02-12 12:16:40 -06:00
mailer.ex moduledocs 2026-01-17 15:08:49 -06:00
maintenance.ex perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
mobile_sessions.ex fix: replace Repo.rollback with proper error handling for Oban compatibility (#201) 2026-03-28 09:11:21 -05:00
monitoring.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
numeric.ex refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
on_call.ex feat(on_call): drag-drop reorder + restrictions editor + new-schedule polish 2026-04-28 14:27:38 -05:00
organizations.ex dialyzer: remove all @dialyzer suppressions, refactor Ecto.Multi → Repo.transaction 2026-04-21 13:04:03 -05:00
preseem.ex fix/findings-medium-priority (#188) 2026-03-27 12:31:53 -05:00
profiles.ex fix/findings-medium-priority (#188) 2026-03-27 12:31:53 -05:00
query_helpers.ex refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
rate_limit.ex feat(on_call): PagerDuty-style escalation policy redesign + dialyzer fix 2026-04-28 12:36:41 -05:00
redis_health_check.ex fix: remove to_charlist conversion for Redix host option 2026-01-24 17:49:57 -06:00
release.ex fix dialyzer things 2026-01-03 12:56:40 -06:00
repo.ex moduledocs 2026-01-17 15:08:49 -06:00
reports.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
result.ex refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
rf_links.ex fix: make sidebar sticky with header and resolve all credo issues (#32) 2026-03-15 18:19:09 -05:00
search.ex refactor: fix all credo strict issues, format all code, fix broken routes 2026-02-13 19:34:40 -06:00
settings.ex fix/test-failures (#112) 2026-03-22 13:02:06 -05:00
sites.ex perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
snmp.ex dialyzer: fix remaining 88 warnings — clean dialyzer run 2026-04-21 10:32:42 -05:00
status_pages.ex refactor/dry-improvements (#202) 2026-03-28 10:56:34 -05:00
time.ex refactor/dry-improvements (#202) 2026-03-28 10:56:34 -05:00
topology.ex dialyzer: fix remaining 88 warnings — clean dialyzer run 2026-04-21 10:32:42 -05:00
trace.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
url_validator.ex refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
vault.ex add mikrotik device handling 2026-02-01 16:42:39 -06:00
weather.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00