Current section
Files
Jump to
Current section
Files
lib/kiq/script.ex
defmodule Kiq.Script do
@moduledoc false
defmodule BootTask do
@moduledoc false
use Task
alias Kiq.{Pool, Script}
@spec start_link(config: struct()) :: {:ok, pid()}
def start_link(config: config) do
Task.start_link(__MODULE__, :run, [config])
end
@spec start_link(struct()) :: {:ok, pid()}
def run(%_{pool_name: pool}) do
pool
|> Pool.checkout()
|> Script.boot()
end
end
import Redix, only: [noreply_command!: 2]
@typep conn :: GenServer.server()
@typep name :: binary()
@spec boot(conn()) :: :ok
def boot(conn) do
base()
|> Path.join("*.lua")
|> Path.wildcard()
|> Enum.each(&load(conn, &1))
:ok
end
@spec hash(name()) :: binary()
def hash(name) do
path = path(name)
data = File.read!(path)
:sha
|> :crypto.hash(data)
|> Base.encode16(case: :lower)
end
@spec path(name()) :: binary()
def path(name) do
Path.join(base(), name <> ".lua")
end
defp base do
:kiq
|> :code.priv_dir()
|> Path.join("scripts")
end
defp load(conn, path) do
noreply_command!(conn, ["SCRIPT", "LOAD", File.read!(path)])
end
end