From b85605470e3440debcf37cff3d6afd99a09df67c Mon Sep 17 00:00:00 2001 From: Darwin D Wu Date: Sat, 4 Nov 2023 16:52:37 -0700 Subject: [PATCH] add sleep --- dev/event.ex | 2 ++ lib/inngest/function/input.ex | 2 +- lib/inngest/step_tool.ex | 25 ++++++++++++++++++++----- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/dev/event.ex b/dev/event.ex index aa25b71..94ea24a 100644 --- a/dev/event.ex +++ b/dev/event.ex @@ -17,6 +17,8 @@ defmodule Inngest.Dev.EventFn2 do end) |> IO.inspect() + step.sleep(ctx, "sleep-test", "10s") + IO.inspect("Second log") name = diff --git a/lib/inngest/function/input.ex b/lib/inngest/function/input.ex index bd0602d..63de72c 100644 --- a/lib/inngest/function/input.ex +++ b/lib/inngest/function/input.ex @@ -26,7 +26,7 @@ defmodule Inngest.Function.Context do :attempt, :run_id, :stack, - :steps + steps: %{} ] @type t() :: %__MODULE__{ diff --git a/lib/inngest/step_tool.ex b/lib/inngest/step_tool.ex index 1ee0476..cb1a2a6 100644 --- a/lib/inngest/step_tool.ex +++ b/lib/inngest/step_tool.ex @@ -1,17 +1,17 @@ defmodule Inngest.StepTool do @moduledoc false - alias Inngest.Function.{UnhashedOp, GeneratorOpCode} + alias Inngest.Function.{Context, UnhashedOp, GeneratorOpCode} @type id() :: binary() - @spec run(map(), id(), fun()) :: nil - def run(ctx, step_id, func) do + @spec run(Context.t(), id(), fun()) :: any() + def run(%{steps: steps} = _ctx, step_id, func) do op = %UnhashedOp{name: step_id, op: "Step"} hashed_id = UnhashedOp.hash(op) # check for hash - case ctx |> Map.get(:steps, %{}) |> Map.get(hashed_id) do + case Map.get(steps, hashed_id) do nil -> # if not, execute function result = func.() @@ -31,7 +31,22 @@ defmodule Inngest.StepTool do end end - def sleep() do + @spec sleep(Context.t(), id(), binary()) :: nil + def sleep(%{steps: steps} = _ctx, step_id, duration) do + op = %UnhashedOp{name: step_id, op: "Sleep"} + hashed_id = UnhashedOp.hash(op) + + if Map.has_key?(steps, hashed_id) do + nil + else + throw(%GeneratorOpCode{ + id: hashed_id, + name: duration, + display_name: step_id, + op: op.op, + data: nil + }) + end end def sleep_until() do