memolog 0.2.1 → 0.3.2

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: 134c4cf9a9a91e26cf1f1280c21abbb99fb77d61de5dd903ddf494a1ac6e1fa8
4
- data.tar.gz: 9e2ba57e7a020156bca7bbcbdf93d4e13a7d99405fafcc6816fef2375887ce0a
3
+ metadata.gz: 97630c7e390e26c97872776f9c6b142fcb18cafaf05ceb937a8ee4a10537212c
4
+ data.tar.gz: 568faf40b03bc8488d651b7e09eda247f5f22e399d583d97b671868618b91e4c
5
5
  SHA512:
6
- metadata.gz: 8b69825936175cf15595e4b116853eb3053c852a944c8d77316571ea43c1df8cb61873aea67bc611e583ffebcfa6fa87012dc64681e9d7a3656111cfbdfbee94
7
- data.tar.gz: 454194e823302aa15f4a215fa844d60a0f5096d64bee54a2c8931fdd7e507ca0f2e729d7deafffd680b714123375a056fde7e197e2b961f708998c5986bcc726
6
+ metadata.gz: fb3b455425fa4e68c68620248e1cf3493e1888e7023e62cb1179b31b1a316def07c0b918ae1fa4ba3b3ff6b23c339a9f481a340fcd784a712405622ad87a77b1
7
+ data.tar.gz: 8cde0d72453487d056a4e507a06943bc21d2a5c5d52a8c6298b85bdc81375c189fd39904be27fb5304757cbba70493650b9a14ec4f0482846ae7ae587fe11572
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ memolog-*.gem
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## 0.3.0
2
+
3
+ - Apply a prepend patch with `Sentry::Scope#apply_to_event` method.
4
+ - Check constant definition via `Object.const_defined?`
5
+ - Moving `Sentry::Sidekiq` scheme to monkey patch `Sentry::Sidekiq::SentryContextServerMiddleware`
6
+ - More specs
7
+
8
+ ## 0.2.2
9
+
10
+ - Do not init Rails middleware in Sidekiq server.
11
+
12
+ ## 0.2.1
13
+
14
+ - Better Rails middleware initialization.
15
+
1
16
  ## 0.2.0
2
17
 
