bizside 2.0.6 → 2.0.7

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.
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.