Packages
livebook
0.18.3
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook_web/live/session_live/runtime_component.ex
defmodule LivebookWeb.SessionLive.RuntimeComponent do
use LivebookWeb, :live_component
alias Livebook.Runtime
@impl true
def mount(socket) do
{:ok, assign(socket, error_message: nil)}
end
@impl true
def update(%{event: {:error, message}}, socket) do
{:ok, assign(socket, error_message: message)}
end
def update(assigns, socket) do
with %{runtime_status: :connecting} <- socket.assigns,
%{runtime_status: :connected} <- assigns,
true <- socket.assigns.type == runtime_type(assigns.runtime) do
send(self(), {:push_patch, socket.assigns.return_to})
end
socket =
socket
|> assign(assigns)
|> assign_new(:type, fn -> runtime_type(assigns.runtime) end)
{:ok, socket}
end
@impl true
def render(assigns) do
~H"""
<div class="flex flex-col space-y-5">
<h3 class="text-2xl font-semibold text-gray-800">
Runtime settings
</h3>
<div class="w-full flex-col space-y-5">
<div class="flex space-x-4">
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.Standalone)}
active={@type == "standalone"}
phx-click="set_runtime_type"
phx-value-type="standalone"
phx-target={@myself}
>
Standalone
</.choice_button>
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.Attached)}
active={@type == "attached"}
phx-click="set_runtime_type"
phx-value-type="attached"
phx-target={@myself}
>
Attached node
</.choice_button>
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.Embedded)}
active={@type == "embedded"}
phx-click="set_runtime_type"
phx-value-type="embedded"
phx-target={@myself}
>
Embedded
</.choice_button>
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.Fly)}
active={@type == "fly"}
phx-click="set_runtime_type"
phx-value-type="fly"
phx-target={@myself}
>
Fly.io machine
</.choice_button>
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.K8s)}
active={@type == "k8s"}
phx-click="set_runtime_type"
phx-value-type="k8s"
phx-target={@myself}
>
Kubernetes Pod
</.choice_button>
</div>
<div
:if={@error_message && @type == runtime_type(@runtime) && @runtime_status == :disconnected}
id="runtime-connection-error"
class="error-box scroll-mt-4"
phx-mounted={JS.dispatch("lb:scroll_into_view", detail: %{behavior: "instant"})}
>
{@error_message}
</div>
<div>
<.live_component
id={"runtime-config-#{@type}"}
module={component_for_type(@type)}
session={@session}
runtime={@runtime}
runtime_status={@runtime_status}
runtime_connect_info={@runtime_connect_info}
hub={@hub}
hub_secrets={@hub_secrets}
/>
</div>
</div>
</div>
"""
end
defp runtime_type(%Runtime.Standalone{}), do: "standalone"
defp runtime_type(%Runtime.Attached{}), do: "attached"
defp runtime_type(%Runtime.Embedded{}), do: "embedded"
defp runtime_type(%Runtime.Fly{}), do: "fly"
defp runtime_type(%Runtime.K8s{}), do: "k8s"
defp component_for_type("standalone"), do: LivebookWeb.SessionLive.StandaloneRuntimeComponent
defp component_for_type("attached"), do: LivebookWeb.SessionLive.AttachedRuntimeComponent
defp component_for_type("embedded"), do: LivebookWeb.SessionLive.EmbeddedRuntimeComponent
defp component_for_type("fly"), do: LivebookWeb.SessionLive.FlyRuntimeComponent
defp component_for_type("k8s"), do: LivebookWeb.SessionLive.K8sRuntimeComponent
@impl true
def handle_event("set_runtime_type", %{"type" => type}, socket) do
{:noreply, assign(socket, type: type)}
end
end