3
18
  - Uprade gem due [CVE-2021-41098](https://github.com/advisories/GHSA-2rr5-8q37-2w7h)
data/Gemfile CHANGED
@@ -10,5 +10,4 @@ gem "rails"
10
10
  gem "rake"
11
11
  gem "rspec"
12
12
  gem "rubocop-config-umbrellio"
13
- gem "sentry-ruby"
14
13
  gem "sidekiq"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- memolog (0.2.1)
4
+ memolog (0.3.2)
5
5
  logger (~> 1.4.3)
6
6
  securerandom (~> 0.1.0)
7
7
 
@@ -75,30 +75,11 @@ GEM
75
75
  crass (1.0.6)
76
76
  diff-lcs (1.4.4)
77
77
  erubi (1.10.0)
78
- faraday (1.8.0)
79
- faraday-em_http (~> 1.0)
80
- faraday-em_synchrony (~> 1.0)
81
- faraday-excon (~> 1.1)
82
- faraday-httpclient (~> 1.0.1)
83
- faraday-net_http (~> 1.0)
84
- faraday-net_http_persistent (~> 1.1)
85
- faraday-patron (~> 1.0)
86
- faraday-rack (~> 1.0)
87
- multipart-post (>= 1.2, < 3)
88
- ruby2_keywords (>= 0.0.4)
89
- faraday-em_http (1.0.0)
90
- faraday-em_synchrony (1.0.0)
91
- faraday-excon (1.1.0)
92
- faraday-httpclient (1.0.1)
93
- faraday-net_http (1.0.1)
94
- faraday-net_http_persistent (1.2.0)
95
- faraday-patron (1.0.0)
96
- faraday-rack (1.0.0)
97
78
  globalid (0.5.2)
98
79
  activesupport (>= 5.0)
99
80
  i18n (1.8.10)
100
81
  concurrent-ruby (~> 1.0)
101
- logger (1.4.3)
82
+ logger (1.4.4)
102
83
  loofah (2.12.0)
103
84
  crass (~> 1.0.2)
104
85
  nokogiri (>= 1.5.9)
@@ -108,7 +89,6 @@ GEM
108
89
  method_source (1.0.0)
109
90
  mini_mime (1.1.1)
110
91
  minitest (5.14.4)
111
- multipart-post (2.1.1)
112
92
  nio4r (2.5.8)
113
93
  nokogiri (1.12.5-x86_64-darwin)
114
94
  racc (~> 1.4)
@@ -201,15 +181,7 @@ GEM
201
181
  rubocop-sequel (0.2.0)
202
182
  rubocop (~> 1.0)
203
183
  ruby-progressbar (1.11.0)
204
- ruby2_keywords (0.0.5)
205
- securerandom (0.1.0)
206
- sentry-ruby (4.7.3)
207
- concurrent-ruby (~> 1.0, >= 1.0.2)
208
- faraday (>= 1.0)
209
- sentry-ruby-core (= 4.7.3)
210
- sentry-ruby-core (4.7.3)
211
- concurrent-ruby
212
- faraday
184
+ securerandom (0.1.1)
213
185
  sidekiq (6.2.2)
214
186
  connection_pool (>= 2.2.2)
215
187
  rack (~> 2.0)
@@ -241,7 +213,6 @@ DEPENDENCIES
241
213
  rake
242
214
  rspec
243
215
  rubocop-config-umbrellio
244
- sentry-ruby
245
216
  sidekiq
246
217
 
247
218
  BUNDLED WITH
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Memolog
2
2
 
3
3
  Memolog is an in-memory logger, which extend any other logger.
4
- Designed to work with [Sentry](https://github.com/getsentry/sentry-ruby).
5
- It adds `memolog` extra section to Sentry errors.
4
+ Designed to work with [Sentry](https://github.com/getsentry/sentry-ruby) but it's not necessary.
6
5
 
7
6
  ## Installation
8
7
 
@@ -28,9 +27,8 @@ Use this example during application initialization process (this example impleme
28
27
  Memolog.configure do |config|
29
28
  config.debug = false
30
29
  config.formatter = ::Memolog::Formatter.new
31
- config.initializers = %i[rails sentry sidekiq]
30
+ config.initializers = %i[rails sidekiq]
32
31
  config.log_size_limit = 50_000
33
- config.sentry_key = :memolog
34
32
  config.uuid_callable = -> { SecureRandom.uuid }
35
33
  end
36
34
 
@@ -41,18 +39,17 @@ Available options are:
41
39
  - `debug` - set it to true if you need to leave Memolog.dump result outside `Memolog.run {}` block.
42
40
  - `formatter` - setup your own formatter.
43
41
  - `initializers` - define here what you want to initialize in `#init!` call.
44
- - `log_size_limit` - max log length in Sentry event.
45
- - `sentry_key` - key name in Sentry extra object.
42
+ - `log_size_limit` - max log length in `#dump`.
46
43
  - `uuid_callable` - Memolog add unique value to logs, here you can redefine uuid generation.
47
44
 
48
45
  ## Usage
49
46
 
50
47
  Please call `Memolog.extend_logger(Rails.logger)` or any other logger you want to collect.
51
- After that when error occured you can check your Sentry report and see `memolog` section with all
52
- logs collected before error. Also there will be unique identifier to find logs behaviour on your
53
- server or log collection system.
48
+ After that when error occured you can call `Memolog.dump` in your code and get log from
49
+ `Rails.logger` so you can collect it to another place (Sentry or etc). Also there will be unique
50
+ identifier to find logs behaviour on your server or log collection system.
54
51
 
55
- Memolog has init code for Rails (Middleware), Sentry (Extension) and Sidekiq (Middleware).
52
+ Memolog has init code for Rails (Middleware) and Sidekiq (Middleware).
56
53
  It implement all hacks on the `Memolog.init!` call.
57
54
  Also you can add `Memolog.run {}` around logs you want to collect and release it with `Memolog.dump`
58
55
  inside this block.
@@ -5,15 +5,13 @@ Memolog::Config = Struct.new(
5
5
  :formatter,
6
6
  :initializers,
7
7
  :log_size_limit,
8
- :sentry_key,
9
8
  :uuid_callable,
10
9
  ) do
11
10
  def initialize
12
11
  self.debug = false
13
12
  self.formatter = ::Memolog::Formatter.new
14
- self.initializers = %i[rails sentry sidekiq]
13
+ self.initializers = %i[rails sidekiq]
15
14
  self.log_size_limit = 50_000
16
- self.sentry_key = :memolog
17
15
  self.uuid_callable = -> { SecureRandom.uuid }
18
16
  end
19
17
  end
data/lib/memolog/init.rb CHANGED
@@ -2,29 +2,27 @@
2
2
 
3
3
  class Memolog::Init
4
4
  def call
5
- init_rails!
6
- init_sentry!
7
- init_sidekiq!
5
+ init_rails_middleware!
6
+ init_sidekiq_middleware!
8
7
  end
9
8
 
10
9
  private
11
10
 
12
- def init_rails!
13
- return unless defined?(Rails) && Memolog.config.initializers.include?(:rails)
14
- Rails.application.middleware.insert_before(0, Memolog::Middleware)
15
- end
11
+ def init_rails_middleware!
12
+ return unless Memolog.config.initializers.include?(:rails)
13
+ return unless Object.const_defined?("Rails")
14
+ return if Object.const_defined?("Sidekiq") && Sidekiq.server?
16
15
 
17
- def init_sentry!
18
- return unless defined?(Sentry::Scope) && Memolog.config.initializers.include?(:sentry)
19
- Sentry::Scope.prepend(Memolog::SentryScopeExtension)
16
+ Rails.application.middleware.insert_before(0, Memolog::RailsMiddleware)
20
17
  end
21
18
 
22
- def init_sidekiq!
23
- return unless defined?(Sidekiq) && Memolog.config.initializers.include?(:sidekiq)
19
+ def init_sidekiq_middleware!
20
+ return unless Memolog.config.initializers.include?(:sidekiq)
21
+ return unless Object.const_defined?("Sidekiq")
24
22
 
25
23
  Sidekiq.configure_server do |config|
26
24
  config.server_middleware do |chain|
27
- chain.prepend(Memolog::SentrySidekiqMiddleware)
25
+ chain.prepend(Memolog::SidekiqMiddleware)
28
26
  end
29
27
  end
30
28
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Memolog::Middleware
3
+ class Memolog::RailsMiddleware
4
4
  def initialize(app)
5
5
  @app = app
6
6
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Memolog::SentryExtension
4
+ def self.prepended(base)
5
+ base.singleton_class.send(:prepend, ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+ def capture_exception(exception, **options, &block)
10
+ set_extras_memolog!
11
+ super
12
+ end
13
+
14
+ def capture_message(message, **options, &block)
15
+ set_extras_memolog!
16
+ super
17
+ end
18
+
19
+ def set_extras_memolog!
20
+ return unless get_current_scope
21
+ set_extras(Memolog.config.sentry_key => Memolog.dump)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Memolog::SidekiqMiddleware
4
+ def call(*)
5
+ Memolog.run { yield } # rubocop:disable Style/ExplicitBlockArgument
6
+ end
7
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Memolog
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.2"
5
5
  end
data/lib/memolog.rb CHANGED
@@ -9,17 +9,16 @@ require "memolog/config"
9
9
  require "memolog/extension"
10
10
  require "memolog/formatter"
11
11
  require "memolog/init"
12
- require "memolog/middleware"
13
- require "memolog/sentry_scope_extension"
14
- require "memolog/sentry_sidekiq_middleware"
12
+ require "memolog/rails_middleware"
13
+ require "memolog/sentry_extension"
14
+ require "memolog/sidekiq_middleware"
15
15
 
16
16
  module Memolog
17
17
  extend self
18
18
 
19
- attr_accessor :config, :logdevs
19
+ attr_accessor :config
20
20
 
21
21
  @config = Memolog::Config.new
22
- @logdevs = []
23
22
 
24
23
  def configure
25
24
  yield(config) if block_given?
@@ -42,6 +41,10 @@ module Memolog
42
41
  Thread.current[:memolog_logger] ||= Logger.new(nil, formatter: config.formatter)
43
42
  end
44
43
 
44
+ def logdevs
45
+ Thread.current[:memolog_logdevs] ||= []
46
+ end
47
+
45
48
  def run
46
49
  Thread.current[:memolog_uuid] = config.uuid_callable.call
47
50
 
@@ -59,6 +62,6 @@ module Memolog
59
62
  beginning = logdevs.last.string.length - config.log_size_limit
60
63
  beginning = 0 if beginning.negative?
61
64
 
62
- logdevs.last.string.slice(beginning, config.log_size_limit)
65
+ logdevs.last.string.slice(beginning, config.log_size_limit).presence
63
66
  end
64
67
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memolog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stepan Kirushkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2021-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -64,9 +64,9 @@ files:
64
64
  - lib/memolog/extension.rb
65
65
  - lib/memolog/formatter.rb
66
66
  - lib/memolog/init.rb
67
- - lib/memolog/middleware.rb
68
- - lib/memolog/sentry_scope_extension.rb
69
- - lib/memolog/sentry_sidekiq_middleware.rb
67
+ - lib/memolog/rails_middleware.rb
68
+ - lib/memolog/sentry_extension.rb
69
+ - lib/memolog/sidekiq_middleware.rb
70
70
  - lib/memolog/version.rb
71
71
  homepage: https://github.com/skirushkin/memolog
72
72
  licenses:
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Memolog::SentryScopeExtension
4
- def extra
5
- memolog_dump = Memolog.dump
6
- memolog_dump.present? ? super.merge!(Memolog.config.sentry_key => memolog_dump) : super
7
- end
8
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Memolog::SentrySidekiqMiddleware
4
- def call(*)
5
- Memolog.run do
6
- yield
7
- rescue => error
8
- memolog_dump = Memolog.dump
9
- Sentry.set_extras(Memolog.config.sentry_key => memolog_dump) if memolog_dump
10
- raise error
11
- end
12
- end
13
- end