- 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.
58 lines
1.9 KiB
Elixir
58 lines
1.9 KiB
Elixir
defmodule ToweropsWeb.GraphQL.Resolvers.Agent do
|
|
@moduledoc "GraphQL resolvers for agent queries and mutations."
|
|
|
|
alias Towerops.Agents
|
|
alias Towerops.Agents.AgentToken
|
|
alias ToweropsWeb.GraphQL.Resolvers.Helpers
|
|
alias ToweropsWeb.ScopedResource
|
|
|
|
def list(_parent, _args, %{context: %{organization_id: org_id}}) do
|
|
agents = Agents.list_organization_agent_tokens(org_id)
|
|
{:ok, agents}
|
|
end
|
|
|
|
def list(_parent, _args, _resolution), do: Helpers.authentication_error()
|
|
|
|
def get(_parent, %{id: id}, %{context: %{organization_id: org_id}}) do
|
|
case ScopedResource.fetch(AgentToken, id, org_id) do
|
|
{:ok, agent} -> {:ok, agent}
|
|
{:error, _reason} -> {:error, "Agent not found"}
|
|
end
|
|
end
|
|
|
|
def get(_parent, _args, _resolution), do: Helpers.authentication_error()
|
|
|
|
def create(_parent, %{name: name}, %{context: %{organization_id: org_id}}) do
|
|
case Agents.create_agent_token(org_id, name) do
|
|
{:ok, agent_token, raw_token} ->
|
|
{:ok,
|
|
%{
|
|
id: agent_token.id,
|
|
name: agent_token.name,
|
|
enabled: agent_token.enabled,
|
|
token: raw_token,
|
|
inserted_at: agent_token.inserted_at
|
|
}}
|
|
|
|
{:error, changeset} ->
|
|
{:error, Helpers.format_changeset_errors(changeset)}
|
|
end
|
|
end
|
|
|
|
def create(_parent, _args, _resolution), do: Helpers.authentication_error()
|
|
|
|
def delete(_parent, %{id: id}, %{context: %{organization_id: org_id}}) do
|
|
case ScopedResource.fetch(AgentToken, id, org_id) do
|
|
{:ok, _agent} ->
|
|
case Agents.delete_agent_token(id) do
|
|
{:ok, _} -> {:ok, %{success: true, message: "Agent deleted"}}
|
|
{:error, _} -> {:ok, %{success: false, message: "Could not delete agent"}}
|
|
end
|
|
|
|
{:error, _reason} ->
|
|
{:error, "Agent not found"}
|
|
end
|
|
end
|
|
|
|
def delete(_parent, _args, _resolution), do: Helpers.authentication_error()
|
|
end
|