Packages

Streaming API built upon ElasticSearch's percolation.

Current section

Files

Jump to
funnel lib funnel percolator_pool.ex
Raw

lib/funnel/percolator_pool.ex

defmodule Funnel.PercolatorPool do
@moduledoc """
Pool of `Funnel.Percolators`.
"""
use Supervisor
import Funnel.Percolator, only: [percolate: 3]
@doc """
Start the percolators's pool
"""
def start_link do
Supervisor.start_link(__MODULE__, [])
end
def init([]) do
pool_options = [
name: {:local, :percolator_pool},
worker_module: Funnel.Percolator,
size: size,
max_overflow: max_overflow
]
children = [
:poolboy.child_spec(:percolator_pool, pool_options)
]
supervise(children, strategy: :one_for_one)
end
@doc """
Submit a document to Elasticsearch's percolator through the pool.
"""
def percolate(index_id, body) do
:poolboy.transaction(:percolator_pool, fn(percolator)-> percolate(percolator, index_id, body) end)
end
defp size do
Application.get_env(:funnel, :percolator_pool_size)
end
defp max_overflow do
Application.get_env(:funnel, :percolator_pool_max_overflow)
end
end