From fb4da2df6dd2971bfc1c50bab29ecda84c5355a1 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Tue, 6 Jan 2026 13:11:07 -0600 Subject: [PATCH] Refactor handle_event SNMP test to reduce complexity Extracted SNMP configuration extraction and connection testing into separate helper functions, reducing cyclomatic complexity from 11 to ~5. - extract_snmp_config/1: Consolidates form data and params - normalize_port/1: Handles port type conversion - test_snmp_connection/1: Performs test and formats result This makes the handle_event callback simpler and each concern easier to test independently. --- lib/towerops_web/live/equipment_live/form.ex | 56 ++++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) 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