bin/dolphin_server
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
# TODO: better loading libraries
setup_rb = File.expand_path('../../vendor/bundle/bundler/setup.rb', __FILE__)
begin
require 'rubygems'
if File.exists?(setup_rb)
load setup_rb
else
require 'bundler/setup'
end
rescue LoadError => e
end
require File.join(File.expand_path('../../', __FILE__), 'lib/dolphin')
require 'optparse'
options = {}
opt = OptionParser.new do |opt|
opt.on('-c [dolphin.conf]', "Dolphin configuration file") {|v| options[:config_file] = v }
opt.on('-h', "--help") {|v| puts opt.help(); Kernel.exit(true) }
opt.on('-v', "--version") {|v| puts Dolphin::VERSION; Kernel.exit(true) }
end
begin
opt.parse!(ARGV)
rescue => e
STDERR.puts e
exit!
end
Signal.trap(:INT, "EXIT")
require 'ltsv'
require 'celluloid'
module Dolphin
Celluloid.logger.datetime_format = "%Y-%m-%d %H:%M:%S"
Celluloid.logger.formatter = proc { |severity, datetime, progname, msg|
case settings['logger']['format']
when 'human_readable'
msg = "[#{msg[:thread_id]}] [#{msg[:classname]}] #{msg[:message]}" if msg.is_a?(Hash)
Logger::Formatter.new.call(severity, datetime, progname, msg)
when 'ltsv'
LTSV.dump({
:log_level => severity,
:time => datetime,
:thread_id => msg[:thread_id],
:classname => msg[:classname],
:message => msg[:message],
}) + "\n"
end
}
def self.run(options)
# init config_file
Dolphin.load_setting(options[:config_file])
if RUBY_VERSION.to_f >= 2
# Celluloid::TaskFiber by default
elsif RUBY_VERSION.to_f >= 1.9
Celluloid.task_class = Celluloid::TaskThread
else
raise "Doesn't support ruby version: #{RUBY_VERSION}"
exit!
end
# verify possible for to load Gem related database.
begin
Dolphin::Models::Base
rescue Gem::LoadError => e
raise e.message
exit!
end
manager = Manager.new
# manager.pool(Worker, :as => :workers, :size => 2)
# manager.pool(Sender::Mail, :as => :mail_senders, :size => 2)
# manager.pool(QueryProcessor, :as => :query_processors, :size => 2)
manager.add(Worker, :as => :workers)
manager.add(Sender::Mail, :as => :mail_senders)
manager.add(QueryProcessor, :as => :query_processors)
# TODO: RequestHandler link to Manager
# TODO: Chanage to rackup
server_settings = Dolphin.settings['server']
manager.supervise(RequestHandler, server_settings['host'], server_settings['port'])
Manager.run
end
end
Dolphin.run(options)
sleep