Grains.DebugTimer (Grains v1.5.1)

Debug version of Grains.Timer.

To replace the normal Timer with this, start you bread like this:

recipe =, %{
    Source => Grains.periodic(Sink, 10, %{with_timestamps: true}),

grains ={
      Source => {Source, %{}, []},
      Sink => {Sink, %{}, []},
      Source.Timer.Sink => {Grains.DebugTimer, [], []}
{:ok, bread} = Grains.Supervisor.start_link(recipe, grains, id: Test)

debug_timer = Grains.get_name(bread, Source.Timer.Sink)
send(debug_timer, :tick)

With Timestamps

Similarly to Grains.Timer, the debug timer accepts an option with_timestamps. If set to true, the :tick must include a timestamp, which is then used when forwarding the received message downstream. If with_timestamps is not set, the :tick must not include a timestamp, and the message is forwarded as-is.

With Tags

The debug timer also accepts an option with_tag. If set to an atom, the timer will use pull_with_tag instead of pull.

Link to this section Summary

Link to this section Functions

Link to this function


Returns a specification to start this module under a supervisor.

See Supervisor.

Link to this function

handle_pull(from, state)

Callback implementation for Grains.GenGrain.handle_pull/2.

Link to this function

handle_pull(from, tag, state)

Callback implementation for Grains.GenGrain.handle_pull/3.

Link to this function

handle_push(msg, from, state)

Callback implementation for Grains.GenGrain.handle_push/3.

Callback implementation for GenServer.init/1.

Link to this function

name(left, grain)


Link to this function


See Grains.GenGrain.own_full_name/0.

See Grains.GenGrain.own_name/0.

See Grains.GenGrain.pull/0.

See Grains.GenGrain.pull/1.

Link to this function


See Grains.GenGrain.pull_with_tag/1.

Link to this function

pull_with_tag(from, tag)

See Grains.GenGrain.pull_with_tag/2.

See Grains.GenGrain.push/1.

Link to this function

push(short_name, msg)

See Grains.GenGrain.push/2.