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

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

#envObject



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

def env
  @__env ||= {}
end

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

内部的には

init
parse_options
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(options={},&process)
  begin
    init
    logger.info  "start script(#{pg_path})"
    logger.debug "caller=#{caller}"
    parse_options(options,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

#executedObject



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

def executed
  @__executed
end

#loggerObject

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



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

def logger
  @__logger ||= create_logger
end

#option_parserObject



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

def option_parser
  @__option_parser ||= OptionParser.new
end

#pg_pathObject



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

def pg_path;env[:pg_path];end

#pid_fileObject



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_observersObject



127
128
129
# File 'lib/batchbase/core.rb', line 127

def signal_observers
  @__signal_observers ||= []
end

#skip_loggingObject

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



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

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