- 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.
36 lines
940 B
Elixir
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
|