towerops/lib/towerops/numeric.ex
Graham McIntire 532d88ffb9
perf: disable Req retry for faster error tests
- Add retry: false to VISP Client HTTP requests
- Add retry: false to ReleaseChecker GitHub API requests
- Remove unused Plug.Conn import from RemoteIpLogger
- Remove unused default parameter from req_get/2

Results:
- VISP sync test: 7007ms → 113ms (62x faster)
- ReleaseChecker test: 7004ms → 17ms (402x faster)
- UserResetPasswordLive test: 1495ms → 284ms (5x faster)

Req's default retry behavior (1s, 2s, 4s exponential backoff) was
causing 7-second delays for HTTP 500/503 error responses in tests.
For these clients, immediate failure is preferred over retries.
2026-03-10 16:19:31 -05:00

36 lines
940 B
Elixir

defmodule Towerops.Numeric do
@moduledoc """
Shared helpers for parsing optional numeric values.
"""
@spec parse_integer(term()) :: integer() | nil
def parse_integer(nil), do: nil
def parse_integer(""), do: nil
def parse_integer("null"), do: nil
def parse_integer(value) when is_integer(value), do: value
def parse_integer(value) when is_binary(value) do
case Integer.parse(value) do
{int, _} -> int
:error -> nil
end
end
def parse_integer(_), do: nil
@spec parse_float(term()) :: float() | nil
def parse_float(nil), do: nil
def parse_float(""), do: nil
def parse_float("null"), do: nil
def parse_float(value) when is_float(value), do: value
def parse_float(value) when is_integer(value), do: value / 1.0
def parse_float(value) when is_binary(value) do
case Float.parse(value) do
{float, _} -> float
:error -> nil
end
end
def parse_float(_), do: nil
end