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.
This commit is contained in:
parent
b328dfb96e
commit
fb4da2df6d
1 changed files with 33 additions and 23 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue