towerops/lib/towerops_web/live/maintenance_live/helpers.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

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