Module: Batchbase::Core

Defined in:
lib/batchbase/core.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

SIGNALS =
[ :QUIT, :INT, :TERM, :USR1, :USR2, :HUP ]
DOUBLE_PROCESS_CHECK__OK =

SIGNALS = [ :QUIT, :INT, :TERM ]

1
DOUBLE_PROCESS_CHECK__AUTO_RECOVERD =
2
DOUBLE_PROCESS_CHECK__NG =
0
DOUBLE_PROCESS_CHECK__STILL_RUNNING =
-1
DOUBLE_PROCESS_CHECK__SAME_PROCESS_NAME =
3

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(mod) ⇒ Object



129
130
131
132
133
# File 'lib/batchbase/core.rb', line 129

def self.included(mod)
  # ModuleのインスタンスmodがAをincludeした際に呼び出され、
  # A::ClassMethodsのインスタンスメソッドをmodに特異メソッドとして追加する。
  mod.extend ClassMethods
end

Instance Method Details

#create_logger(io = STDERR, log_level = Logger::INFO) ⇒ Object

内部保持をするロガーを新規作成



51
52
53
54
55
56
# File 'lib/batchbase/core.rb', line 51

def create_logger(io=STDERR,log_level=Logger::INFO)
  @__logger = Logger.new(io)
  @__logger.formatter = Kanamei::LogFormatter.formatter
  @__logger.level = log_level
  @__logger
end

#envObject



28
29
30
# File 'lib/batchbase/core.rb', line 28

def env
  @__env ||= {}
end

#execute(options = {}, &process) ⇒ Object

内部的には

init
parse_options_inner
execute_inner
release

の順にコールしてます

options

プログラムより指定するバッチ動作オプション(ハッシュ値) :double_process_check 初期値 true :auto_recover 初期値 false



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/batchbase/core.rb', line 85

def execute(options={},&process)
  result = nil
  begin
    init
    parse_options_inner(options,ARGV)
    logger.info  "start script(#{pg_path})"
    logger.debug "caller=#{caller}"
    result = double_process_check_and_create_pid_file
    case result
    when DOUBLE_PROCESS_CHECK__OK,DOUBLE_PROCESS_CHECK__AUTO_RECOVERD
      if result == DOUBLE_PROCESS_CHECK__AUTO_RECOVERD
        logger.warn "lock file still exists[pid=#{env[:old_pid_from_pid_file]}:file=#{pid_file}],but process does not found.Auto_recover enabled.so process continues"
      end
      result = execute_inner(&process)
    when DOUBLE_PROCESS_CHECK__NG
      logger.error "lock file still exists[pid=#{env[:old_pid_from_pid_file]}:file=#{pid_file}],but process does not found.Auto_recover disabled.so process can not continue"
    when DOUBLE_PROCESS_CHECK__STILL_RUNNING
      logger.warn "pid:#{env[:old_pid_from_pid_file]} still running"
    when DOUBLE_PROCESS_CHECK__SAME_PROCESS_NAME
      logger.warn "process_name:#{env[:process_name]} still exists"
    else
      raise 'must not happen'
    end
  rescue => e
    logger.error e
  ensure
    release
    logger.info "finish script (%1.3fsec)" % (Time.now - @__script_started_at)
  end
  result
end

#executedObject



32
33
34
# File 'lib/batchbase/core.rb', line 32

def executed
  @__executed
end

#loggerObject

loggerの出力をOFFにしたい場合は 引数を“/dev/null”で渡してください



44
45
46
# File 'lib/batchbase/core.rb', line 44

def logger
  @__logger ||= create_logger
end

#option_parserObject



20
21
22
# File 'lib/batchbase/core.rb', line 20

def option_parser
  @__option_parser ||= OptionParser.new
end

#parse_options(options, argv = ARGV) ⇒ Object



151
152
153
# File 'lib/batchbase/core.rb', line 151

def parse_options(options,argv=ARGV)
  parse_options_inner(options,argv)
end

#pg_pathObject



36
# File 'lib/batchbase/core.rb', line 36

def pg_path;env[:pg_path];end

#pid_fileObject



38
# File 'lib/batchbase/core.rb', line 38

def pid_file;env[:pid_file];end

#set_logger(_logger) ⇒ Object

内部保持するロガーを引数にて設定



61
62
63
# File 'lib/batchbase/core.rb', line 61

def set_logger(_logger)
  @__logger = _logger
end

#set_option_parser(v) ⇒ Object



24
25
26
# File 'lib/batchbase/core.rb', line 24

def set_option_parser(v)
  @__option_parser = v
end

#set_signal_observer(method_name) ⇒ Object



139
140
141
142
143
144
145
146
147
148
149
# File 'lib/batchbase/core.rb', line 139

def set_signal_observer(method_name)
  @__signal_observers ||= []
  case method_name
  when String
    method_name = method_name.to_sym
  when Symbol
  else
    raise ArgumentError.new('method_name must be String or Symbol')
  end
  @__signal_observers << method_name
end

#signal_observersObject



135
136
137
# File 'lib/batchbase/core.rb', line 135

def signal_observers
  @__signal_observers ||= []
end

#skip_loggingObject

ログを出力しないように設定(内部的にはログを出力するが、その向き先が/dev/nullって実装になってます)



68
69
70
# File 'lib/batchbase/core.rb', line 68

def skip_logging
  create_logger("/dev/null")
end