mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 10:18:54 +00:00
@@ -278,7 +278,7 @@ iex(api@api-b02t.us-east1-d.c.firezone-staging.internal)1>
|
||||
One-liner to connect to a running application container:
|
||||
|
||||
```bash
|
||||
❯ gcloud compute ssh web-w2f6 --tunnel-through-iap -- '$(docker ps | grep klt- | head -n 1 | awk '\''{split($NF, arr, "-"); print "docker exec -it " $NF " bin/" arr[2] " remote";}'\'')'
|
||||
❯ gcloud compute ssh $(gcloud compute instances list | grep "web-" | tail -n 1 | awk '{ print $1 }') --tunnel-through-iap -- '$(docker ps | grep klt- | head -n 1 | awk '\''{split($NF, arr, "-"); print "docker exec -it " $NF " bin/" arr[2] " remote";}'\'')'
|
||||
|
||||
Interactive Elixir (1.15.2) - press Ctrl+C to exit (type h() ENTER for help)
|
||||
iex(web@web-w2f6.us-east1-d.c.firezone-staging.internal)1>
|
||||
|
||||
@@ -82,10 +82,11 @@ defmodule API.Client.Channel do
|
||||
OpenTelemetry.Ctx.attach(opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "client.ice_candidates", %{
|
||||
gateway_id: gateway_id,
|
||||
candidates_length: length(candidates)
|
||||
} do
|
||||
OpenTelemetry.Tracer.with_span "client.ice_candidates",
|
||||
attributes: %{
|
||||
gateway_id: gateway_id,
|
||||
candidates_length: length(candidates)
|
||||
} do
|
||||
push(socket, "ice_candidates", %{
|
||||
gateway_id: gateway_id,
|
||||
candidates: candidates
|
||||
@@ -105,7 +106,7 @@ defmodule API.Client.Channel do
|
||||
OpenTelemetry.Ctx.attach(opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "client.connect", %{resource_id: resource_id} do
|
||||
OpenTelemetry.Tracer.with_span "client.connect", attributes: %{resource_id: resource_id} do
|
||||
reply(
|
||||
socket_ref,
|
||||
{:ok,
|
||||
@@ -125,7 +126,8 @@ defmodule API.Client.Channel do
|
||||
OpenTelemetry.Ctx.attach(socket.assigns.opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(socket.assigns.opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "client.resource_added", %{resource_id: resource_id} do
|
||||
OpenTelemetry.Tracer.with_span "client.resource_added",
|
||||
attributes: %{resource_id: resource_id} do
|
||||
with {:ok, resource} <- Resources.fetch_resource_by_id(resource_id, socket.assigns.subject) do
|
||||
push(socket, "resource_added", Views.Resource.render(resource))
|
||||
end
|
||||
@@ -138,7 +140,8 @@ defmodule API.Client.Channel do
|
||||
OpenTelemetry.Ctx.attach(socket.assigns.opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(socket.assigns.opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "client.resource_updated", %{resource_id: resource_id} do
|
||||
OpenTelemetry.Tracer.with_span "client.resource_updated",
|
||||
attributes: %{resource_id: resource_id} do
|
||||
with {:ok, resource} <- Resources.fetch_resource_by_id(resource_id, socket.assigns.subject) do
|
||||
push(socket, "resource_updated", Views.Resource.render(resource))
|
||||
end
|
||||
@@ -151,7 +154,8 @@ defmodule API.Client.Channel do
|
||||
OpenTelemetry.Ctx.attach(socket.assigns.opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(socket.assigns.opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "client.resource_removed", %{resource_id: resource_id} do
|
||||
OpenTelemetry.Tracer.with_span "client.resource_removed",
|
||||
attributes: %{resource_id: resource_id} do
|
||||
push(socket, "resource_removed", resource_id)
|
||||
{:noreply, socket}
|
||||
end
|
||||
@@ -174,7 +178,7 @@ defmodule API.Client.Channel do
|
||||
OpenTelemetry.Ctx.attach(socket.assigns.opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(socket.assigns.opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "client.prepare_connection", attrs do
|
||||
OpenTelemetry.Tracer.with_span "client.prepare_connection", attributes: attrs do
|
||||
connected_gateway_ids = Map.get(attrs, "connected_gateway_ids", [])
|
||||
|
||||
with {:ok, resource} <-
|
||||
@@ -191,6 +195,11 @@ defmodule API.Client.Channel do
|
||||
socket.assigns.client.last_seen_remote_ip_location_lon
|
||||
}
|
||||
|
||||
OpenTelemetry.Tracer.set_attribute(:relays_length, length(relays))
|
||||
OpenTelemetry.Tracer.set_attribute(:gateways_length, length(gateways))
|
||||
OpenTelemetry.Tracer.set_attribute(:relay_hosting_type, relay_hosting_type)
|
||||
OpenTelemetry.Tracer.set_attribute(:relay_connection_type, relay_connection_type)
|
||||
|
||||
relays = Relays.load_balance_relays(location, relays)
|
||||
gateway = Gateways.load_balance_gateways(location, gateways, connected_gateway_ids)
|
||||
|
||||
@@ -234,7 +243,7 @@ defmodule API.Client.Channel do
|
||||
OpenTelemetry.Ctx.attach(socket.assigns.opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(socket.assigns.opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "client.reuse_connection", attrs do
|
||||
OpenTelemetry.Tracer.with_span "client.reuse_connection", attributes: attrs do
|
||||
with {:ok, gateway} <- Gateways.fetch_gateway_by_id(gateway_id, socket.assigns.subject),
|
||||
{:ok, resource, flow} <-
|
||||
Flows.authorize_flow(
|
||||
@@ -287,7 +296,7 @@ defmodule API.Client.Channel do
|
||||
OpenTelemetry.Ctx.attach(socket.assigns.opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(socket.assigns.opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "client.request_connection", ctx_attrs do
|
||||
OpenTelemetry.Tracer.with_span "client.request_connection", attributes: ctx_attrs do
|
||||
with {:ok, gateway} <- Gateways.fetch_gateway_by_id(gateway_id, socket.assigns.subject),
|
||||
{:ok, resource, flow} <-
|
||||
Flows.authorize_flow(
|
||||
|
||||
@@ -39,6 +39,8 @@ defmodule API.Client.Socket do
|
||||
{:ok, client} <- Clients.upsert_client(attrs, subject) do
|
||||
OpenTelemetry.Tracer.set_attributes(%{
|
||||
client_id: client.id,
|
||||
lat: client.last_seen_remote_ip_location_lat,
|
||||
lon: client.last_seen_remote_ip_location_lon,
|
||||
account_id: subject.account.id
|
||||
})
|
||||
|
||||
|
||||
@@ -62,10 +62,11 @@ defmodule API.Gateway.Channel do
|
||||
OpenTelemetry.Ctx.attach(opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "gateway.ice_candidates", %{
|
||||
client_id: client_id,
|
||||
candidates_length: length(candidates)
|
||||
} do
|
||||
OpenTelemetry.Tracer.with_span "gateway.ice_candidates",
|
||||
attributes: %{
|
||||
client_id: client_id,
|
||||
candidates_length: length(candidates)
|
||||
} do
|
||||
push(socket, "ice_candidates", %{
|
||||
client_id: client_id,
|
||||
candidates: candidates
|
||||
@@ -104,10 +105,11 @@ defmodule API.Gateway.Channel do
|
||||
OpenTelemetry.Ctx.attach(socket.assigns.opentelemetry_ctx)
|
||||
OpenTelemetry.Tracer.set_current_span(socket.assigns.opentelemetry_span_ctx)
|
||||
|
||||
OpenTelemetry.Tracer.with_span "gateway.reject_access", %{
|
||||
client_id: client_id,
|
||||
resource_id: resource_id
|
||||
} do
|
||||
OpenTelemetry.Tracer.with_span "gateway.reject_access",
|
||||
attributes: %{
|
||||
client_id: client_id,
|
||||
resource_id: resource_id
|
||||
} do
|
||||
push(socket, "reject_access", %{
|
||||
client_id: client_id,
|
||||
resource_id: resource_id
|
||||
|
||||
@@ -417,7 +417,7 @@ defmodule Domain.Gateways do
|
||||
{gateway.last_seen_remote_ip_location_lat, gateway.last_seen_remote_ip_location_lon}
|
||||
end)
|
||||
|> Enum.map(fn
|
||||
{{nil, nil}, gateway} ->
|
||||
{{gateway_lat, gateway_lon}, gateway} when is_nil(gateway_lat) or is_nil(gateway_lon) ->
|
||||
{Geo.fetch_radius_of_earth_km!(), gateway}
|
||||
|
||||
{{gateway_lat, gateway_lon}, gateway} ->
|
||||
@@ -427,6 +427,10 @@ defmodule Domain.Gateways do
|
||||
|> Enum.sort_by(&elem(&1, 0))
|
||||
|> Enum.at(0)
|
||||
|> elem(1)
|
||||
|> Enum.group_by(fn gateway -> gateway.last_seen_version end)
|
||||
|> Enum.sort_by(&elem(&1, 0), :desc)
|
||||
|> Enum.at(0)
|
||||
|> elem(1)
|
||||
|> Enum.random()
|
||||
end
|
||||
|
||||
|
||||
@@ -167,8 +167,7 @@ defmodule Domain.Jobs.Executors.Global do
|
||||
|
||||
Logger.metadata(attributes)
|
||||
|
||||
OpenTelemetry.Tracer.with_span job_callback do
|
||||
OpenTelemetry.Tracer.set_attributes(attributes)
|
||||
OpenTelemetry.Tracer.with_span job_callback, attributes: attributes do
|
||||
_ = apply(module, function, [config])
|
||||
end
|
||||
|
||||
|
||||
@@ -889,6 +889,22 @@ defmodule Domain.GatewaysTest do
|
||||
assert gateway.id == gateway_1.id
|
||||
end
|
||||
|
||||
test "prioritizes gateways of more recent version" do
|
||||
gateway_1 =
|
||||
Fixtures.Gateways.create_gateway(last_seen_user_agent: "iOS/12.7 (iPhone) connlib/1.99")
|
||||
|
||||
gateway_2 =
|
||||
Fixtures.Gateways.create_gateway(last_seen_user_agent: "iOS/12.7 (iPhone) connlib/2.3")
|
||||
|
||||
gateways = [
|
||||
gateway_1,
|
||||
gateway_2
|
||||
]
|
||||
|
||||
assert gateway = load_balance_gateways({32.2029, -80.0131}, gateways)
|
||||
assert gateway.id == gateway_2.id
|
||||
end
|
||||
|
||||
test "returns gateways in two closest regions to a given location" do
|
||||
# Moncks Corner, South Carolina
|
||||
gateway_us_east_1 =
|
||||
@@ -939,10 +955,14 @@ defmodule Domain.GatewaysTest do
|
||||
]
|
||||
|
||||
# multiple attempts are used to increase chances that all gateways in a group are randomly selected
|
||||
for _ <- 0..3 do
|
||||
assert gateway = load_balance_gateways({32.2029, -80.0131}, gateways)
|
||||
assert gateway.id in [gateway_us_east_1.id, gateway_us_east_2.id, gateway_us_east_3.id]
|
||||
end
|
||||
selected =
|
||||
for _ <- 0..12 do
|
||||
assert gateway = load_balance_gateways({32.2029, -80.0131}, gateways)
|
||||
assert gateway.id in [gateway_us_east_1.id, gateway_us_east_2.id, gateway_us_east_3.id]
|
||||
gateway.id
|
||||
end
|
||||
|
||||
assert selected |> Enum.uniq() |> length() >= 2
|
||||
|
||||
for _ <- 0..2 do
|
||||
assert gateway = load_balance_gateways({45.5946, -121.1787}, gateways)
|
||||
|
||||
Reference in New Issue
Block a user