Sha256: 16a65685affe11819976eaff7d5ba2913c9edee1f108bbd3d060df2c63b513f4

Contents?: true

Size: 1.24 KB

Versions: 2

Compression:

Stored size: 1.24 KB

Contents

module Raemon
  module Worker
    
    def self.included(base)
      base.send :extend, ClassMethods
      base.send :include, InstanceMethods
    end
    
    module ClassMethods
      def start!(master=nil)
        child_pid = Kernel.fork do
          # Child process
          worker = new(master)
          worker.execute
        end
        
        # Parent returns the worker's pid
        return child_pid
      end
    
      def stop!(worker_pid)
        Process.kill('QUIT', worker_pid) rescue nil
      end
    end
    
    module InstanceMethods
      attr_reader :logger
      
      def initialize(master=nil)
        @master = master
        @logger = master.logger if master
        
        setup_signals
        start
      end
        
      def start;                                      end
      def stop;                                       end
      def shutting_down?;   @shutting_down;           end
      def execute;          raise "Abstract method";  end

      def setup_signals
        quit_block = Proc.new { @shutting_down = true }
        force_quit_block = Proc.new { exit }

        trap('QUIT', quit_block)
        trap('TERM', force_quit_block)
        trap('INT') {} # Reset INT signal handler
      end
    end
    
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
raemon-0.1.1 lib/raemon/worker.rb
raemon-0.1.0 lib/raemon/worker.rb