E2bEx.Sandboxes (E2bEx v0.1.0)

Copy Markdown View Source

Sandbox operations.

Every function takes an E2bEx.Client as the first argument. Read functions return {:ok, struct | [struct]}; see E2bEx.Sandboxes write functions for lifecycle actions.

Summary

Functions

Connect to (resume) a sandbox with a new timeout (POST /sandboxes/:id/connect).

Create a sandbox (POST /sandboxes).

Get a sandbox by id (GET /sandboxes/:id).

Kill (delete) a sandbox (DELETE /sandboxes/:id).

List running sandboxes (GET /v2/sandboxes).

Get latest metrics for several sandboxes (GET /sandboxes/metrics).

List the team's snapshots (GET /snapshots).

Get structured logs for a sandbox (GET /v2/sandboxes/:id/logs).

Get metrics for a sandbox (GET /sandboxes/:id/metrics).

Pause a sandbox (POST /sandboxes/:id/pause).

Refresh (extend) a sandbox (POST /sandboxes/:id/refreshes).

Replace a running sandbox's egress network config (PUT /sandboxes/:id/network).

Set a sandbox's timeout in seconds from now (POST /sandboxes/:id/timeout).

Snapshot a sandbox into a reusable template (POST /sandboxes/:id/snapshots).

Functions

connect(client, sandbox_id, timeout)

@spec connect(E2bEx.Client.t(), String.t(), non_neg_integer()) ::
  {:ok, E2bEx.Sandbox.t()} | {:error, E2bEx.Error.t()}

Connect to (resume) a sandbox with a new timeout (POST /sandboxes/:id/connect).

create(client, params)

@spec create(E2bEx.Client.t(), map()) ::
  {:ok, E2bEx.Sandbox.t()} | {:error, E2bEx.Error.t()}

Create a sandbox (POST /sandboxes).

params is a map matching the OpenAPI NewSandbox schema, e.g. %{templateID: "tmpl_1", timeout: 30, metadata: %{user: "abc"}}.

Mount team volumes (see E2bEx.Volumes) with volumeMounts: %{templateID: "tmpl_1", volumeMounts: [%{name: "my-vol", path: "/data"}]}.

get(client, sandbox_id)

@spec get(E2bEx.Client.t(), String.t()) ::
  {:ok, E2bEx.Sandbox.t()} | {:error, E2bEx.Error.t()}

Get a sandbox by id (GET /sandboxes/:id).

kill(client, sandbox_id)

@spec kill(E2bEx.Client.t(), String.t()) :: :ok | {:error, E2bEx.Error.t()}

Kill (delete) a sandbox (DELETE /sandboxes/:id).

list(client, opts \\ [])

@spec list(
  E2bEx.Client.t(),
  keyword()
) :: {:ok, [E2bEx.Sandbox.t()]} | {:error, E2bEx.Error.t()}

List running sandboxes (GET /v2/sandboxes).

Options (query)

  • :metadata — metadata filter string, e.g. "user=abc&app=prod".
  • :state — list of states, e.g. ["running", "paused"].
  • :next_token — pagination cursor.
  • :limit — page size.

list_metrics(client, sandbox_ids)

@spec list_metrics(E2bEx.Client.t(), [String.t()]) ::
  {:ok, %{required(String.t()) => E2bEx.SandboxMetric.t()}}
  | {:error, E2bEx.Error.t()}

Get latest metrics for several sandboxes (GET /sandboxes/metrics).

Returns {:ok, %{sandbox_id => E2bEx.SandboxMetric.t()}}.

list_snapshots(client, opts \\ [])

@spec list_snapshots(
  E2bEx.Client.t(),
  keyword()
) :: {:ok, [E2bEx.Snapshot.t()]} | {:error, E2bEx.Error.t()}

List the team's snapshots (GET /snapshots).

Options (query): :sandbox_id (filter by source sandbox), :next_token, :limit.

logs(client, sandbox_id, opts \\ [])

@spec logs(E2bEx.Client.t(), String.t(), keyword()) ::
  {:ok, [E2bEx.SandboxLog.t()]} | {:error, E2bEx.Error.t()}

Get structured logs for a sandbox (GET /v2/sandboxes/:id/logs).

metrics(client, sandbox_id, opts \\ [])

@spec metrics(E2bEx.Client.t(), String.t(), keyword()) ::
  {:ok, [E2bEx.SandboxMetric.t()]} | {:error, E2bEx.Error.t()}

Get metrics for a sandbox (GET /sandboxes/:id/metrics).

Options (query): :start, :end (Unix timestamps, in seconds).

pause(client, sandbox_id)

@spec pause(E2bEx.Client.t(), String.t()) :: :ok | {:error, E2bEx.Error.t()}

Pause a sandbox (POST /sandboxes/:id/pause).

refresh(client, sandbox_id, opts \\ [])

@spec refresh(E2bEx.Client.t(), String.t(), keyword()) ::
  :ok | {:error, E2bEx.Error.t()}

Refresh (extend) a sandbox (POST /sandboxes/:id/refreshes).

Options: :duration — extension in seconds (optional).

set_network(client, sandbox_id, config)

@spec set_network(E2bEx.Client.t(), String.t(), map()) ::
  :ok | {:error, E2bEx.Error.t()}

Replace a running sandbox's egress network config (PUT /sandboxes/:id/network).

config is a map matching the OpenAPI SandboxNetworkUpdateConfig schema.

set_timeout(client, sandbox_id, timeout)

@spec set_timeout(E2bEx.Client.t(), String.t(), non_neg_integer()) ::
  :ok | {:error, E2bEx.Error.t()}

Set a sandbox's timeout in seconds from now (POST /sandboxes/:id/timeout).

snapshot(client, sandbox_id, opts \\ [])

@spec snapshot(E2bEx.Client.t(), String.t(), keyword()) ::
  {:ok, E2bEx.Snapshot.t()} | {:error, E2bEx.Error.t()}

Snapshot a sandbox into a reusable template (POST /sandboxes/:id/snapshots).

Options: :name — optional snapshot name.