diff --git a/lib/towerops_web/live/equipment_live/form.ex b/lib/towerops_web/live/equipment_live/form.ex index bba649ea..38a10993 100644 --- a/lib/towerops_web/live/equipment_live/form.ex +++ b/lib/towerops_web/live/equipment_live/form.ex @@ -107,29 +107,8 @@ defmodule ToweropsWeb.EquipmentLive.Form do @impl true def handle_event("test_snmp", _params, socket) do - form_data = socket.assigns.form.data - params = socket.assigns.form.params - - ip_address = params["ip_address"] || form_data.ip_address - snmp_community = params["snmp_community"] || form_data.snmp_community - snmp_version = params["snmp_version"] || form_data.snmp_version - snmp_port = params["snmp_port"] || form_data.snmp_port || 161 - - snmp_port = - case snmp_port do - port when is_integer(port) -> port - port when is_binary(port) -> String.to_integer(port) - _ -> 161 - end - - result = - case Snmp.test_connection(ip_address, snmp_community, snmp_version, snmp_port) do - {:ok, message} -> - %{success: true, message: message} - - {:error, reason} -> - %{success: false, message: "Connection failed: #{inspect(reason)}"} - end + snmp_config = extract_snmp_config(socket.assigns.form) + result = test_snmp_connection(snmp_config) {:noreply, assign(socket, :snmp_test_result, result)} end @@ -200,4 +179,35 @@ defmodule ToweropsWeb.EquipmentLive.Form do {:noreply, assign(socket, :form, to_form(changeset))} end end + + defp extract_snmp_config(form) do + form_data = form.data + params = form.params + + %{ + ip_address: params["ip_address"] || form_data.ip_address, + snmp_community: params["snmp_community"] || form_data.snmp_community, + snmp_version: params["snmp_version"] || form_data.snmp_version, + snmp_port: normalize_port(params["snmp_port"] || form_data.snmp_port || 161) + } + end + + defp normalize_port(port) when is_integer(port), do: port + defp normalize_port(port) when is_binary(port), do: String.to_integer(port) + defp normalize_port(_), do: 161 + + defp test_snmp_connection(config) do + case Snmp.test_connection( + config.ip_address, + config.snmp_community, + config.snmp_version, + config.snmp_port + ) do + {:ok, message} -> + %{success: true, message: message} + + {:error, reason} -> + %{success: false, message: "Connection failed: #{inspect(reason)}"} + end + end end