ElGraph.Sensor behaviour (ElGraph v0.3.0)

Copy Markdown View Source

환경을 감시하고 시그널을 방출하는 프로세스 (SPEC §5).

poll/1이 주기(:interval ms)마다 호출되어 환경을 확인하고, 조건이 맞으면 시그널을 방출한다. poll은 상태를 들고 다니므로 이전 관측과 비교해 변화를 감지할 수 있다.

defmodule MyApp.DocsWatch do
  use ElGraph.Sensor, interval: 5_000

  @impl true
  def poll(last_size) do
    size = total_size()
    if last_size && size != last_size do
      {:signal, %ElGraph.Signal{type: "docs.changed", data: %{size: size}}, size}
    else
      {:quiet, size}
    end
  end
end

{:ok, _} = MyApp.DocsWatch.start_link(target: my_agent)   # Agent로 시그널 dispatch

dispatch 대상: :target(Agent server — send_signal 호출) 또는 :on_signal(함수). :interval 미지정 시 자동 폴링 없이 tick/1(수동 트리거)로만 동작한다.

Summary

Callbacks

초기 센서 상태. 기본 nil.

환경을 확인한다. 시그널을 낼지(+다음 상태) 조용히 있을지 결정한다.

Functions

센서를 동기적으로 한 번 폴링한다 (테스트/수동 트리거).

Types

sensor_state()

@type sensor_state() :: term()

Callbacks

init_state(opts)

(optional)
@callback init_state(opts :: keyword()) :: sensor_state()

초기 센서 상태. 기본 nil.

poll(sensor_state)

@callback poll(sensor_state()) ::
  {:signal, ElGraph.Signal.t(), sensor_state()} | {:quiet, sensor_state()}

환경을 확인한다. 시그널을 낼지(+다음 상태) 조용히 있을지 결정한다.

Functions

tick(server)

@spec tick(GenServer.server()) :: :ok

센서를 동기적으로 한 번 폴링한다 (테스트/수동 트리거).