mirror of
https://github.com/livebook-dev/livebook.git
synced 2024-09-20 18:15:56 +08:00
8c91a1f788
Co-authored-by: José Valim <jose.valim@dashbit.co>
39 lines
1,005 B
Elixir
39 lines
1,005 B
Elixir
defmodule Livebook.Apps.NotebookAppSpec do
|
|
# App spec carrying an in-memory notebook.
|
|
|
|
defstruct [:slug, :notebook, :load_failures, :should_warmup, version: "1"]
|
|
|
|
def new(notebook, opts \\ []) do
|
|
opts = Keyword.validate!(opts, load_failures: 0, should_warmup: false)
|
|
|
|
slug = notebook.app_settings.slug
|
|
|
|
:persistent_term.put({slug, :failures}, 0)
|
|
|
|
%__MODULE__{
|
|
slug: slug,
|
|
notebook: notebook,
|
|
load_failures: opts[:load_failures],
|
|
should_warmup: opts[:should_warmup]
|
|
}
|
|
end
|
|
end
|
|
|
|
defimpl Livebook.Apps.AppSpec, for: Livebook.Apps.NotebookAppSpec do
|
|
def load(app_spec, _files_tmp_path) do
|
|
key = {app_spec.slug, :failures}
|
|
num_failures = :persistent_term.get(key)
|
|
|
|
if num_failures < app_spec.load_failures do
|
|
:persistent_term.put(key, num_failures + 1)
|
|
{:error, "failed to load"}
|
|
else
|
|
{:ok, %{notebook: app_spec.notebook, warnings: []}}
|
|
end
|
|
end
|
|
|
|
def should_warmup?(app_spec) do
|
|
app_spec.should_warmup
|
|
end
|
|
end
|