- 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)
40 lines
1.6 KiB
Elixir
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
|