class Edaemon::Server

Constants

ApplicationAllreadyRunnedError
BlockNotSettedError
Error
LOG_FILE_PATH
PID_FILE_PATH
STARTED
STOPPED

Attributes

block[RW]

Public Class Methods

new(block: nil) click to toggle source
# File lib/edaemon/server.rb, line 14
def initialize(block: nil)
  @block = block
end

Public Instance Methods

start() click to toggle source

TODO: Конфиг лога TODO: Конфиг пид файла

# File lib/edaemon/server.rb, line 20
def start
  # TODO: simplecov raise почему не подсвечивается
  raise ApplicationAllreadyRunnedError if status == STARTED
  raise BlockNotSettedError unless block

  pid = fork_block!
  save_pid!(pid: pid)
  pid
end
status() click to toggle source
# File lib/edaemon/server.rb, line 30
def status
  pid_runned?(pid: saved_pid) ? STARTED : STOPPED
end

Private Instance Methods

fork_block!() click to toggle source
# File lib/edaemon/server.rb, line 48
def fork_block!
  # TODO: Переделать не на call из блока а на простой вызов переданного метода
  Kernel.fork do
    STDOUT.reopen(File.open(LOG_FILE_PATH, 'a'))
    STDOUT.sync = true
    block.call
  end
end
pid_runned?(pid:) click to toggle source
# File lib/edaemon/server.rb, line 44
def pid_runned?(pid:)
  Edaemon::Helper::Process.pids.include?(pid)
end
save_pid!(pid:) click to toggle source
# File lib/edaemon/server.rb, line 57
def save_pid!(pid:)
  File.open(PID_FILE_PATH, 'w') { |f| f.write("#{pid}\n") }
end
saved_pid() click to toggle source
# File lib/edaemon/server.rb, line 38
def saved_pid
  return unless File.exist?(PID_FILE_PATH)

  File.open(PID_FILE_PATH).read.to_i
end