Pigeon

This is a simple framework for building EventMachine engines that are constantly running. These are commonly used for background processing jobs, batch processing, or for providing specific network services.

Installation should be as simple as:

gem install pigeon

Your first Pigeon engine can be defined by declaring a subclass:

class MyEngine < Pigeon::Engine
  after_start do
    # Operations to be performed after start
  end
end

Other handlers can be defined:

after_initialize
before_start
after_start
before_stop
after_stop

A primary function of an engine might be to intermittently perform a task. Several methods exist to facilitate this:

class MyEngine < Pigeon::Engine
  after_start do
    periodically_trigger_task(10) do
      # Arbitrary block of code is executed every ten seconds but only
      # one instance of this block can be running at a time.
      do_stuff_every_ten_seconds
    end
  end
end

Starting your application can be done with a wrapper script that is constructed somewhat like bin/launcher.example

An example would look like:

#!/usr/bin/env ruby

require 'rubygems'
gem 'pigeon'

# Adjust search path to include the ../lib directory
$LOAD_PATH << File.expand_path(
  File.join(*%w[ .. lib ]), File.dirname(__FILE__)
)

# Use Pigeon::Launcher to launch your own engine by replacing
# the parameter Pigeon::Engine with your specific subclass.
Pigeon::Launcher.new(Pigeon::Engine).handle_args(ARGV)

Components

There are several key components used by Pigeon to create an event-driven engine.

Pigeon::Dispatcher

The dispatcher functions as a thread pool for processing small, discrete operations. These threads are created on demand and destroyed when no longer in use. By limiting the number of threads a pool can contain it is possible to schedule sequential operations, manage control over a single shared resource, or to run through large lists of operations in parallel.

Pigeon::SortedArray

This utility class provides a simple self-sorting array. This is used as a priority queue within the Pigeon::Queue.

Status

This engine is currently in development.

Copyright (c) 2009-2013 Scott Tadman, The Working Group