Class: Daemontools::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/daemontools/service_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename) ⇒ Builder

Returns a new instance of Builder.



7
8
9
10
11
12
13
14
# File 'lib/daemontools/service_builder.rb', line 7

def initialize(filename)
  @all_roles = []
  @services = {}
  @change_user_command = 'setuidgid'
  @ulimit = {}
  @write_time = true
  eval(File.read(filename), binding())
end

Instance Attribute Details

#all_rolesObject

Returns the value of attribute all_roles.



5
6
7
# File 'lib/daemontools/service_builder.rb', line 5

def all_roles
  @all_roles
end

#change_user_command(cmd) ⇒ Object

Returns the value of attribute change_user_command.



5
6
7
# File 'lib/daemontools/service_builder.rb', line 5

def change_user_command
  @change_user_command
end

#curr_service_nameObject

Returns the value of attribute curr_service_name.



5
6
7
# File 'lib/daemontools/service_builder.rb', line 5

def curr_service_name
  @curr_service_name
end

#delete_command(cmd) ⇒ Object

Returns the value of attribute delete_command.



5
6
7
# File 'lib/daemontools/service_builder.rb', line 5

def delete_command
  @delete_command
end

#environmentObject

Returns the value of attribute environment.



5
6
7
# File 'lib/daemontools/service_builder.rb', line 5

def environment
  @environment
end

#servicesObject

Returns the value of attribute services.



5
6
7
# File 'lib/daemontools/service_builder.rb', line 5

def services
  @services
end

#ulimit(opt, val) ⇒ Object

Returns the value of attribute ulimit.



5
6
7
# File 'lib/daemontools/service_builder.rb', line 5

def ulimit
  @ulimit
end

#write_time(val) ⇒ Object

Returns the value of attribute write_time.



5
6
7
# File 'lib/daemontools/service_builder.rb', line 5

def write_time
  @write_time
end

Instance Method Details

#delete_services(services) ⇒ Object



75
76
77
# File 'lib/daemontools/service_builder.rb', line 75

def delete_services(services)
  services.each { |service| Daemontools.delete(service, @delete_command) }
end

#find_services_by_name(service_names, role) ⇒ Object



79
80
81
# File 'lib/daemontools/service_builder.rb', line 79

def find_services_by_name(service_names, role)
  @services[role].select { |service| service_names.include?(service[0]) }
end

#gen(roles, env) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/daemontools/service_builder.rb', line 37

def gen(roles, env)
  @environment = env
  roles.split(',').each do |role|
    (@services[role.to_sym] || []).each do |service|
      @curr_service_name = service[0].to_s
      start_service(service[1])
    end
  end
end

#run_command(command_name, param) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/daemontools/service_builder.rb', line 16

def run_command(command_name, param)
  self.class.send(:define_method, command_name) do |task, options = {}|
    p = param.gsub(':task', task)
    options.each { |key, val| p.gsub!(":#{key}", val.to_s) }
    p
  end
end

#service(name, opts = {}, &block) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/daemontools/service_builder.rb', line 24

def service(name, opts = {}, &block)
  if opts[:roles]
    opts[:roles].each do |role|
      role = role.to_sym
      @all_roles << role unless @all_roles.member?(role)
      @services[role] = [] unless @services[role]
      @services[role] << [name, block.call]
    end
  else
    raise "service without roles"
  end
end

#start_service(command, service = nil, env = nil) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/daemontools/service_builder.rb', line 59

def start_service(command, service = nil, env = nil)
  @environment = env if env
  @curr_service_name = service if service
  Daemontools.stop(@curr_service_name) if Daemontools.exists?(@curr_service_name)
  @command = command.gsub(':environment', @environment)
  template_path = File.expand_path(File.dirname(__FILE__)) + '/../../templates/rvm.erb'
  cmd = ERB.new(File.read(template_path)).result(binding())
  Daemontools.add(@curr_service_name, cmd, { :change_user_command => @change_user_command, :ulimit => @ulimit, :write_time => @write_time })
  Daemontools.make_run_status_up(@curr_service_name)
  Daemontools.start(@curr_service_name)
end