diff --git a/lib/mix/tasks/backfill_checks.ex b/lib/mix/tasks/backfill_checks.ex index 08c726b8..24f3642e 100644 --- a/lib/mix/tasks/backfill_checks.ex +++ b/lib/mix/tasks/backfill_checks.ex @@ -20,8 +20,6 @@ defmodule Mix.Tasks.Backfill.Checks do alias Towerops.Repo alias Towerops.Snmp.Discovery - require Logger - @impl Mix.Task def run(args) do Mix.Task.run("app.start") diff --git a/lib/mix/tasks/import_profiles.ex b/lib/mix/tasks/import_profiles.ex index a1b861c0..ae224bac 100644 --- a/lib/mix/tasks/import_profiles.ex +++ b/lib/mix/tasks/import_profiles.ex @@ -37,8 +37,6 @@ defmodule Mix.Tasks.ImportProfiles do alias Towerops.Profiles.SensorOid alias Towerops.Repo - require Logger - @requirements ["app.start"] def run(args) do diff --git a/lib/snmpkit/snmp_lib/asn1.ex b/lib/snmpkit/snmp_lib/asn1.ex index 3e2a1574..1131aac2 100644 --- a/lib/snmpkit/snmp_lib/asn1.ex +++ b/lib/snmpkit/snmp_lib/asn1.ex @@ -487,7 +487,7 @@ defmodule SnmpKit.SnmpLib.ASN1 do defp decode_long_form_length(data, num_octets) do case data do - <> -> + <> -> length = :binary.decode_unsigned(length_bytes, :big) {:ok, {length, remaining}} diff --git a/lib/snmpkit/snmp_lib/host_parser.ex b/lib/snmpkit/snmp_lib/host_parser.ex index 1e17ee7e..2bba0d27 100644 --- a/lib/snmpkit/snmp_lib/host_parser.ex +++ b/lib/snmpkit/snmp_lib/host_parser.ex @@ -32,8 +32,6 @@ defmodule SnmpKit.SnmpLib.HostParser do `{:error, reason}` for invalid input """ - require Logger - @type ip4_tuple :: {0..255, 0..255, 0..255, 0..255} @type ip6_tuple :: {0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535, 0..65_535} @@ -130,19 +128,12 @@ defmodule SnmpKit.SnmpLib.HostParser do parse_string(input, default_port) end - # Charlist input - def parse(input, default_port) when is_list(input) do - # Validate charlist contains only valid ASCII/UTF-8 characters - if valid_charlist?(input) do - try do - string_input = List.to_string(input) - parse_string(string_input, default_port) - rescue - # Not a valid charlist - _ -> {:error, :invalid_charlist} - end + # Keyword list input: [host: ..., port: ...] + def parse([_ | _] = input, default_port) do + if Keyword.keyword?(input) do + parse_keyword(input, default_port) else - {:error, :invalid_charlist} + parse_charlist(input, default_port) end end @@ -156,13 +147,19 @@ defmodule SnmpKit.SnmpLib.HostParser do end end - # Keyword list input: [host: ..., port: ...] - def parse([_ | _] = input, default_port) when is_list(input) do - if Keyword.keyword?(input) do - parse_keyword(input, default_port) + # Charlist input + def parse(input, default_port) when is_list(input) do + # Validate charlist contains only valid ASCII/UTF-8 characters + if valid_charlist?(input) do + try do + string_input = List.to_string(input) + parse_string(string_input, default_port) + rescue + # Not a valid charlist + _ -> {:error, :invalid_charlist} + end else - # Try as charlist - parse_charlist(input, default_port) + {:error, :invalid_charlist} end end diff --git a/lib/snmpkit/snmp_lib/mib/parser.ex b/lib/snmpkit/snmp_lib/mib/parser.ex index 090d02d8..5d370c0d 100644 --- a/lib/snmpkit/snmp_lib/mib/parser.ex +++ b/lib/snmpkit/snmp_lib/mib/parser.ex @@ -666,8 +666,6 @@ defmodule SnmpKit.SnmpLib.MIB.Parser do _ -> list end - defp convert_deep_charlist(other), do: other - defp list_of_charlists?(list) do Enum.all?(list, fn sublist when is_list(sublist) -> charlist?(sublist) diff --git a/lib/snmpkit/snmp_lib/mib/registry.ex b/lib/snmpkit/snmp_lib/mib/registry.ex index 0fd91cf0..1eb0ed1e 100644 --- a/lib/snmpkit/snmp_lib/mib/registry.ex +++ b/lib/snmpkit/snmp_lib/mib/registry.ex @@ -8,8 +8,6 @@ defmodule SnmpKit.SnmpLib.MIB.Registry do alias SnmpKit.SnmpLib.OID - require Logger - @standard_mibs %{ # System group (1.3.6.1.2.1.1) "sysDescr" => [1, 3, 6, 1, 2, 1, 1, 1], diff --git a/lib/snmpkit/snmp_lib/pdu/decoder.ex b/lib/snmpkit/snmp_lib/pdu/decoder.ex index fdc0d693..74a555d3 100644 --- a/lib/snmpkit/snmp_lib/pdu/decoder.ex +++ b/lib/snmpkit/snmp_lib/pdu/decoder.ex @@ -114,8 +114,6 @@ defmodule SnmpKit.SnmpLib.PDU.Decoder do end end - defp peek_version(_), do: {:error, :invalid_data} - @doc """ Alias for decode/1. """ @@ -136,9 +134,6 @@ defmodule SnmpKit.SnmpLib.PDU.Decoder do pdu: pdu }} else - {:error, reason} when is_tuple(reason) -> - {:error, reason} - {:error, reason} -> {:error, {:message_parse_error, reason}} end @@ -159,7 +154,7 @@ defmodule SnmpKit.SnmpLib.PDU.Decoder do num_length_bytes = length_of_length - 128 if num_length_bytes > 0 and num_length_bytes <= 4 and byte_size(rest) >= num_length_bytes do - <> = rest + <> = rest actual_length = :binary.decode_unsigned(length_bytes, :big) if byte_size(remaining) >= actual_length do @@ -226,7 +221,7 @@ defmodule SnmpKit.SnmpLib.PDU.Decoder do num_length_bytes = length_of_length - 128 if num_length_bytes > 0 and num_length_bytes <= 4 and byte_size(rest) >= num_length_bytes do - <> = rest + <> = rest actual_length = :binary.decode_unsigned(length_bytes, :big) if byte_size(remaining_with_content) >= actual_length do diff --git a/lib/snmpkit/snmp_lib/pdu/encoder.ex b/lib/snmpkit/snmp_lib/pdu/encoder.ex index da7ddff4..11d5c5c9 100644 --- a/lib/snmpkit/snmp_lib/pdu/encoder.ex +++ b/lib/snmpkit/snmp_lib/pdu/encoder.ex @@ -76,8 +76,6 @@ defmodule SnmpKit.SnmpLib.PDU.Encoder do case encode_pdu_fast(pdu) do {:ok, result} when is_binary(result) -> {:ok, result} {:error, reason} -> {:error, reason} - result when is_binary(result) -> {:ok, result} - other -> {:error, {:invalid_pdu_result, other}} end rescue error -> {:error, {:encoding_error, error}} diff --git a/lib/snmpkit/snmp_lib/types.ex b/lib/snmpkit/snmp_lib/types.ex index 198e1484..bb9e6454 100644 --- a/lib/snmpkit/snmp_lib/types.ex +++ b/lib/snmpkit/snmp_lib/types.ex @@ -940,11 +940,10 @@ defmodule SnmpKit.SnmpLib.Types do defp perform_encoding(value, :boolean) when is_boolean(value), do: {:ok, value} defp perform_encoding(value, :object_identifier) when is_list(value), do: {:ok, value} defp perform_encoding(value, :oid) when is_list(value), do: {:ok, value} - defp perform_encoding(_value, :null), do: {:ok, nil} - defp perform_encoding(nil, :null), do: {:ok, nil} - defp perform_encoding(:null, :null), do: {:ok, nil} defp perform_encoding(value, :opaque) when is_binary(value), do: {:ok, value} + defp perform_encoding(<>, :ip_address), do: {:ok, {a, b, c, d}} + # Handle IP address encoding defp perform_encoding(value, :ip_address) when is_binary(value) do case parse_ip_address(value) do @@ -958,8 +957,6 @@ defmodule SnmpKit.SnmpLib.Types do {:ok, value} end - defp perform_encoding(<>, :ip_address), do: {:ok, {a, b, c, d}} - # Handle OID string encoding defp perform_encoding(value, :object_identifier) when is_binary(value) do case OID.string_to_list(value) do @@ -1022,6 +1019,4 @@ defmodule SnmpKit.SnmpLib.Types do end) and length(list) >= 2 end end - - defp oid_list?(_), do: false end diff --git a/lib/snmpkit/snmp_lib/utils.ex b/lib/snmpkit/snmp_lib/utils.ex index 452408db..6b4f7f6d 100644 --- a/lib/snmpkit/snmp_lib/utils.ex +++ b/lib/snmpkit/snmp_lib/utils.ex @@ -59,8 +59,6 @@ defmodule SnmpKit.SnmpLib.Utils do alias SnmpKit.SnmpLib.Error - require Logger - @formatting SnmpKit.Formatting @type oid :: [non_neg_integer()] @@ -659,16 +657,12 @@ defmodule SnmpKit.SnmpLib.Utils do Enum.all?([a, b, c, d], &valid_ipv4_octet?/1) end - defp valid_ip_tuple?(_), do: false - defp valid_ipv4_octet?(n), do: is_integer(n) and n >= 0 and n <= 255 defp valid_ipv6_tuple?({a, b, c, d, e, f, g, h}) do Enum.all?([a, b, c, d, e, f, g, h], &valid_ipv6_segment?/1) end - defp valid_ipv6_tuple?(_), do: false - defp valid_ipv6_segment?(n), do: is_integer(n) and n >= 0 and n <= 65_535 defp ipv4_or_simple_hostname?(host_str) do diff --git a/lib/snmpkit/snmp_lib/walker.ex b/lib/snmpkit/snmp_lib/walker.ex index 45427271..7927c235 100644 --- a/lib/snmpkit/snmp_lib/walker.ex +++ b/lib/snmpkit/snmp_lib/walker.ex @@ -46,8 +46,6 @@ defmodule SnmpKit.SnmpLib.Walker do alias SnmpKit.SnmpLib.Manager alias SnmpKit.SnmpLib.OID - require Logger - @default_max_repetitions 30 @default_timeout 10_000 @default_max_retries 3 diff --git a/lib/snmpkit/snmp_mgr/core.ex b/lib/snmpkit/snmp_mgr/core.ex index 280b6232..0a64e0a6 100644 --- a/lib/snmpkit/snmp_mgr/core.ex +++ b/lib/snmpkit/snmp_mgr/core.ex @@ -99,12 +99,6 @@ defmodule SnmpKit.SnmpMgr.Core do {:ok, {type, value}} -> {:ok, {type, value}} - # Type information must be preserved - reject responses without type information - {:ok, value} -> - {:error, - {:type_information_lost, - "SNMP GET operation must preserve type information. Got value without type: #{inspect(value)}"}} - {:error, reason} -> {:error, reason} end @@ -150,12 +144,6 @@ defmodule SnmpKit.SnmpMgr.Core do {:ok, {type, value}} -> {:ok, {oid_string, type, value}} - {:ok, value} -> - # Type information must be preserved - reject responses without type information - {:error, - {:type_information_lost, - "SNMP GET operation must preserve type information. Got value without type for OID #{oid_string}: #{inspect(value)}"}} - {:error, reason} -> {:error, reason} end @@ -464,7 +452,6 @@ defmodule SnmpKit.SnmpMgr.Core do defp parse_numeric_oid(oid_string) do case OID.string_to_list(oid_string) do {:ok, [_ | _] = oid_list} -> {:ok, oid_list} - {:ok, []} -> {:ok, [1, 3]} error -> error end end diff --git a/lib/snmpkit/snmp_mgr/mib.ex b/lib/snmpkit/snmp_mgr/mib.ex index d50b58ca..73878feb 100644 --- a/lib/snmpkit/snmp_mgr/mib.ex +++ b/lib/snmpkit/snmp_mgr/mib.ex @@ -12,8 +12,6 @@ defmodule SnmpKit.SnmpMgr.MIB do alias SnmpKit.SnmpLib.MIB.Parser alias SnmpKit.SnmpLib.OID - require Logger - @compile {:no_warn_undefined, [:snmpc, :snmp_misc]} @standard_mibs %{ diff --git a/lib/towerops/application.ex b/lib/towerops/application.ex index e271ff90..89be362a 100644 --- a/lib/towerops/application.ex +++ b/lib/towerops/application.ex @@ -307,11 +307,8 @@ defmodule Towerops.Application do # Add the backend with a unique identifier (using apply to avoid compile-time warnings) apply(LoggerBackends, :add, [{LoggerFileBackend, :file_log}]) - # Configure the backend with path and level - Logger.configure_backend({LoggerFileBackend, :file_log}, - path: "_build/dev.log", - level: :debug - ) + # Use LoggerBackends for modern Elixir (Logger.configure_backend is deprecated) + apply(LoggerBackends, :configure, [{LoggerFileBackend, :file_log}, [path: "_build/dev.log", level: :debug]]) else Logger.debug("LoggerBackends not available - file logging disabled (dev-only feature)") end diff --git a/lib/towerops/config_changes/correlator.ex b/lib/towerops/config_changes/correlator.ex index 55d0bdf1..38e58cae 100644 --- a/lib/towerops/config_changes/correlator.ex +++ b/lib/towerops/config_changes/correlator.ex @@ -15,8 +15,6 @@ defmodule Towerops.ConfigChanges.Correlator do alias Towerops.Preseem.SubscriberMetric alias Towerops.Repo - require Logger - @pre_window_hours 2 @post_window_hours 4 diff --git a/lib/towerops/coverages/raster.ex b/lib/towerops/coverages/raster.ex index 381bca65..ad5502c7 100644 --- a/lib/towerops/coverages/raster.ex +++ b/lib/towerops/coverages/raster.ex @@ -14,8 +14,6 @@ defmodule Towerops.Coverages.Raster do alias Towerops.Coverages.Coverage - require Logger - @nan_sentinel 1.0e30 # cnHeat-ish palette: green strong, yellow good, orange marginal, red poor. diff --git a/lib/towerops/error_tracker_ignorer.ex b/lib/towerops/error_tracker_ignorer.ex index a200d590..c1c3e2ce 100644 --- a/lib/towerops/error_tracker_ignorer.ex +++ b/lib/towerops/error_tracker_ignorer.ex @@ -40,6 +40,4 @@ defmodule Towerops.ErrorTrackerIgnorer do String.contains?(binary_kind, "DBConnection.ConnectionError") and Enum.any?(@transient_db_phrases, &String.contains?(binary_reason, &1)) end - - defp transient_db_error?(_), do: false end diff --git a/lib/towerops/lidar/reader.ex b/lib/towerops/lidar/reader.ex index a16fa0ad..34408a94 100644 --- a/lib/towerops/lidar/reader.ex +++ b/lib/towerops/lidar/reader.ex @@ -9,8 +9,6 @@ defmodule Towerops.Lidar.Reader do alias Towerops.Lidar.Tile - require Logger - @gdal_bin "gdallocationinfo" # GDAL emits this sentinel for nodata in -valonly mode @nodata_sentinels ["-3.4028235e+38", "-3.402823466e+38", "-9999"] diff --git a/lib/towerops/mikrotik/gaiia_resolver.ex b/lib/towerops/mikrotik/gaiia_resolver.ex index a90eb1fd..c615d438 100644 --- a/lib/towerops/mikrotik/gaiia_resolver.ex +++ b/lib/towerops/mikrotik/gaiia_resolver.ex @@ -254,8 +254,6 @@ defmodule Towerops.Mikrotik.GaiiaResolver do end) end - defp smush(nil), do: "" - defp smush(s) when is_binary(s) do s |> String.downcase() diff --git a/lib/towerops/netbox/client.ex b/lib/towerops/netbox/client.ex index 957d221f..f5fc59d4 100644 --- a/lib/towerops/netbox/client.ex +++ b/lib/towerops/netbox/client.ex @@ -8,8 +8,6 @@ defmodule Towerops.NetBox.Client do alias Towerops.HTTP - require Logger - @doc """ Test connectivity and authentication against a NetBox instance. Returns `{:ok, info}` with the NetBox version or `{:error, reason}`. diff --git a/lib/towerops/preseem/baseline.ex b/lib/towerops/preseem/baseline.ex index b072d33d..7f3d8d97 100644 --- a/lib/towerops/preseem/baseline.ex +++ b/lib/towerops/preseem/baseline.ex @@ -70,8 +70,6 @@ defmodule Towerops.Preseem.Baseline do end end - defp compute_stats([]), do: %{mean: 0.0, stddev: 0.0, p5: 0.0, p95: 0.0} - defp compute_stats(values) do float_values = Enum.map(values, &to_float/1) sorted = Enum.sort(float_values) diff --git a/lib/towerops/proto/wire.ex b/lib/towerops/proto/wire.ex index 5ab7c4a3..5504a469 100644 --- a/lib/towerops/proto/wire.ex +++ b/lib/towerops/proto/wire.ex @@ -117,7 +117,7 @@ defmodule Towerops.Proto.Wire do case decode_varint(data) do {:ok, {len, rest}} -> if byte_size(rest) >= len do - <> = rest + <> = rest {:ok, {field_data, remaining}} else {:error, :unexpected_eof} diff --git a/lib/towerops/reports.ex b/lib/towerops/reports.ex index 68a1f013..57c74988 100644 --- a/lib/towerops/reports.ex +++ b/lib/towerops/reports.ex @@ -14,8 +14,6 @@ defmodule Towerops.Reports do alias Towerops.Reports.Report alias Towerops.RfLinks - require Logger - # -- CRUD -- def list_reports(organization_id) do diff --git a/lib/towerops/snmp/discovery.ex b/lib/towerops/snmp/discovery.ex index 5879eaf6..7c7f1e7f 100644 --- a/lib/towerops/snmp/discovery.ex +++ b/lib/towerops/snmp/discovery.ex @@ -1452,8 +1452,6 @@ defmodule Towerops.Snmp.Discovery do defp map_pool_type_to_mempool_type(type), do: type defp calculate_usage_percent(_used, 0), do: 0.0 - defp calculate_usage_percent(_used, nil), do: nil - defp calculate_usage_percent(nil, _total), do: nil defp calculate_usage_percent(used, total) when is_integer(used) and is_integer(total) do Float.round(used / total * 100.0, 2) diff --git a/lib/towerops/snmp/mac_discovery.ex b/lib/towerops/snmp/mac_discovery.ex index 5567a2ee..1229b25c 100644 --- a/lib/towerops/snmp/mac_discovery.ex +++ b/lib/towerops/snmp/mac_discovery.ex @@ -9,8 +9,6 @@ defmodule Towerops.Snmp.MacDiscovery do alias Towerops.Snmp.Client - require Logger - @type mac_entry :: %{ required(:mac_address) => String.t(), required(:port_index) => integer(), diff --git a/lib/towerops/snmp/neighbor_discovery.ex b/lib/towerops/snmp/neighbor_discovery.ex index 3d25ea9f..4350b547 100644 --- a/lib/towerops/snmp/neighbor_discovery.ex +++ b/lib/towerops/snmp/neighbor_discovery.ex @@ -329,8 +329,6 @@ defmodule Towerops.Snmp.NeighborDiscovery do # Helper Functions - defp find_interface_by_index(nil, _interfaces), do: nil - defp find_interface_by_index(if_index, interfaces) do Enum.find(interfaces, fn interface -> interface.if_index == if_index diff --git a/lib/towerops/snmp/profiles/vendors/routeros.ex b/lib/towerops/snmp/profiles/vendors/routeros.ex index 6ba9b7b3..4659a9c2 100644 --- a/lib/towerops/snmp/profiles/vendors/routeros.ex +++ b/lib/towerops/snmp/profiles/vendors/routeros.ex @@ -729,8 +729,6 @@ defmodule Towerops.Snmp.Profiles.Vendors.Routeros do end end - defp format_gauge_description(name, _sensor_type), do: name - # Map mtxrGaugeUnit value to sensor type, unit string, and divisor # Mikrotik reports temperature in tenths of degrees (e.g., 230 = 23.0°C) defp gauge_unit_to_sensor_type(@gauge_unit_celsius), do: {"temperature", "°C", 10} diff --git a/lib/towerops/snmp/topology.ex b/lib/towerops/snmp/topology.ex index 5156cdc3..ac35e326 100644 --- a/lib/towerops/snmp/topology.ex +++ b/lib/towerops/snmp/topology.ex @@ -70,7 +70,7 @@ defmodule Towerops.Snmp.Topology do %{ id: device.id, label: device.name, - type: device_type_atom(device), + type: device_type_atom(device.device_role), status: device.status, site_id: device.site_id, site_name: device.site.name, @@ -191,8 +191,6 @@ defmodule Towerops.Snmp.Topology do defp ipv4?(_), do: false - defp calculate_prefix_length(nil), do: "" - defp calculate_prefix_length(subnet_mask) do subnet_mask |> String.split(".") @@ -262,8 +260,7 @@ defmodule Towerops.Snmp.Topology do |> Enum.sort_by(& &1.device_count, :desc) end - # Convert device type to atom with whitelist to prevent atom exhaustion - defp device_type_atom(device) when is_atom(device), do: device + # Convert device type string to atom with whitelist to prevent atom exhaustion defp device_type_atom("router"), do: :router defp device_type_atom("switch"), do: :switch defp device_type_atom("wireless"), do: :wireless diff --git a/lib/towerops/snmp/wireless_client_discovery.ex b/lib/towerops/snmp/wireless_client_discovery.ex index e3c9220b..1fbe147e 100644 --- a/lib/towerops/snmp/wireless_client_discovery.ex +++ b/lib/towerops/snmp/wireless_client_discovery.ex @@ -12,8 +12,6 @@ defmodule Towerops.Snmp.WirelessClientDiscovery do alias Towerops.Snmp.Client alias Towerops.Snmp.WirelessClientDiscovery.Parser - require Logger - # Cambium ePMP - cambiumAPConnectedSTATable @epmp_base "1.3.6.1.4.1.17713.21.1.2.30.1" diff --git a/lib/towerops/uisp/config_snapshot.ex b/lib/towerops/uisp/config_snapshot.ex index b817ab5e..ee9bb7e3 100644 --- a/lib/towerops/uisp/config_snapshot.ex +++ b/lib/towerops/uisp/config_snapshot.ex @@ -11,8 +11,6 @@ defmodule Towerops.Uisp.ConfigSnapshot do alias Towerops.Repo alias Towerops.Uisp.Client - require Logger - @doc """ Fetches and stores configuration snapshots for all UISP devices. diff --git a/lib/towerops/uisp/gps_sync.ex b/lib/towerops/uisp/gps_sync.ex index 90beb431..a7a22ca7 100644 --- a/lib/towerops/uisp/gps_sync.ex +++ b/lib/towerops/uisp/gps_sync.ex @@ -10,8 +10,6 @@ defmodule Towerops.Uisp.GpsSync do alias Towerops.Repo alias Towerops.Sites.Site - require Logger - @doc """ Updates GPS coordinates for devices and sites from UISP device data. diff --git a/lib/towerops/workers/capacity_insight_worker.ex b/lib/towerops/workers/capacity_insight_worker.ex index c88a001b..4bd05590 100644 --- a/lib/towerops/workers/capacity_insight_worker.ex +++ b/lib/towerops/workers/capacity_insight_worker.ex @@ -22,8 +22,6 @@ defmodule Towerops.Workers.CapacityInsightWorker do alias Towerops.Repo alias Towerops.Snmp.Interface - require Logger - @critical_threshold 90 @warning_threshold 75 @resolve_threshold 70 diff --git a/lib/towerops/workers/gaiia_webhook_worker.ex b/lib/towerops/workers/gaiia_webhook_worker.ex index 627f314d..5b9355cb 100644 --- a/lib/towerops/workers/gaiia_webhook_worker.ex +++ b/lib/towerops/workers/gaiia_webhook_worker.ex @@ -8,8 +8,6 @@ defmodule Towerops.Workers.GaiiaWebhookWorker do alias Towerops.Gaiia.Webhooks - require Logger - @impl Oban.Worker def perform(%Oban.Job{args: %{"organization_id" => org_id, "event" => event, "payload" => payload}}) do Webhooks.process_event(org_id, event, payload) diff --git a/lib/towerops_web/components/layouts.ex b/lib/towerops_web/components/layouts.ex index 19364bad..c469c266 100644 --- a/lib/towerops_web/components/layouts.ex +++ b/lib/towerops_web/components/layouts.ex @@ -10,8 +10,6 @@ defmodule ToweropsWeb.Layouts do alias ToweropsWeb.Helpers.StatusHelpers alias ToweropsWeb.Live.Components.GlobalSearchComponent - require Logger - # Embed all files in layouts/* within this module. # The default root.html.heex file contains the HTML # skeleton of your application, namely HTML headers diff --git a/lib/towerops_web/components/marketing_layouts.ex b/lib/towerops_web/components/marketing_layouts.ex index 8c4da9d7..fc28470f 100644 --- a/lib/towerops_web/components/marketing_layouts.ex +++ b/lib/towerops_web/components/marketing_layouts.ex @@ -6,8 +6,6 @@ defmodule ToweropsWeb.MarketingLayouts do alias ToweropsWeb.Components.CookieConsent - require Logger - @doc """ Renders the marketing layout. diff --git a/lib/towerops_web/controllers/api/v1/mib_controller.ex b/lib/towerops_web/controllers/api/v1/mib_controller.ex index b5ddf0cc..49d638d9 100644 --- a/lib/towerops_web/controllers/api/v1/mib_controller.ex +++ b/lib/towerops_web/controllers/api/v1/mib_controller.ex @@ -473,8 +473,8 @@ defmodule ToweropsWeb.Api.V1.MibController do end defp hardlink?(path) do - case File.lstat(path) do - {:ok, %{nlink: nlink}} -> nlink > 1 + case :file.read_file_info(String.to_charlist(path)) do + {:ok, file_info} -> elem(file_info, 8) > 1 _ -> false end end diff --git a/lib/towerops_web/controllers/api/v1/pagerduty_webhook_controller.ex b/lib/towerops_web/controllers/api/v1/pagerduty_webhook_controller.ex index b66f7a4e..cda5f697 100644 --- a/lib/towerops_web/controllers/api/v1/pagerduty_webhook_controller.ex +++ b/lib/towerops_web/controllers/api/v1/pagerduty_webhook_controller.ex @@ -50,9 +50,6 @@ defmodule ToweropsWeb.Api.V1.PagerdutyWebhookController do {:error, :unhandled_event} -> json(conn, %{status: "accepted"}) - - {:error, _reason} -> - conn |> put_status(500) |> json(%{error: "Internal error"}) end end diff --git a/lib/towerops_web/controllers/api/v1/schedules_controller.ex b/lib/towerops_web/controllers/api/v1/schedules_controller.ex index b3da5764..22b8ae85 100644 --- a/lib/towerops_web/controllers/api/v1/schedules_controller.ex +++ b/lib/towerops_web/controllers/api/v1/schedules_controller.ex @@ -237,9 +237,6 @@ defmodule ToweropsWeb.Api.V1.SchedulesController do |> json(%{errors: translate_errors(changeset)}) end else - {:error, :forbidden} -> - conn |> put_status(:forbidden) |> json(%{error: "Access denied to this schedule"}) - {:error, :not_found} -> conn |> put_status(:not_found) |> json(%{error: "Schedule not found"}) diff --git a/lib/towerops_web/live/dashboard_live.ex b/lib/towerops_web/live/dashboard_live.ex index 73652400..ac6d857e 100644 --- a/lib/towerops_web/live/dashboard_live.ex +++ b/lib/towerops_web/live/dashboard_live.ex @@ -352,7 +352,6 @@ defmodule ToweropsWeb.DashboardLive do defp uptime_color(pct) when pct >= 95.0, do: "text-yellow-600 dark:text-yellow-400" defp uptime_color(_pct), do: "text-red-600 dark:text-red-400" - defp format_qoe(nil), do: "—" defp format_qoe(score), do: :erlang.float_to_binary(score / 1, decimals: 1) defp format_short_datetime(datetime, timezone) do diff --git a/lib/towerops_web/live/device_live/form.ex b/lib/towerops_web/live/device_live/form.ex index fa698ab8..3e9bf161 100644 --- a/lib/towerops_web/live/device_live/form.ex +++ b/lib/towerops_web/live/device_live/form.ex @@ -131,13 +131,10 @@ defmodule ToweropsWeb.DeviceLive.Form do agent && agent.name end - # Add agent_token_id to the changeset data - device_with_agent = Map.put(device, :agent_token_id, agent_token_id) - - # Create changeset and validate to populate form.params for conditional rendering + # Create changeset with agent_token_id and validate to populate form fields changeset = - device_with_agent - |> Devices.change_device(%{}) + device + |> Devices.change_device(%{agent_token_id: agent_token_id}) |> Map.put(:action, :validate) # Get effective SNMP configuration and source @@ -154,7 +151,7 @@ defmodule ToweropsWeb.DeviceLive.Form do socket |> assign(:page_title, t("Edit Device")) - |> assign(:device, device_with_agent) + |> assign(:device, device) |> assign(:form, to_form(changeset)) |> assign(:agent_source, agent_source) |> assign(:effective_agent_name, effective_agent_name) diff --git a/lib/towerops_web/live/device_live/show.ex b/lib/towerops_web/live/device_live/show.ex index 5da16582..2e8bb41f 100644 --- a/lib/towerops_web/live/device_live/show.ex +++ b/lib/towerops_web/live/device_live/show.ex @@ -16,8 +16,6 @@ defmodule ToweropsWeb.DeviceLive.Show do alias ToweropsWeb.DeviceLive.Helpers.SensorClassifiers alias ToweropsWeb.Live.Helpers.AccessControl - require Logger - # SNMP interface type to category mappings @interface_type_categories %{ 6 => "Ethernet", @@ -1158,8 +1156,6 @@ defmodule ToweropsWeb.DeviceLive.Show do TimeHelpers.format_time_ago(datetime) end - defp format_mrr(nil), do: "$0" - defp format_mrr(%Decimal{} = d) do "$#{d |> Decimal.round(2) |> Decimal.to_string(:normal)}" end diff --git a/lib/towerops_web/live/org/integrations_live.ex b/lib/towerops_web/live/org/integrations_live.ex index f44a7ae2..b5f77284 100644 --- a/lib/towerops_web/live/org/integrations_live.ex +++ b/lib/towerops_web/live/org/integrations_live.ex @@ -376,8 +376,6 @@ defmodule ToweropsWeb.Org.IntegrationsLive do end end - defp next_sync_minutes(nil, _interval), do: nil - defp next_sync_minutes(last_synced_at, interval) do next_sync = DateTime.add(last_synced_at, interval * 60, :second) diff = DateTime.diff(next_sync, DateTime.utc_now(), :second) diff --git a/lib/towerops_web/plugs/detect_eu_user.ex b/lib/towerops_web/plugs/detect_eu_user.ex index adffbcd4..b4751280 100644 --- a/lib/towerops_web/plugs/detect_eu_user.ex +++ b/lib/towerops_web/plugs/detect_eu_user.ex @@ -27,8 +27,6 @@ defmodule ToweropsWeb.Plugs.DetectEUUser do @doc false def call(conn, _opts) do - require Logger - # Fetch cookies to check for existing consent conn = fetch_cookies(conn) requires_consent = detect_eu_user(conn) diff --git a/lib/towerops_web/plugs/filter_noisy_logs.ex b/lib/towerops_web/plugs/filter_noisy_logs.ex index 090a7ca8..3b875509 100644 --- a/lib/towerops_web/plugs/filter_noisy_logs.ex +++ b/lib/towerops_web/plugs/filter_noisy_logs.ex @@ -12,8 +12,6 @@ defmodule ToweropsWeb.Plugs.FilterNoisyLogs do """ import Plug.Conn - require Logger - def init(opts), do: opts def call(conn, _opts) do diff --git a/lib/towerops_web/plugs/remote_ip_logger.ex b/lib/towerops_web/plugs/remote_ip_logger.ex index 6e803bc9..0b4ef76c 100644 --- a/lib/towerops_web/plugs/remote_ip_logger.ex +++ b/lib/towerops_web/plugs/remote_ip_logger.ex @@ -9,8 +9,6 @@ defmodule ToweropsWeb.Plugs.RemoteIpLogger do alias ToweropsWeb.RemoteIp - require Logger - def init(opts), do: opts def call(conn, _opts) do