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
-
#create_logger(io = STDERR, log_level = Logger::INFO) ⇒ Object
内部保持をするロガーを新規作成.
- #env ⇒ Object
-
#execute(options = {}, &process) ⇒ Object
内部的には init parse_options_inner execute_inner release の順にコールしてます.
- #executed ⇒ Object
-
#logger ⇒ Object
loggerの出力をOFFにしたい場合は 引数を“/dev/null”で渡してください.
- #option_parser ⇒ Object
- #parse_options(options, argv = ARGV) ⇒ 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
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 |
#env ⇒ Object
28 29 30 |
# File 'lib/batchbase/core.rb', line 28 def env @__env ||= {} end |
#execute(options = {}, &process) ⇒ Object
内部的には
init
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(={},&process) result = nil begin init (,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 |
#executed ⇒ Object
32 33 34 |
# File 'lib/batchbase/core.rb', line 32 def executed @__executed end |
#logger ⇒ Object
loggerの出力をOFFにしたい場合は 引数を“/dev/null”で渡してください
44 45 46 |
# File 'lib/batchbase/core.rb', line 44 def logger @__logger ||= create_logger end |
#option_parser ⇒ Object
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 (,argv=ARGV) (,argv) end |
#pg_path ⇒ Object
36 |
# File 'lib/batchbase/core.rb', line 36 def pg_path;env[:pg_path];end |
#pid_file ⇒ Object
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_observers ⇒ Object
135 136 137 |
# File 'lib/batchbase/core.rb', line 135 def signal_observers @__signal_observers ||= [] end |
#skip_logging ⇒ Object
ログを出力しないように設定(内部的にはログを出力するが、その向き先が/dev/nullって実装になってます)
68 69 70 |
# File 'lib/batchbase/core.rb', line 68 def skip_logging create_logger("/dev/null") end |