towerops/lib/towerops_web/helpers/connection_helpers.ex
Graham McIntire a4e08b2aca Major codebase cleanup: DRY schemas, remove dead config, consolidate modules
- Created Towerops.Schema base macro (95+ schemas updated to use it)
- Created Towerops.Snmp.Reading macro (7 reading schemas consolidated)
- Created Towerops.Gaiia.BaseSchema macro (4 Gaiia schemas consolidated)
- Created Towerops.SyncLog shared module (UISP + Preseem merge)
- Created Towerops.LogFilters (3 log filter modules merged into 1)
- Created Towerops.OnCall.ChangesetHelpers (9 on-call schemas simplified)
- Created API v1 ResourceController shared helpers (7 controllers)
- Extracted ConnectionHelpers.format_connection_result (2 LiveViews)
- Removed 5 dead config keys (scopes, mib_dirs, stripe_meter_id, etc.)
- Fixed 2 pre-existing broken tests
- All 13,219 tests pass, Credo clean (0 issues)
2026-06-16 15:29:22 -05:00

40 lines
1.6 KiB
Elixir

defmodule ToweropsWeb.Helpers.ConnectionHelpers do
@moduledoc """
Shared helpers for testing integration/API connections.
Provides a unified `format_connection_result/1` function that
translates raw connection test results into user-facing messages.
"""
require Logger
@doc """
Formats a connection test result into a user-facing message tuple.
Returns `{:ok, message}` for successes or `{:error, message}` for failures.
"""
def format_connection_result({:ok, _body}), do: {:ok, "Connection successful"}
def format_connection_result({:error, :unauthorized}), do: {:error, "Invalid API key"}
def format_connection_result({:error, :forbidden}), do: {:error, "Access forbidden"}
def format_connection_result({:error, {:unexpected_status, status}}),
do: {:error, "API returned unexpected status: #{status}"}
def format_connection_result({:error, %{reason: :timeout}}), do: {:error, "Connection timeout - unable to reach API"}
def format_connection_result({:error, %{reason: :econnrefused}}),
do: {:error, "Connection refused - check API endpoint"}
def format_connection_result({:error, %{reason: :nxdomain}}), do: {:error, "DNS lookup failed - check API endpoint"}
def format_connection_result({:error, {:graphql_errors, errors}}),
do: {:error, "API query failed: #{inspect(Enum.map(errors, & &1["message"]))}"}
# Never expose internal error details to users
def format_connection_result({:error, reason}) do
Logger.warning("Integration connection test failed: #{inspect(reason)}")
{:error, "Connection failed - please check your API credentials and try again"}
end
end