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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26c26db7d3e38fd8d2a1851b5c4424ffd34c0ab10fb2e91086d070a06075a5fe
4
- data.tar.gz: 3f683257382c9c1578a177bb08899611a3b9e016c0473d92fc87523fd1dde980
3
+ metadata.gz: f00dba55e99db77fad3ddfe68afb706b89fe3bdc718ad774613309c3bebb7d7e
4
+ data.tar.gz: 16be628bb79ff1689956d1f63f0895559775531b74d80270d7edb6239ef9abf3
5
5
  SHA512:
6
- metadata.gz: b94958b3abbafda5e3143ececc2bd370115e1a35b102c04abcaa791c9831bc9a23306c94bf36888accc1d7e98a11df9026e1842c421fa59679d9295095f7339d
7
- data.tar.gz: 9dac9f0377694abcb2d73cbc3869f1fd5923cb50ee1c6c3fa379ec8a68d3458003e3960f97125725189fd5ff9ea4c4e676f582719b74fdc9cf93d8e2dbaf5ba3
6
+ metadata.gz: a2c0f432bd5d53b537f9db6b3a7f28a9f0c747b9eb0a49ec0838ec02ecfbdedc902d36bda002581d82cbaf5513f0177d5ac57fa229604fde0516bf729b1df9fb
7
+ data.tar.gz: b28b49b0f10c14bedf018a61d938465de5a95d4a8884a9721bf25291c08eec807e2017bad15d6d1594a4f0c82c971b3d70ee1d63502ad94ace3a6000f9ff54ea
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Bizside
2
- VERSION = '2.0.6'
2
+ VERSION = '2.0.7'
3
3
  end
@@ -0,0 +1,3 @@
1
+ module Bizside
2
+ VERSION = '2.0.6.1'
3
+ end
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.6
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-02-15 00:00:00.000000000 Z
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.16
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.