class App::Service

Constants

PROGRAM_DIR
VERSION

Public Class Methods

logger() click to toggle source
# File lib/app/service.rb, line 67
def logger
  @@logger
end
mode() click to toggle source
# File lib/app/service.rb, line 71
def mode
  @@mode
end
setup( mode = nil, argv: ARGV, app_dir: nil, tmp_dir: nil, log_dir: nil, **options ) click to toggle source
# File lib/app/service.rb, line 14
def setup( mode = nil, argv: ARGV, app_dir: nil, tmp_dir: nil, log_dir: nil, **options )
  setup_vars( mode, argv, app_dir, tmp_dir, log_dir, options[:progname] )

  case  @@mode
  when  "run"
    if alive?
      puts  "already in alive."
      ::Kernel.exit
    end
    setup_logger( **options )

  when  "start"
    if alive?
     #puts  "already in alive."
      ::Kernel.exit
    end
    Process.daemon( true, true )
    setup_service
    setup_logger( log_path: @@log_path, **options )

  when  "restart"
    while  alive?
      request_to_stop
      ::Kernel.sleep( 1 )
    end
    Process.daemon( true, true )
    setup_service
    setup_logger( log_path: @@log_path, **options )

  when  "stop"
    while  alive?
      request_to_stop
      ::Kernel.sleep( 1 )
    end
    # puts  "successed to stop."
    ::Kernel.exit

  when  "status"
    if alive?
      puts  "in alive."
    else
      puts  "not in alive."
    end
    ::Kernel.exit

  end
end
shutdown( cond = 0 ) click to toggle source
# File lib/app/service.rb, line 62
def shutdown( cond = 0 )
  delete_pid_path
  ::Kernel.exit( cond )
end

Private Class Methods

alive?() click to toggle source
# File lib/app/service.rb, line 166
def alive?
  result  =  true
  begin
    pid  =  File.open( @@pid_path ).read.to_i
    Process.kill( 0, pid )
  rescue => e
    result  =  false
  end
  result
end
delete_pid_path() click to toggle source
# File lib/app/service.rb, line 130
def delete_pid_path
  if  File.exist?( @@pid_path )
    File.delete( @@pid_path )
  end
end
request_to_stop() click to toggle source

send INT signal to background process.

# File lib/app/service.rb, line 159
def request_to_stop
  pid  =  File.open( @@pid_path ).read.to_i    rescue  raise( ArgumentError, "could not load '#{ @@pid_path }'." )
  Process.kill( :INT, pid )                    rescue  raise( ArgumentError, "could not send signal." )
rescue => e
  puts  e.message
end
setup_logger( log_path: nil, shift_age: nil, shift_size: nil, log_sync: nil, **options ) click to toggle source
# File lib/app/service.rb, line 136
def setup_logger( log_path: nil, shift_age: nil, shift_size: nil, log_sync: nil, **options )
  sync  =  ( log_sync.nil? ? true : log_sync )
  if  log_path
    if shift_age && shift_size
      @@logger  =  ::Logger.new( log_path, shift_age, shift_size.to_i, **options )
    elsif shift_age && shift_size.nil?
      @@logger  =  ::Logger.new( log_path, shift_age, **options )
    else
      @@logger  =  ::Logger.new( log_path, **options )
    end

    dev  =  @@logger.instance_variable_get(:@logdev).dev
    $stdout.reopen  dev
    $stdout.sync  =  sync
    $stderr.reopen  dev
    $stderr.sync  =  sync
  else
    @@logger  =  ::Logger.new( STDOUT, **options )
    STDOUT.sync  =  sync
  end
end
setup_service() click to toggle source
# File lib/app/service.rb, line 123
def setup_service
  File.open( @@pid_path, "w" ) do |f|
    f.puts( Process.pid )
  end
  $0  =  "[#{ @@progname }]"
end
setup_vars( mode, argv, app_dir, tmp_dir, log_dir, progname ) click to toggle source
# File lib/app/service.rb, line 77
      def setup_vars( mode, argv, app_dir, tmp_dir, log_dir, progname )
        if mode.nil?
          @@mode  =  argv.dup.shift.to_s.downcase
        else
          @@mode  =  mode.to_s.downcase
        end

        @@progname  =  progname || File.basename( $PROGRAM_NAME, '.rb' )
        unless  %w[ run start stop restart status ].include?( @@mode )
          STDERR.puts <<~USAGE
          usage: #{@@progname}  [run|start|stop|restart|status]
          USAGE
          ::Kernel.exit( 1 )
        end

        if ( !app_dir.nil? && app_dir[0] == "/" )
          @@app_dir  =  app_dir
        else
          @@app_dir  =  File.expand_path( File.join( PROGRAM_DIR, ( app_dir || "." ) ) )
        end
        Dir.chdir( @@app_dir )

        if ( !tmp_dir.nil? && tmp_dir[0] == "/" )
          @@tmp_dir  =  tmp_dir
        else
          @@tmp_dir  =  File.expand_path( File.join( @@app_dir, ( tmp_dir || "." ) ) )
        end
        unless  Dir.exist?( @@tmp_dir )
          FileUtils.makedirs( @@tmp_dir )
        end

        @@pid_path  =  File.expand_path( File.join( @@tmp_dir, @@progname + ".pid" ) )

        if ( !log_dir.nil? && log_dir[0] == "/" )
          @@log_dir  =  log_dir
        else
          @@log_dir  =  File.expand_path( File.join( @@app_dir, ( log_dir || "." ) ) )
        end

        unless  Dir.exist?( @@log_dir )
          FileUtils.makedirs( @@log_dir )
        end

        @@log_path  =  File.expand_path( File.join( @@log_dir, @@progname + ".log" ) )
      end