kanamei-keystone 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/keystone.rb +1 -1
- data/lib/keystone/batch/base.rb +46 -6
- metadata +1 -1
data/lib/keystone.rb
CHANGED
data/lib/keystone/batch/base.rb
CHANGED
@@ -3,19 +3,47 @@ require 'digest/md5'
|
|
3
3
|
|
4
4
|
module Keystone::Batch
|
5
5
|
#
|
6
|
+
# = バッチをざくっと書きたい時用モジュール
|
7
|
+
#
|
8
|
+
# 基本的にはexecuteメソッドにバッチ処理をブロックで渡す
|
9
|
+
#
|
10
|
+
# == 定数
|
6
11
|
#
|
7
|
-
# ●定数
|
8
12
|
# ERROR_MAIL_TO (エラーメール送信先) 設定しておけば自動でエラーメールを送信してくれる
|
13
|
+
#
|
9
14
|
# ERROR_MAIL_FROM (エラーメール送信元) 設定されてない場合はERROR_MAIL_TOを使用
|
15
|
+
#
|
10
16
|
# ERROR_MAIL_STMP_ADDR (エラーメール送信SMTPアドレス) 設定されてない場合は"127.0.0.1"
|
11
|
-
# ERROR_MAIL_STMP_PORT (エラーメール送信SMTPポート) 設定されてない場合は25
|
12
17
|
#
|
18
|
+
# ERROR_MAIL_STMP_PORT (エラーメール送信SMTPポート) 設定されてない場合は25
|
13
19
|
#
|
14
20
|
module Base
|
21
|
+
# [double_process_check]
|
22
|
+
# 2重起動チェック
|
23
|
+
# [auto_recover]
|
24
|
+
# 2重起動チェック用のpidファイルがすでに存在しているがプロセスは見あたらない
|
25
|
+
# そんな時、そのまま実行を続けるかどうか
|
26
|
+
#
|
27
|
+
#
|
28
|
+
# バッチの主処理をこのメソッドへのブロック引数として定義してください
|
29
|
+
#
|
30
|
+
# require 'rubygems'
|
31
|
+
# require 'keystone'
|
32
|
+
#
|
33
|
+
# include Keystone::Batch::Base
|
34
|
+
#
|
35
|
+
# # ERROR_MAIL_TOを設定しておけば自動でエラーメールが送信される
|
36
|
+
# ERROR_MAIL_TO = ARGV[0]
|
37
|
+
#
|
38
|
+
# execute() do
|
39
|
+
# info "batch process01"
|
40
|
+
# end
|
41
|
+
#
|
15
42
|
def execute(double_process_check = true,auto_recover = true,&process)
|
16
43
|
info "start script(#{File.expand_path($0)})"
|
17
44
|
warn "ERROR_MAIL_TO not defined.if you want error mail automatically,set this value." unless Module.constants.include?("ERROR_MAIL_TO")
|
18
45
|
script_started_at = Time.now
|
46
|
+
double_process_check_worked = false
|
19
47
|
begin
|
20
48
|
# double process check
|
21
49
|
if double_process_check
|
@@ -29,11 +57,13 @@ module Keystone::Batch
|
|
29
57
|
pid_list = `ps -e | awk '{print $1}'`
|
30
58
|
if pid_list =~ /#{pid}/
|
31
59
|
warn "pid:#{pid} still running"
|
60
|
+
double_process_check_worked = true
|
32
61
|
return nil
|
33
62
|
else
|
34
63
|
if auto_recover
|
35
64
|
warn "pid file still exists,but process does not found.so process continues"
|
36
65
|
else
|
66
|
+
double_process_check_worked = true
|
37
67
|
raise "pid file still exists,but process does not found"
|
38
68
|
end
|
39
69
|
end
|
@@ -47,12 +77,22 @@ module Keystone::Batch
|
|
47
77
|
error e
|
48
78
|
send_error_mail(e)
|
49
79
|
ensure
|
50
|
-
|
80
|
+
unless double_process_check_worked
|
81
|
+
File.delete(pid_file) if double_process_check
|
82
|
+
end
|
51
83
|
info "finish script (%1.3fsec)" % (Time.now - script_started_at)
|
52
84
|
end
|
53
85
|
end
|
54
86
|
|
55
|
-
|
87
|
+
#
|
88
|
+
# = エラーメール送信メソッド
|
89
|
+
# エクセプションを何も考えずにメールにて送信する
|
90
|
+
# 各種メール送信属性は定数にて渡す
|
91
|
+
#
|
92
|
+
# [exception]
|
93
|
+
# エクセプションクラスインスタンス
|
94
|
+
#
|
95
|
+
def send_error_mail(exception)
|
56
96
|
if Module.constants.include?("ERROR_MAIL_TO")
|
57
97
|
host = Keystone::Os.get()
|
58
98
|
title = %|error occur at "#{host.hostname}" [#{error.message}]|
|
@@ -65,9 +105,9 @@ module Keystone::Batch
|
|
65
105
|
|
66
106
|
body = <<-BODY
|
67
107
|
==== error message ====
|
68
|
-
#{
|
108
|
+
#{exception.message}
|
69
109
|
====== backtrace ======
|
70
|
-
#{
|
110
|
+
#{exception.backtrace.join("\n")}
|
71
111
|
===== environment =====
|
72
112
|
#{host.dump}
|
73
113
|
BODY
|