getaround_utils 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +11 -1
- data/README.md +13 -0
- data/getaround_utils.gemspec +1 -0
- data/lib/getaround_utils/log_formatters/deep_key_value.rb +17 -27
- data/lib/getaround_utils/patches.rb +1 -0
- data/lib/getaround_utils/patches/key_value_log_tags.rb +0 -1
- data/lib/getaround_utils/patches/key_value_sidekiq_exceptions.rb +26 -0
- data/lib/getaround_utils/utils/deep_key_value_serializer.rb +16 -2
- data/lib/getaround_utils/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6caee3209d10665822566c7ccc2d6b336c8132b72106aacda7db87a317a0f9f7
|
4
|
+
data.tar.gz: 241deaa2c3b3d37bb21bade62b517b54bee6fc62910113f2f40209862230d80c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c19cb3921b428f3cd7f5d885edb7eb2214fae0c07449f8a25e0a2225c6961408960d641f7a702b686cbf453476e4eea90e558f18ce0310af19ff49874f57ea17
|
7
|
+
data.tar.gz: 25230181f5c735e08c60384e5fd734969b4a703df25a2cf995f7582131a0e6b182e5d091e1bd5ab6d741f3b4008df09cb9d2c220e3ecaf5ab308ee913ca56eb0
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
getaround_utils (0.1.
|
4
|
+
getaround_utils (0.1.9)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -65,6 +65,7 @@ GEM
|
|
65
65
|
builder (3.2.3)
|
66
66
|
coderay (1.1.2)
|
67
67
|
concurrent-ruby (1.1.5)
|
68
|
+
connection_pool (2.2.2)
|
68
69
|
crass (1.0.5)
|
69
70
|
diff-lcs (1.3)
|
70
71
|
erubi (1.9.0)
|
@@ -103,6 +104,8 @@ GEM
|
|
103
104
|
coderay (~> 1.1.0)
|
104
105
|
method_source (~> 0.9.0)
|
105
106
|
rack (2.0.7)
|
107
|
+
rack-protection (2.0.7)
|
108
|
+
rack
|
106
109
|
rack-test (1.1.0)
|
107
110
|
rack (>= 1.0, < 3)
|
108
111
|
rails (6.0.0)
|
@@ -133,6 +136,7 @@ GEM
|
|
133
136
|
thor (>= 0.20.3, < 2.0)
|
134
137
|
rainbow (3.0.0)
|
135
138
|
rake (10.5.0)
|
139
|
+
redis (4.1.3)
|
136
140
|
relaxed-rubocop (2.4)
|
137
141
|
request_store (1.4.1)
|
138
142
|
rack (>= 1.4)
|
@@ -167,6 +171,11 @@ GEM
|
|
167
171
|
rubocop-rspec (1.36.0)
|
168
172
|
rubocop (>= 0.68.1)
|
169
173
|
ruby-progressbar (1.10.1)
|
174
|
+
sidekiq (6.0.3)
|
175
|
+
connection_pool (>= 2.2.2)
|
176
|
+
rack (>= 2.0.0)
|
177
|
+
rack-protection (>= 2.0.0)
|
178
|
+
redis (>= 4.1.0)
|
170
179
|
sprockets (4.0.0)
|
171
180
|
concurrent-ruby (~> 1.0)
|
172
181
|
rack (> 1, < 3)
|
@@ -199,6 +208,7 @@ DEPENDENCIES
|
|
199
208
|
rspec-rails (~> 3.9)
|
200
209
|
rubocop (~> 0.75, >= 0.75.0)
|
201
210
|
rubocop-rspec (~> 1.36, >= 0.36.0)
|
211
|
+
sidekiq (~> 6.0)
|
202
212
|
|
203
213
|
BUNDLED WITH
|
204
214
|
2.0.2
|
data/README.md
CHANGED
@@ -52,6 +52,19 @@ GetaroundUtils::Patches::KeyValueLogTags.enable
|
|
52
52
|
|
53
53
|
For more details, [read the spec](spec/getaround_utils/patches/key_value_log_tags_spec.rb)
|
54
54
|
|
55
|
+
|
56
|
+
### GetaroundUtils::Patches::KeyValueSidekiqExceptions
|
57
|
+
|
58
|
+
Enables parse-able exception logging from Sidekiq
|
59
|
+
```
|
60
|
+
# config/application.rb
|
61
|
+
require 'getaround_utils/patches/key_value_sidekiq_exceptions'
|
62
|
+
GetaroundUtils::Patches::KeyValueSidekiqExceptions.enable
|
63
|
+
```
|
64
|
+
|
65
|
+
For more details, [read the spec](spec/getaround_utils/patches/key_value_sidekiq_exceptions_spec.rb)
|
66
|
+
|
67
|
+
|
55
68
|
## Misc
|
56
69
|
|
57
70
|
### GetaroundUtils::LogFormatters::DeepKeyValue
|
data/getaround_utils.gemspec
CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |gem|
|
|
24
24
|
gem.add_development_dependency 'rspec-rails', '~> 3.9'
|
25
25
|
gem.add_development_dependency 'rubocop', '~> 0.75', '>= 0.75.0'
|
26
26
|
gem.add_development_dependency 'rubocop-rspec', '~> 1.36', '>= 0.36.0'
|
27
|
+
gem.add_development_dependency 'sidekiq', '~> 6.0'
|
27
28
|
end
|
@@ -10,51 +10,41 @@ require 'getaround_utils/utils/deep_key_value_serializer'
|
|
10
10
|
# It will attempt to serialize message it is a string otherwise adding it as message=value
|
11
11
|
|
12
12
|
class GetaroundUtils::LogFormatters::DeepKeyValue < GetaroundUtils::Utils::DeepKeyValueSerializer
|
13
|
-
def
|
14
|
-
payload = { severity: severity, appname: appname }
|
13
|
+
def normalize(message)
|
15
14
|
if message.is_a?(Hash)
|
16
|
-
|
15
|
+
serialize(message.compact)
|
16
|
+
elsif message.is_a?(String) && message.match(/^[^ =]+=/)
|
17
|
+
message
|
17
18
|
else
|
18
|
-
|
19
|
+
serialize(message: message.to_s)
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
23
|
+
def call(severity, _datetime, appname, message)
|
24
|
+
payload = { severity: severity, appname: appname }
|
25
|
+
"#{normalize(payload)} #{normalize(message)}\n"
|
26
|
+
end
|
27
|
+
|
22
28
|
module Lograge
|
23
|
-
def call(
|
24
|
-
|
25
|
-
serialize(
|
29
|
+
def call(message)
|
30
|
+
message = message.compact if message.is_a?(Hash)
|
31
|
+
serialize(message)
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
29
|
-
##
|
30
|
-
# Return a lograge-style LogFormatter
|
31
|
-
#
|
32
|
-
# This formatter will only take one argument and serialize it
|
33
|
-
|
34
35
|
def self.for_lograge
|
35
36
|
new.extend(Lograge)
|
36
37
|
end
|
37
38
|
|
38
39
|
module Sidekiq
|
39
40
|
def call(severity, _datetime, appname, message)
|
40
|
-
payload = {}
|
41
|
-
|
42
|
-
|
43
|
-
message
|
44
|
-
message.merge(payload.compact)
|
45
|
-
else
|
46
|
-
"#{serialize(payload.compact)} #{message}"
|
47
|
-
end
|
48
|
-
super
|
41
|
+
payload = { severity: severity, appname: appname }
|
42
|
+
sidekiq = { sidekiq: Thread.current[:sidekiq_context] || {} }
|
43
|
+
sidekiq[:sidekiq][:tid] = Thread.current['sidekiq_tid']
|
44
|
+
"#{normalize(payload)} #{normalize(message)} #{normalize(sidekiq)}\n"
|
49
45
|
end
|
50
46
|
end
|
51
47
|
|
52
|
-
##
|
53
|
-
# Return a sidekiq-style LogFormatter
|
54
|
-
#
|
55
|
-
# This formatter replicates the default Sidekiq LogFormatter behavior of merging context
|
56
|
-
# values from the current Thread's store
|
57
|
-
|
58
48
|
def self.for_sidekiq
|
59
49
|
new.extend(Sidekiq)
|
60
50
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'sidekiq/exception_handler'
|
2
|
+
require 'getaround_utils/utils/deep_key_value_serializer'
|
3
|
+
|
4
|
+
module GetaroundUtils; end
|
5
|
+
module GetaroundUtils::Patches; end
|
6
|
+
|
7
|
+
class GetaroundUtils::Patches::KeyValueSidekiqExceptions
|
8
|
+
module ExceptionHandlerLogger
|
9
|
+
def kv_formatter
|
10
|
+
@kv_formatter ||= GetaroundUtils::Utils::DeepKeyValueSerializer.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def call(exception, ctx)
|
14
|
+
payload = {}
|
15
|
+
payload[:exception] = exception&.class&.name
|
16
|
+
payload[:sidekiq] = ctx
|
17
|
+
payload[:message] = exception&.message
|
18
|
+
payload[:backtrace] = exception&.backtrace&.join("\n")
|
19
|
+
Sidekiq.logger.warn(kv_formatter.serialize(payload.compact))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.enable
|
24
|
+
Sidekiq::ExceptionHandler::Logger.prepend ExceptionHandlerLogger
|
25
|
+
end
|
26
|
+
end
|
@@ -2,6 +2,11 @@ module GetaroundUtils; end
|
|
2
2
|
module GetaroundUtils::Utils; end
|
3
3
|
|
4
4
|
class GetaroundUtils::Utils::DeepKeyValueSerializer
|
5
|
+
def initialize(max_depth: 5, max_length: 512)
|
6
|
+
@max_depth = max_depth
|
7
|
+
@max_length = max_length
|
8
|
+
end
|
9
|
+
|
5
10
|
def serialize(data)
|
6
11
|
case data
|
7
12
|
when Array
|
@@ -19,6 +24,10 @@ class GetaroundUtils::Utils::DeepKeyValueSerializer
|
|
19
24
|
|
20
25
|
# https://stackoverflow.com/questions/48836464/how-to-flatten-a-hash-making-each-key-a-unique-value
|
21
26
|
def flattify(value, result = {}, path = [])
|
27
|
+
if path.length > @max_depth
|
28
|
+
result[path.join(".")] = '"..."'
|
29
|
+
return result
|
30
|
+
end
|
22
31
|
case value
|
23
32
|
when Array
|
24
33
|
value.each.with_index(0) do |v, i|
|
@@ -31,9 +40,14 @@ class GetaroundUtils::Utils::DeepKeyValueSerializer
|
|
31
40
|
when Numeric
|
32
41
|
result[path.join(".")] = value.to_s
|
33
42
|
when String
|
34
|
-
|
43
|
+
value = if value =~ /^".*"$/
|
44
|
+
value.length >= @max_length ? %{#{value[0...@max_length]} ..."} : value
|
45
|
+
else
|
46
|
+
value.length >= @max_length ? %{#{value[0...@max_length]} ...}.inspect : value.inspect
|
47
|
+
end
|
48
|
+
result[path.join(".")] = value
|
35
49
|
else
|
36
|
-
|
50
|
+
flattify(value.to_s, result, path)
|
37
51
|
end
|
38
52
|
result
|
39
53
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: getaround_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Drivy
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-11-
|
12
|
+
date: 2019-11-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -175,6 +175,20 @@ dependencies:
|
|
175
175
|
- - "~>"
|
176
176
|
- !ruby/object:Gem::Version
|
177
177
|
version: '1.36'
|
178
|
+
- !ruby/object:Gem::Dependency
|
179
|
+
name: sidekiq
|
180
|
+
requirement: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - "~>"
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '6.0'
|
185
|
+
type: :development
|
186
|
+
prerelease: false
|
187
|
+
version_requirements: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - "~>"
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '6.0'
|
178
192
|
description: Shared base utility classes for Getaround Backend Applications.
|
179
193
|
email:
|
180
194
|
- oss@drivy.com
|
@@ -194,6 +208,7 @@ files:
|
|
194
208
|
- lib/getaround_utils/mixins/loggable.rb
|
195
209
|
- lib/getaround_utils/patches.rb
|
196
210
|
- lib/getaround_utils/patches/key_value_log_tags.rb
|
211
|
+
- lib/getaround_utils/patches/key_value_sidekiq_exceptions.rb
|
197
212
|
- lib/getaround_utils/railties/lograge.rb
|
198
213
|
- lib/getaround_utils/utils.rb
|
199
214
|
- lib/getaround_utils/utils/deep_key_value_serializer.rb
|