Class: Sanford::Process

Inherits:
Object
  • Object
show all
Defined in:
lib/sanford/process.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server, options = nil) ⇒ Process

Returns a new instance of Process.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/sanford/process.rb', line 10

def initialize(server, options = nil)
  options ||= {}
  @server = server
  @logger = @server.logger
  @pid_file = PIDFile.new(@server.pid_file)
  @restart_cmd = RestartCmd.new

  @server_ip = default_if_blank(ENV['SANFORD_IP'], @server.configured_ip)
  @server_port = default_if_blank(
    ENV['SANFORD_PORT'],
    @server.configured_port
  ){ |v| v.to_i }
  @server_fd = ignore_if_blank(ENV['SANFORD_SERVER_FD']){ |v| v.to_i }
  @listen_args = @server_fd ? [ @server_fd ] : [ @server_ip, @server_port ]

  @name = "sanford-#{@server.name}-#{@server_ip}-#{@server_port}"

  @client_fds = (ENV['SANFORD_CLIENT_FDS'] || "").split(',').map(&:to_i)

  @daemonize = !!options[:daemonize]
  @skip_daemonize = !!ignore_if_blank(ENV['SANFORD_SKIP_DAEMONIZE'])
end

Instance Attribute Details

#client_fdsObject (readonly)

Returns the value of attribute client_fds.



8
9
10
# File 'lib/sanford/process.rb', line 8

def client_fds
  @client_fds
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/sanford/process.rb', line 7

def name
  @name
end

#pid_fileObject (readonly)

Returns the value of attribute pid_file.



7
8
9
# File 'lib/sanford/process.rb', line 7

def pid_file
  @pid_file
end

#restart_cmdObject (readonly)

Returns the value of attribute restart_cmd.



7
8
9
# File 'lib/sanford/process.rb', line 7

def restart_cmd
  @restart_cmd
end

#serverObject (readonly)

Returns the value of attribute server.



7
8
9
# File 'lib/sanford/process.rb', line 7

def server
  @server
end

#server_fdObject (readonly)

Returns the value of attribute server_fd.



8
9
10
# File 'lib/sanford/process.rb', line 8

def server_fd
  @server_fd
end

#server_ipObject (readonly)

Returns the value of attribute server_ip.



8
9
10
# File 'lib/sanford/process.rb', line 8

def server_ip
  @server_ip
end

#server_portObject (readonly)

Returns the value of attribute server_port.



8
9
10
# File 'lib/sanford/process.rb', line 8

def server_port
  @server_port
end

Instance Method Details

#daemonize?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/sanford/process.rb', line 59

def daemonize?
  @daemonize && !@skip_daemonize
end

#runObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/sanford/process.rb', line 33

def run
  ::Process.daemon(true) if self.daemonize?
  log "Starting Sanford server for #{@server.name}..."

  @server.listen(*@listen_args)
  log "Listening on #{@server.ip}:#{@server.port}"

  $0 = @name
  @pid_file.write
  log "PID: #{@pid_file.pid}"

  ::Signal.trap("TERM"){ @server.stop }
  ::Signal.trap("INT"){ @server.halt }
  ::Signal.trap("USR2"){ @server.pause }

  thread = @server.start(@client_fds)
  log "#{@server.name} server started and ready."
  thread.join
  run_restart_cmd if @server.paused?
rescue StandardError => exception
  log "Error: #{exception.message}"
  log "#{@server.name} server never started."
ensure
  @pid_file.remove
end