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
Class Method Summary collapse
Instance Method Summary collapse
-
#create_logger(io = STDERR, log_level = Logger::INFO) ⇒ Object
内部保持をするロガーを新規作成.
- #env ⇒ Object
-
#execute(options = {}, &process) ⇒ Object
内部的には init parse_options execute_inner release の順にコールしてます.
- #executed ⇒ Object
-
#logger ⇒ Object
loggerの出力をOFFにしたい場合は 引数を“/dev/null”で渡してください.
- #option_parser ⇒ Object
- #pg_path ⇒ Object
- #pid_file ⇒ Object
-
#set_logger(_logger) ⇒ Object
内部保持するロガーを引数にて設定.
- #set_option_parser(v) ⇒ Object
- #set_signal_observer(method_name) ⇒ Object
- #signal_observers ⇒ Object
-
#skip_logging ⇒ Object
ログを出力しないように設定(内部的にはログを出力するが、その向き先が/dev/nullって実装になってます).
Class Method Details
.included(mod) ⇒ Object
121 122 123 124 125 |
# File 'lib/batchbase/core.rb', line 121 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
内部保持をするロガーを新規作成
50 51 52 53 54 55 |
# File 'lib/batchbase/core.rb', line 50 def create_logger(io=STDERR,log_level=Logger::INFO) @__logger = Logger.new(io) @__logger.formatter = Kanamei::LogFormatter.formatter @__logger.level = log_level @__logger end |
#env ⇒ Object
27 28 29 |
# File 'lib/batchbase/core.rb', line 27 def env @__env ||= {} end |
#execute(options = {}, &process) ⇒ Object
内部的には
init
execute_inner
release
の順にコールしてます
- options
-
プログラムより指定するバッチ動作オプション(ハッシュ値) :double_process_check 初期値 true :auto_recover 初期値 false
84 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 |
# File 'lib/batchbase/core.rb', line 84 def execute(={},&process) begin init logger.info "start script(#{pg_path})" logger.debug "caller=#{caller}" (,ARGV) 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 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" 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 end |
#executed ⇒ Object
31 32 33 |
# File 'lib/batchbase/core.rb', line 31 def executed @__executed end |
#logger ⇒ Object
loggerの出力をOFFにしたい場合は 引数を“/dev/null”で渡してください
43 44 45 |
# File 'lib/batchbase/core.rb', line 43 def logger @__logger ||= create_logger end |
#option_parser ⇒ Object
19 20 21 |
# File 'lib/batchbase/core.rb', line 19 def option_parser @__option_parser ||= OptionParser.new end |
#pg_path ⇒ Object
35 |
# File 'lib/batchbase/core.rb', line 35 def pg_path;env[:pg_path];end |
#pid_file ⇒ Object
37 |
# File 'lib/batchbase/core.rb', line 37 def pid_file;env[:pid_file];end |
#set_logger(_logger) ⇒ Object
内部保持するロガーを引数にて設定
60 61 62 |
# File 'lib/batchbase/core.rb', line 60 def set_logger(_logger) @__logger = _logger end |
#set_option_parser(v) ⇒ Object
23 24 25 |
# File 'lib/batchbase/core.rb', line 23 def set_option_parser(v) @__option_parser = v end |
#set_signal_observer(method_name) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/batchbase/core.rb', line 131 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_observers ⇒ Object
127 128 129 |
# File 'lib/batchbase/core.rb', line 127 def signal_observers @__signal_observers ||= [] end |
#skip_logging ⇒ Object
ログを出力しないように設定(内部的にはログを出力するが、その向き先が/dev/nullって実装になってます)
67 68 69 |
# File 'lib/batchbase/core.rb', line 67 def skip_logging create_logger("/dev/null") end |