bizside 2.0.6 → 2.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bizside/resque.rb +14 -0
- data/lib/bizside/resque.rb.bkp +161 -0
- data/lib/bizside/resque.rb~ +154 -0
- data/lib/bizside/version.rb +1 -1
- data/lib/bizside/version.rb~ +3 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f00dba55e99db77fad3ddfe68afb706b89fe3bdc718ad774613309c3bebb7d7e
|
4
|
+
data.tar.gz: 16be628bb79ff1689956d1f63f0895559775531b74d80270d7edb6239ef9abf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2c0f432bd5d53b537f9db6b3a7f28a9f0c747b9eb0a49ec0838ec02ecfbdedc902d36bda002581d82cbaf5513f0177d5ac57fa229604fde0516bf729b1df9fb
|
7
|
+
data.tar.gz: b28b49b0f10c14bedf018a61d938465de5a95d4a8884a9721bf25291c08eec807e2017bad15d6d1594a4f0c82c971b3d70ee1d63502ad94ace3a6000f9ff54ea
|
data/lib/bizside/resque.rb
CHANGED
@@ -121,6 +121,7 @@ module Resque
|
|
121
121
|
info = {
|
122
122
|
time: Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%z'),
|
123
123
|
add_on_name: Bizside.config.add_on_name,
|
124
|
+
server_address: hostname,
|
124
125
|
class: payload['class'],
|
125
126
|
args: payload['args'].to_s,
|
126
127
|
queue: queue,
|
@@ -132,6 +133,19 @@ module Resque
|
|
132
133
|
info
|
133
134
|
end
|
134
135
|
|
136
|
+
# ホスト名を取得。
|
137
|
+
#
|
138
|
+
# 下記理由から hostname(1) を使用:
|
139
|
+
#
|
140
|
+
# * job 実行環境では環境変数 HOSTNAME がセットされていないケースがある
|
141
|
+
# (例: 通常の god 起動の場合。他方、container 起動の場合は
|
142
|
+
# HOSTNAME がセットされている模様)。
|
143
|
+
# * hostname(1) は Linux Standard Base 共通コマンドのため必ず存在する。
|
144
|
+
# @see https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Common/LSB-Common/rcommands.html
|
145
|
+
def hostname
|
146
|
+
@hostname ||= (`hostname`.chomp rescue '(unknown)')
|
147
|
+
end
|
148
|
+
|
135
149
|
end
|
136
150
|
end
|
137
151
|
end
|
@@ -0,0 +1,161 @@
|
|
1
|
+
module Bizside
|
2
|
+
module Resque
|
3
|
+
end
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'resque'
|
7
|
+
require 'resque/worker'
|
8
|
+
require 'resque/failure/base'
|
9
|
+
require 'resque/failure/multiple'
|
10
|
+
require 'resque/failure/redis'
|
11
|
+
require_relative 'audit/job_logger'
|
12
|
+
|
13
|
+
{
|
14
|
+
yaml: ['config/resque.yml', 'config/redis.yml'],
|
15
|
+
json: ['config/resque.json', 'config/redis.json']
|
16
|
+
}.each do |format, file_candidates|
|
17
|
+
file_candidates.each do |file|
|
18
|
+
resque_file = File.join(File.expand_path(ENV['RAILS_ROOT'] || '.'), file)
|
19
|
+
next unless File.exist?(resque_file)
|
20
|
+
|
21
|
+
resque_config = ERB.new(File.read(resque_file), 0, '-').result
|
22
|
+
|
23
|
+
case format
|
24
|
+
when :yaml
|
25
|
+
Resque.redis = YAML.load(resque_config)[Bizside.env]
|
26
|
+
break
|
27
|
+
when :json
|
28
|
+
Resque.redis = ActiveSupport::JSON.decode(resque_config)[Bizside.env]
|
29
|
+
break
|
30
|
+
else
|
31
|
+
raise "不正なResque設定ファイルです。#{file}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Resque.redis.namespace = "resque:#{Bizside.config.add_on_name}:#{Bizside.env}"
|
37
|
+
|
38
|
+
if defined?(Resque::Scheduler)
|
39
|
+
Resque::Scheduler.dynamic = true
|
40
|
+
end
|
41
|
+
|
42
|
+
# tmp/stop.txt が存在する場合は一時停止する
|
43
|
+
module Resque
|
44
|
+
class Worker
|
45
|
+
|
46
|
+
alias_method :reserve_without_stop_txt, :reserve
|
47
|
+
|
48
|
+
def reserve
|
49
|
+
stop_file_path = File.join('tmp', 'stop.txt')
|
50
|
+
if File.exist?(stop_file_path)
|
51
|
+
puts "#{Resque.redis.namespace} #{stop_file_path} が存在するため一時停止します。"
|
52
|
+
nil
|
53
|
+
else
|
54
|
+
reserve_without_stop_txt
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# resque-webのエラーメッセージ文字化けに対するパッチ
|
62
|
+
module Resque
|
63
|
+
module Failure
|
64
|
+
class Redis
|
65
|
+
|
66
|
+
def save
|
67
|
+
data = {
|
68
|
+
:failed_at => UTF8Util.clean(Time.now.strftime("%Y/%m/%d %H:%M:%S %Z")),
|
69
|
+
:payload => payload,
|
70
|
+
:exception => exception.class.to_s,
|
71
|
+
:error => exception.to_s, #UTF8Util.clean(exception.to_s), UTF8Util.cleanを呼ぶと文字化けする
|
72
|
+
:backtrace => filter_backtrace(Array(exception.backtrace)),
|
73
|
+
:worker => worker.to_s,
|
74
|
+
:queue => queue
|
75
|
+
}
|
76
|
+
data = Resque.encode(data)
|
77
|
+
Resque.redis.rpush(:failed, data)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# エラーをログに出力
|
85
|
+
module Resque
|
86
|
+
module Failure
|
87
|
+
class LogOutput < Base
|
88
|
+
def save
|
89
|
+
Bizside.logger.error [
|
90
|
+
"[FATAL] Resque #{queue}:#{worker}",
|
91
|
+
"#{payload}",
|
92
|
+
"#{exception.class} #{exception.to_s}",
|
93
|
+
"#{Array(exception.backtrace).join("\n")}"
|
94
|
+
].join("\n")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# エラーをLTSV形式で専用ログに出力
|
101
|
+
module Resque
|
102
|
+
module Failure
|
103
|
+
class JobAuditLog < Base
|
104
|
+
|
105
|
+
def save
|
106
|
+
dump_env
|
107
|
+
info = build_loginfo
|
108
|
+
return info if Bizside.rails_env&.test?
|
109
|
+
|
110
|
+
logger.record(info)
|
111
|
+
|
112
|
+
info
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def logger
|
118
|
+
@logger ||= Bizside::Audit::JobLogger.logger
|
119
|
+
end
|
120
|
+
|
121
|
+
def build_loginfo
|
122
|
+
info = {
|
123
|
+
time: Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%z'),
|
124
|
+
add_on_name: Bizside.config.add_on_name,
|
125
|
+
server_address: hostname,
|
126
|
+
class: payload['class'],
|
127
|
+
args: payload['args'].to_s,
|
128
|
+
queue: queue,
|
129
|
+
worker: worker.to_s,
|
130
|
+
exception: exception.class,
|
131
|
+
exception_message: exception.to_s,
|
132
|
+
exception_backtrace: Array(exception.backtrace)[0..10].join("\n") # Get only the top 10 because there are many traces.
|
133
|
+
}
|
134
|
+
info
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
def dump_env
|
139
|
+
File.open('/tmp/resque-dump.log', 'a') do |f|
|
140
|
+
f.puts('== begin')
|
141
|
+
for k, v in ENV do
|
142
|
+
f.printf("%30s %s\n", k, v)
|
143
|
+
end
|
144
|
+
f.puts('')
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
# hostname(1) からホスト名を取得。
|
149
|
+
#
|
150
|
+
# job 実行環境(コンテナ等)では環境変数(HOSTNAME等)にホスト名はセットされていない。
|
151
|
+
def hostname
|
152
|
+
@hostname ||= (`hostname`.chomp rescue '(unknown)')
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
Resque::Failure::Multiple.configure do |multi|
|
160
|
+
multi.classes = [Resque::Failure::Redis, Resque::Failure::LogOutput, Resque::Failure::JobAuditLog]
|
161
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
module Bizside
|
2
|
+
module Resque
|
3
|
+
end
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'resque'
|
7
|
+
require 'resque/worker'
|
8
|
+
require 'resque/failure/base'
|
9
|
+
require 'resque/failure/multiple'
|
10
|
+
require 'resque/failure/redis'
|
11
|
+
require_relative 'audit/job_logger'
|
12
|
+
|
13
|
+
{
|
14
|
+
yaml: ['config/resque.yml', 'config/redis.yml'],
|
15
|
+
json: ['config/resque.json', 'config/redis.json']
|
16
|
+
}.each do |format, file_candidates|
|
17
|
+
file_candidates.each do |file|
|
18
|
+
resque_file = File.join(File.expand_path(ENV['RAILS_ROOT'] || '.'), file)
|
19
|
+
next unless File.exist?(resque_file)
|
20
|
+
|
21
|
+
resque_config = ERB.new(File.read(resque_file), 0, '-').result
|
22
|
+
|
23
|
+
case format
|
24
|
+
when :yaml
|
25
|
+
Resque.redis = YAML.load(resque_config)[Bizside.env]
|
26
|
+
break
|
27
|
+
when :json
|
28
|
+
Resque.redis = ActiveSupport::JSON.decode(resque_config)[Bizside.env]
|
29
|
+
break
|
30
|
+
else
|
31
|
+
raise "不正なResque設定ファイルです。#{file}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Resque.redis.namespace = "resque:#{Bizside.config.add_on_name}:#{Bizside.env}"
|
37
|
+
|
38
|
+
if defined?(Resque::Scheduler)
|
39
|
+
Resque::Scheduler.dynamic = true
|
40
|
+
end
|
41
|
+
|
42
|
+
# tmp/stop.txt が存在する場合は一時停止する
|
43
|
+
module Resque
|
44
|
+
class Worker
|
45
|
+
|
46
|
+
alias_method :reserve_without_stop_txt, :reserve
|
47
|
+
|
48
|
+
def reserve
|
49
|
+
stop_file_path = File.join('tmp', 'stop.txt')
|
50
|
+
if File.exist?(stop_file_path)
|
51
|
+
puts "#{Resque.redis.namespace} #{stop_file_path} が存在するため一時停止します。"
|
52
|
+
nil
|
53
|
+
else
|
54
|
+
reserve_without_stop_txt
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# resque-webのエラーメッセージ文字化けに対するパッチ
|
62
|
+
module Resque
|
63
|
+
module Failure
|
64
|
+
class Redis
|
65
|
+
|
66
|
+
def save
|
67
|
+
data = {
|
68
|
+
:failed_at => UTF8Util.clean(Time.now.strftime("%Y/%m/%d %H:%M:%S %Z")),
|
69
|
+
:payload => payload,
|
70
|
+
:exception => exception.class.to_s,
|
71
|
+
:error => exception.to_s, #UTF8Util.clean(exception.to_s), UTF8Util.cleanを呼ぶと文字化けする
|
72
|
+
:backtrace => filter_backtrace(Array(exception.backtrace)),
|
73
|
+
:worker => worker.to_s,
|
74
|
+
:queue => queue
|
75
|
+
}
|
76
|
+
data = Resque.encode(data)
|
77
|
+
Resque.redis.rpush(:failed, data)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# エラーをログに出力
|
85
|
+
module Resque
|
86
|
+
module Failure
|
87
|
+
class LogOutput < Base
|
88
|
+
def save
|
89
|
+
Bizside.logger.error [
|
90
|
+
"[FATAL] Resque #{queue}:#{worker}",
|
91
|
+
"#{payload}",
|
92
|
+
"#{exception.class} #{exception.to_s}",
|
93
|
+
"#{Array(exception.backtrace).join("\n")}"
|
94
|
+
].join("\n")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# エラーをLTSV形式で専用ログに出力
|
101
|
+
module Resque
|
102
|
+
module Failure
|
103
|
+
class JobAuditLog < Base
|
104
|
+
|
105
|
+
def save
|
106
|
+
info = build_loginfo
|
107
|
+
return info if Bizside.rails_env&.test?
|
108
|
+
|
109
|
+
logger.record(info)
|
110
|
+
|
111
|
+
info
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def logger
|
117
|
+
@logger ||= Bizside::Audit::JobLogger.logger
|
118
|
+
end
|
119
|
+
|
120
|
+
def build_loginfo
|
121
|
+
info = {
|
122
|
+
time: Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%z'),
|
123
|
+
add_on_name: Bizside.config.add_on_name,
|
124
|
+
server_address: hostname,
|
125
|
+
class: payload['class'],
|
126
|
+
args: payload['args'].to_s,
|
127
|
+
queue: queue,
|
128
|
+
worker: worker.to_s,
|
129
|
+
exception: exception.class,
|
130
|
+
exception_message: exception.to_s,
|
131
|
+
exception_backtrace: Array(exception.backtrace)[0..10].join("\n") # Get only the top 10 because there are many traces.
|
132
|
+
}
|
133
|
+
info
|
134
|
+
end
|
135
|
+
|
136
|
+
# ホスト名を取得。
|
137
|
+
#
|
138
|
+
# 下記理由から hostname(1) を使用:
|
139
|
+
#
|
140
|
+
# * job 実行環境では環境変数 HOSTNAME がセットされていないケースがある
|
141
|
+
# (例: 通常の god 起動の場合。他方、container 起動の場合は
|
142
|
+
# HOSTNAME がセットされている模様)。
|
143
|
+
# * hostname(1) は Linux Standard Base 共通コマンドのため必ず存在する。
|
144
|
+
def hostname
|
145
|
+
@hostname ||= (`hostname`.chomp rescue '(unknown)')
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
Resque::Failure::Multiple.configure do |multi|
|
153
|
+
multi.classes = [Resque::Failure::Redis, Resque::Failure::LogOutput, Resque::Failure::JobAuditLog]
|
154
|
+
end
|
data/lib/bizside/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bizside
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bizside-developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -419,6 +419,8 @@ files:
|
|
419
419
|
- lib/bizside/railtie.rb
|
420
420
|
- lib/bizside/record_has_warnings.rb
|
421
421
|
- lib/bizside/resque.rb
|
422
|
+
- lib/bizside/resque.rb.bkp
|
423
|
+
- lib/bizside/resque.rb~
|
422
424
|
- lib/bizside/rsync.rb
|
423
425
|
- lib/bizside/safe_pty.rb
|
424
426
|
- lib/bizside/shib_utils.rb
|
@@ -441,6 +443,7 @@ files:
|
|
441
443
|
- lib/bizside/user_agent/controller_helper.rb
|
442
444
|
- lib/bizside/validations.rb
|
443
445
|
- lib/bizside/version.rb
|
446
|
+
- lib/bizside/version.rb~
|
444
447
|
- lib/bizside/view_helper.rb
|
445
448
|
- lib/bizside/warning.rb
|
446
449
|
- lib/bizside/yes.rb
|
@@ -479,7 +482,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
479
482
|
- !ruby/object:Gem::Version
|
480
483
|
version: '0'
|
481
484
|
requirements: []
|
482
|
-
rubygems_version: 3.2.
|
485
|
+
rubygems_version: 3.2.29
|
483
486
|
signing_key:
|
484
487
|
specification_version: 4
|
485
488
|
summary: Bizside is an utilities for web application.
|