- 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.
40 lines
1.2 KiB
Elixir
40 lines
1.2 KiB
Elixir
defmodule ToweropsWeb.MaintenanceLive.Helpers do
|
|
@moduledoc """
|
|
Shared presentation helpers for maintenance LiveViews.
|
|
"""
|
|
|
|
use Gettext, backend: ToweropsWeb.Gettext
|
|
|
|
@spec status_for(struct()) :: :active | :upcoming | :past
|
|
def status_for(window) do
|
|
now = DateTime.utc_now()
|
|
|
|
cond do
|
|
DateTime.after?(window.starts_at, now) -> :upcoming
|
|
DateTime.before?(window.ends_at, now) -> :past
|
|
true -> :active
|
|
end
|
|
end
|
|
|
|
@spec status_label(:active | :upcoming | :past) :: String.t()
|
|
def status_label(:active), do: gettext("Active")
|
|
def status_label(:upcoming), do: gettext("Upcoming")
|
|
def status_label(:past), do: gettext("Past")
|
|
|
|
@spec scope_label(struct()) :: String.t()
|
|
def scope_label(window) do
|
|
cond do
|
|
window.device -> gettext("Device: %{name}", name: window.device.name)
|
|
window.site -> gettext("Site: %{name}", name: window.site.name)
|
|
true -> gettext("Org-wide")
|
|
end
|
|
end
|
|
|
|
@spec format_datetime(DateTime.t(), String.t() | nil) :: String.t()
|
|
def format_datetime(dt, timezone) do
|
|
case DateTime.shift_zone(dt, timezone || "Etc/UTC") do
|
|
{:ok, local} -> Calendar.strftime(local, "%b %d, %Y %I:%M %p")
|
|
_ -> Calendar.strftime(dt, "%b %d, %Y %I:%M %p UTC")
|
|
end
|
|
end
|
|
end
|