logster 2.12.2 → 2.13.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +5 -0
  3. data/.streerc +2 -0
  4. data/CHANGELOG.md +8 -0
  5. data/Gemfile +1 -1
  6. data/README.md +7 -6
  7. data/assets/javascript/{chunk.143.f61340b825c6a3bf6dbe.js → chunk.143.5bf090e78cbca9ee78cc.js} +4 -4
  8. data/assets/javascript/{chunk.178.6d9ae01775c898e7b748.js → chunk.178.135370942038cfbbe65e.js} +3 -3
  9. data/assets/javascript/client-app.js +103 -35
  10. data/client-app/app/controllers/show.js +17 -1
  11. data/client-app/app/templates/show.hbs +2 -0
  12. data/client-app/package.json +1 -1
  13. data/client-app/preload-json-manager.rb +10 -17
  14. data/client-app/yarn.lock +131 -44
  15. data/lib/examples/sidekiq_logster_reporter.rb +5 -7
  16. data/lib/logster/base_store.rb +26 -22
  17. data/lib/logster/cache.rb +2 -1
  18. data/lib/logster/configuration.rb +3 -3
  19. data/lib/logster/defer_logger.rb +2 -4
  20. data/lib/logster/group.rb +17 -20
  21. data/lib/logster/ignore_pattern.rb +1 -2
  22. data/lib/logster/logger.rb +18 -16
  23. data/lib/logster/message.rb +53 -57
  24. data/lib/logster/middleware/debug_exceptions.rb +12 -10
  25. data/lib/logster/middleware/reporter.rb +17 -26
  26. data/lib/logster/middleware/viewer.rb +77 -97
  27. data/lib/logster/pattern.rb +4 -7
  28. data/lib/logster/rails/railtie.rb +10 -13
  29. data/lib/logster/redis_rate_limiter.rb +2 -7
  30. data/lib/logster/redis_store.rb +79 -99
  31. data/lib/logster/scheduler.rb +1 -5
  32. data/lib/logster/suppression_pattern.rb +7 -5
  33. data/lib/logster/version.rb +1 -1
  34. data/lib/logster/web.rb +1 -1
  35. data/lib/logster.rb +15 -17
  36. data/logster.gemspec +14 -14
  37. data/test/examples/test_sidekiq_reporter_example.rb +8 -9
  38. data/test/fake_data/generate.rb +14 -3
  39. data/test/logster/middleware/test_reporter.rb +9 -7
  40. data/test/logster/middleware/test_viewer.rb +117 -101
  41. data/test/logster/test_base_store.rb +79 -58
  42. data/test/logster/test_cache.rb +5 -11
  43. data/test/logster/test_defer_logger.rb +3 -3
  44. data/test/logster/test_group.rb +14 -18
  45. data/test/logster/test_ignore_pattern.rb +2 -3
  46. data/test/logster/test_logger.rb +14 -14
  47. data/test/logster/test_message.rb +29 -31
  48. data/test/logster/test_pattern.rb +7 -15
  49. data/test/logster/test_redis_rate_limiter.rb +35 -21
  50. data/test/logster/test_redis_store.rb +239 -151
  51. data/test/test_helper.rb +9 -9
  52. metadata +19 -4
@@ -4,7 +4,8 @@ module Logster
4
4
  class Pattern
5
5
  @child_classes = []
6
6
 
7
- class PatternError < StandardError; end
7
+ class PatternError < StandardError
8
+ end
8
9
 
9
10
  def self.inherited(subclass)
10
11
  @child_classes << subclass
@@ -23,7 +24,7 @@ module Logster
23
24
  return string if Regexp === string
24
25
  return unless String === string
25
26
  if string[0] == "/"
26
- return unless string =~ /\/(.+)\/(.*)/
27
+ return unless string =~ %r{/(.+)/(.*)}
27
28
  string = $1
28
29
  flag = Regexp::IGNORECASE if $2 && $2.include?("i")
29
30
  end
@@ -34,11 +35,7 @@ module Logster
34
35
 
35
36
  def self.find_all(raw: false, store: Logster.store)
36
37
  patterns = store.get_patterns(set_name) || []
37
- unless raw
38
- patterns.map! do |p|
39
- parse_pattern(p)
40
- end
41
- end
38
+ patterns.map! { |p| parse_pattern(p) } unless raw
42
39
  patterns.compact!
43
40
  patterns
44
41
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Logster::Rails
4
-
5
4
  # this magically registers logster.js in the asset pipeline
6
5
  class Engine < Rails::Engine
7
6
  end
@@ -9,14 +8,14 @@ module Logster::Rails
9
8
  def self.set_logger(config)
10
9
  return unless Logster.config.environments.include?(Rails.env.to_sym)
11
10
 
12
- require 'logster/middleware/debug_exceptions'
13
- require 'logster/middleware/reporter'
11
+ require "logster/middleware/debug_exceptions"
12
+ require "logster/middleware/reporter"
14
13
 
15
14
  store = Logster.store ||= Logster::RedisStore.new
16
15
  store.level = Logger::Severity::WARN if Rails.env.production?
17
16
 
18
17
  if Rails.env.development?
19
- require 'logster/defer_logger'
18
+ require "logster/defer_logger"
20
19
  logger = Logster::DeferLogger.new(store)
21
20
  else
22
21
  logger = Logster::Logger.new(store)
@@ -37,9 +36,12 @@ module Logster::Rails
37
36
  end
38
37
 
39
38
  if Rails::VERSION::MAJOR == 3
40
- app.middleware.insert_before ActionDispatch::DebugExceptions, Logster::Middleware::DebugExceptions
39
+ app.middleware.insert_before ActionDispatch::DebugExceptions,
40
+ Logster::Middleware::DebugExceptions
41
41
  else
42
- app.middleware.insert_before ActionDispatch::DebugExceptions, Logster::Middleware::DebugExceptions, Rails.application
42
+ app.middleware.insert_before ActionDispatch::DebugExceptions,
43
+ Logster::Middleware::DebugExceptions,
44
+ Rails.application
43
45
  end
44
46
 
45
47
  app.middleware.delete ActionDispatch::DebugExceptions
@@ -47,18 +49,13 @@ module Logster::Rails
47
49
 
48
50
  unless Logster.config.application_version
49
51
  git_version = `cd #{Rails.root} && git rev-parse --short HEAD 2> /dev/null`
50
- if git_version.present?
51
- Logster.config.application_version = git_version.strip
52
- end
52
+ Logster.config.application_version = git_version.strip if git_version.present?
53
53
  end
54
54
  end
55
55
  end
56
56
 
57
57
  class Railtie < ::Rails::Railtie
58
-
59
- config.before_initialize do
60
- Logster::Rails.set_logger(config)
61
- end
58
+ config.before_initialize { Logster::Rails.set_logger(config) }
62
59
 
63
60
  initializer "logster.configure_rails_initialization" do |app|
64
61
  Logster::Rails.initialize!(app)
@@ -81,12 +81,7 @@ module Logster
81
81
  private
82
82
 
83
83
  def self.key_prefix(redis_prefix)
84
- if redis_prefix
85
- "#{redis_prefix.call}:#{PREFIX}"
86
- else
87
- PREFIX
88
- end
89
-
84
+ redis_prefix ? "#{redis_prefix.call}:#{PREFIX}" : PREFIX
90
85
  end
91
86
 
92
87
  def key_prefix
@@ -96,7 +91,7 @@ module Logster
96
91
  def mget_keys(bucket_num)
97
92
  keys = @mget_keys.dup
98
93
  keys.delete_at(bucket_num)
99
- keys.map { |key| "'#{key}'" }.join(', ')
94
+ keys.map { |key| "'#{key}'" }.join(", ")
100
95
  end
101
96
 
102
97
  def bucket_number(time)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
- require 'set'
5
- require 'logster/base_store'
6
- require 'logster/redis_rate_limiter'
3
+ require "json"
4
+ require "set"
5
+ require "logster/base_store"
6
+ require "logster/redis_rate_limiter"
7
7
 
8
8
  module Logster
9
9
  class RedisStore < BaseStore
@@ -22,9 +22,7 @@ module Logster
22
22
 
23
23
  def save(message)
24
24
  if keys = message.solved_keys
25
- keys.each do |solved|
26
- return false if @redis.hget(solved_key, solved)
27
- end
25
+ keys.each { |solved| return false if @redis.hget(solved_key, solved) }
28
26
  end
29
27
 
30
28
  @redis.multi do |pipeline|
@@ -97,9 +95,7 @@ module Logster
97
95
  def solve(message_key)
98
96
  if (message = get(message_key)) && (keys = message.solved_keys)
99
97
  # add a time so we can expire it
100
- keys.each do |s_key|
101
- @redis.hset(solved_key, s_key, Time.now.to_f.to_i)
102
- end
98
+ keys.each { |s_key| @redis.hset(solved_key, s_key, Time.now.to_f.to_i) }
103
99
  end
104
100
  clear_solved
105
101
  end
@@ -179,19 +175,22 @@ module Logster
179
175
  @redis.mapped_hmset(hash_key, protected_messages)
180
176
  (all_keys - protected_keys).each { |k| delete_env(k) }
181
177
 
182
- sorted = protected_messages
183
- .values
184
- .map { |string|
185
- Message.from_json(string) rescue nil
186
- }
187
- .compact
188
- .sort
189
- .map(&:key)
178
+ sorted =
179
+ protected_messages
180
+ .values
181
+ .map do |string|
182
+ begin
183
+ Message.from_json(string)
184
+ rescue StandardError
185
+ nil
186
+ end
187
+ end
188
+ .compact
189
+ .sort
190
+ .map(&:key)
190
191
 
191
192
  @redis.pipelined do |pipeline|
192
- sorted.each do |message_key|
193
- pipeline.rpush(list_key, message_key)
194
- end
193
+ sorted.each { |message_key| pipeline.rpush(list_key, message_key) }
195
194
  end
196
195
 
197
196
  find_pattern_groups(load_messages: true).each do |group|
@@ -212,9 +211,7 @@ module Logster
212
211
  @redis.del(solved_key)
213
212
  @redis.del(ignored_logs_count_key)
214
213
  @redis.del(pattern_groups_key)
215
- Logster::Pattern.child_classes.each do |klass|
216
- @redis.del(klass.set_name)
217
- end
214
+ Logster::Pattern.child_classes.each { |klass| @redis.del(klass.set_name) }
218
215
  @redis.keys.each do |key|
219
216
  @redis.del(key) if key.include?(Logster::RedisRateLimiter::PREFIX)
220
217
  @redis.del(key) if key.start_with?(ip_rate_limit_key(""))
@@ -226,9 +223,7 @@ module Logster
226
223
  return nil unless json
227
224
 
228
225
  message = Message.from_json(json)
229
- if load_env
230
- message.env = get_env(message_key) || {}
231
- end
226
+ message.env = get_env(message_key) || {} if load_env
232
227
  message
233
228
  end
234
229
 
@@ -249,26 +244,30 @@ module Logster
249
244
  envs = nil
250
245
  if with_env
251
246
  envs = {}
252
- @redis.eval(
253
- BULK_ENV_GET_LUA,
254
- keys: message_keys.map { |k| env_prefix(k, with_namespace: true) }
255
- ).to_h.each do |k, v|
256
- next if v.size == 0
257
- parsed = v.size == 1 ? JSON.parse(v[0]) : v.map { |e| JSON.parse(e) }
258
- envs[env_unprefix(k, with_namespace: true)] = parsed
259
- end
260
- end
261
- messages = @redis.hmget(hash_key, message_keys).map! do |json|
262
- next if !json || json.size == 0
263
- message = Message.from_json(json)
264
- if with_env && envs
265
- env = envs[message.key]
266
- if !message.env || message.env.size == 0
267
- message.env = env || {}
247
+ @redis
248
+ .eval(
249
+ BULK_ENV_GET_LUA,
250
+ keys: message_keys.map { |k| env_prefix(k, with_namespace: true) },
251
+ )
252
+ .to_h
253
+ .each do |k, v|
254
+ next if v.size == 0
255
+ parsed = v.size == 1 ? JSON.parse(v[0]) : v.map { |e| JSON.parse(e) }
256
+ envs[env_unprefix(k, with_namespace: true)] = parsed
268
257
  end
269
- end
270
- message
271
258
  end
259
+ messages =
260
+ @redis
261
+ .hmget(hash_key, message_keys)
262
+ .map! do |json|
263
+ next if !json || json.size == 0
264
+ message = Message.from_json(json)
265
+ if with_env && envs
266
+ env = envs[message.key]
267
+ message.env = env || {} if !message.env || message.env.size == 0
268
+ end
269
+ message
270
+ end
272
271
  messages.compact!
273
272
  messages
274
273
  end
@@ -308,7 +307,7 @@ module Logster
308
307
  end
309
308
 
310
309
  def redis_prefix
311
- return 'default'.freeze if !@redis_prefix
310
+ return "default".freeze if !@redis_prefix
312
311
  @prefix_is_proc ||= @redis_prefix.respond_to?(:call)
313
312
  @prefix_is_proc ? @redis_prefix.call : @redis_prefix
314
313
  end
@@ -345,28 +344,26 @@ module Logster
345
344
  key = ip_rate_limit_key(ip_address)
346
345
 
347
346
  limited = @redis.call([:exists, key])
348
- if Integer === limited
349
- limited = limited != 0
350
- end
347
+ limited = limited != 0 if Integer === limited
351
348
 
352
- if perform && !limited
353
- @redis.setex key, limit, ""
354
- end
349
+ @redis.setex key, limit, "" if perform && !limited
355
350
 
356
351
  limited
357
352
  end
358
353
 
359
354
  def find_pattern_groups(load_messages: false)
360
- patterns = @patterns_cache.fetch(Logster::GroupingPattern::CACHE_KEY) do
361
- Logster::GroupingPattern.find_all(store: self)
362
- end
363
- patterns = patterns.select do |pattern|
364
- if block_given?
365
- yield(pattern)
366
- else
367
- true
355
+ patterns =
356
+ @patterns_cache.fetch(Logster::GroupingPattern::CACHE_KEY) do
357
+ Logster::GroupingPattern.find_all(store: self)
358
+ end
359
+ patterns =
360
+ patterns.select do |pattern|
361
+ if block_given?
362
+ yield(pattern)
363
+ else
364
+ true
365
+ end
368
366
  end
369
- end
370
367
  return [] if patterns.size == 0
371
368
  mapped = patterns.map(&:inspect)
372
369
  jsons = @redis.hmget(pattern_groups_key, mapped)
@@ -374,9 +371,7 @@ module Logster
374
371
  if json && json.size > 0
375
372
  group = Logster::Group.from_json(json)
376
373
  group.pattern = patterns[mapped.index(group.key)]
377
- if load_messages
378
- group.messages = bulk_get(group.messages_keys, with_env: false)
379
- end
374
+ group.messages = bulk_get(group.messages_keys, with_env: false) if load_messages
380
375
  group
381
376
  end
382
377
  end
@@ -405,9 +400,7 @@ module Logster
405
400
  message_keys = @redis.lrange(list_key, 0, -1) || []
406
401
 
407
402
  bulk_get(message_keys).each do |message|
408
- unless (ignores & (message.solved_keys || [])).empty?
409
- delete message
410
- end
403
+ delete message unless (ignores & (message.solved_keys || [])).empty?
411
404
  end
412
405
  end
413
406
  end
@@ -424,9 +417,7 @@ module Logster
424
417
  removed_keys << removed_key
425
418
  end
426
419
  end
427
- removed_keys.reverse.each do |key|
428
- @redis.lpush(list_key, key)
429
- end
420
+ removed_keys.reverse.each { |key| @redis.lpush(list_key, key) }
430
421
  end
431
422
  end
432
423
 
@@ -465,7 +456,7 @@ module Logster
465
456
  start = -limit
466
457
  finish = -1
467
458
 
468
- return [start, finish] unless before || after
459
+ return start, finish unless before || after
469
460
 
470
461
  found = nil
471
462
  find = before || after
@@ -527,11 +518,7 @@ module Logster
527
518
  if Array === message.env
528
519
  array_env_matches?(message, search, exclude)
529
520
  else
530
- if exclude
531
- !env_matches?(message.env, search)
532
- else
533
- env_matches?(message.env, search)
534
- end
521
+ exclude ? !env_matches?(message.env, search) : env_matches?(message.env, search)
535
522
  end
536
523
  end
537
524
 
@@ -547,7 +534,7 @@ module Logster
547
534
  value.to_s =~ search
548
535
  when String
549
536
  value.to_s =~ Regexp.new(search, Regexp::IGNORECASE)
550
- else
537
+ else
551
538
  false
552
539
  end
553
540
  end
@@ -555,13 +542,10 @@ module Logster
555
542
  end
556
543
 
557
544
  def array_env_matches?(message, search, exclude)
558
- matches = message.env.select do |env|
559
- if exclude
560
- !env_matches?(env, search)
561
- else
562
- env_matches?(env, search)
545
+ matches =
546
+ message.env.select do |env|
547
+ exclude ? !env_matches?(env, search) : env_matches?(env, search)
563
548
  end
564
- end
565
549
  return false if matches.empty?
566
550
  message.env = matches
567
551
  message.count = matches.size
@@ -619,22 +603,22 @@ module Logster
619
603
  # when you hit load more and the first row is a group.
620
604
  # The server uses this info (row_id) to know where it needs to
621
605
  # start scanning messages when looking up older messages.
622
- Logster::Group::GroupWeb.new(
623
- group.key,
624
- group.count,
625
- group.timestamp,
626
- group.messages,
627
- row_id
628
- )
606
+ Logster::Group::GroupWeb.new(group.key, group.count, group.timestamp, group.messages, row_id)
629
607
  end
630
608
 
631
609
  def register_rate_limit(severities, limit, duration, callback)
632
610
  severities = [severities] unless severities.is_a?(Array)
633
611
  redis = (@redis_raw_connection && @redis_prefix) ? @redis_raw_connection : @redis
634
612
 
635
- rate_limiter = RedisRateLimiter.new(
636
- redis, severities, limit, duration, Proc.new { redis_prefix }, callback
637
- )
613
+ rate_limiter =
614
+ RedisRateLimiter.new(
615
+ redis,
616
+ severities,
617
+ limit,
618
+ duration,
619
+ Proc.new { redis_prefix },
620
+ callback,
621
+ )
638
622
 
639
623
  rate_limits[self.redis_prefix] ||= []
640
624
  rate_limits[self.redis_prefix] << rate_limiter
@@ -654,17 +638,13 @@ module Logster
654
638
 
655
639
  def env_unprefix(key, with_namespace: false)
656
640
  prefix = ENV_PREFIX
657
- if with_namespace && namespace
658
- prefix = "#{namespace}:#{prefix}"
659
- end
641
+ prefix = "#{namespace}:#{prefix}" if with_namespace && namespace
660
642
  key.sub(prefix, "")
661
643
  end
662
644
 
663
645
  def env_prefix(key, with_namespace: false)
664
646
  prefix = ENV_PREFIX
665
- if with_namespace && namespace
666
- prefix = "#{namespace}:#{prefix}"
667
- end
647
+ prefix = "#{namespace}:#{prefix}" if with_namespace && namespace
668
648
  prefix + key
669
649
  end
670
650
 
@@ -31,11 +31,7 @@ module Logster
31
31
  private
32
32
 
33
33
  def start_thread
34
- @mutex.synchronize do
35
- if !@thread&.alive?
36
- @thread = Thread.new { do_work }
37
- end
38
- end
34
+ @mutex.synchronize { @thread = Thread.new { do_work } if !@thread&.alive? }
39
35
  end
40
36
 
41
37
  def do_work
@@ -24,12 +24,14 @@ module Logster
24
24
  def retro_delete_messages
25
25
  keys = []
26
26
  grouping_keys = []
27
- @store.get_all_messages(with_env: false).each do |message|
28
- if message =~ self.pattern
29
- keys << message.key
30
- grouping_keys << message.grouping_key
27
+ @store
28
+ .get_all_messages(with_env: false)
29
+ .each do |message|
30
+ if message =~ self.pattern
31
+ keys << message.key
32
+ grouping_keys << message.grouping_key
33
+ end
31
34
  end
32
- end
33
35
  @store.bulk_delete(keys, grouping_keys) if keys.size > 0 && grouping_keys.size > 0
34
36
  end
35
37
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Logster
4
- VERSION = "2.12.2"
4
+ VERSION = "2.13.1"
5
5
  end
data/lib/logster/web.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'logster/middleware/viewer'
3
+ require "logster/middleware/viewer"
4
4
 
5
5
  class Logster::Web
6
6
  class FourOhFour
data/lib/logster.rb CHANGED
@@ -1,19 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'logster/version'
4
- require 'logster/logger'
5
- require 'logster/message'
6
- require 'logster/configuration'
7
- require 'logster/web'
8
- require 'logster/ignore_pattern'
9
- require 'logster/pattern'
10
- require 'logster/suppression_pattern'
11
- require 'logster/grouping_pattern'
12
- require 'logster/group'
13
- require 'logster/cache'
14
-
15
- if defined? Redis
16
- require 'logster/redis_store'
3
+ require "logster/version"
4
+ require "logster/logger"
5
+ require "logster/message"
6
+ require "logster/configuration"
7
+ require "logster/web"
8
+ require "logster/ignore_pattern"
9
+ require "logster/pattern"
10
+ require "logster/suppression_pattern"
11
+ require "logster/grouping_pattern"
12
+ require "logster/group"
13
+ require "logster/cache"
14
+
15
+ if defined?(Redis)
16
+ require "logster/redis_store"
17
17
  else
18
18
  STDERR.puts "ERROR: Redis is not loaded, ensure redis gem is required before logster"
19
19
  exit
@@ -57,6 +57,4 @@ end
57
57
  # check logster/configuration.rb for config options
58
58
  # Logster.config.environments << :staging
59
59
 
60
- if defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i >= 3
61
- require 'logster/rails/railtie'
62
- end
60
+ require "logster/rails/railtie" if defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i >= 3
data/logster.gemspec CHANGED
@@ -1,30 +1,29 @@
1
1
  # coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
- lib = File.expand_path('../lib', __FILE__)
4
+ lib = File.expand_path("../lib", __FILE__)
5
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
- require 'logster/version'
6
+ require "logster/version"
7
7
 
8
8
  Gem::Specification.new do |spec|
9
- spec.name = "logster"
10
- spec.version = Logster::VERSION
11
- spec.authors = ["Sam Saffron"]
12
- spec.email = ["sam.saffron@gmail.com"]
13
- spec.summary = %q{UI for viewing logs in Rack}
14
- spec.description = %q{UI for viewing logs in Rack}
15
- spec.homepage = "https://github.com/discourse/logster"
16
- spec.license = "MIT"
9
+ spec.name = "logster"
10
+ spec.version = Logster::VERSION
11
+ spec.authors = ["Sam Saffron"]
12
+ spec.email = ["sam.saffron@gmail.com"]
13
+ spec.summary = "UI for viewing logs in Rack"
14
+ spec.description = "UI for viewing logs in Rack"
15
+ spec.homepage = "https://github.com/discourse/logster"
16
+ spec.license = "MIT"
17
17
 
18
18
  spec.required_ruby_version = ">= 2.5.0"
19
19
 
20
- files =
21
- `git ls-files -z`.split("\x0").reject { |f| f.start_with?(/website|bin/) }
20
+ files = `git ls-files -z`.split("\x0").reject { |f| f.start_with?(/website|bin/) }
22
21
  files += Dir.glob("assets/javascript/*")
23
22
  files += Dir.glob("assets/stylesheets/*")
24
23
  spec.files = files
25
24
 
26
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
27
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
25
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
28
27
  spec.require_paths = ["lib"]
29
28
 
30
29
  # NOTE dependency on rack is not explicit, this enables us to use
@@ -39,4 +38,5 @@ Gem::Specification.new do |spec|
39
38
  spec.add_development_dependency "timecop"
40
39
  spec.add_development_dependency "byebug", "~> 11.1.0"
41
40
  spec.add_development_dependency "rubocop-discourse", "~> 2.4.1"
41
+ spec.add_development_dependency "syntax_tree"
42
42
  end
@@ -1,13 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../test_helper'
4
- require 'logster/logger'
5
- require 'logster/redis_store'
6
- require 'logger'
7
- require 'examples/sidekiq_logster_reporter'
3
+ require_relative "../test_helper"
4
+ require "logster/logger"
5
+ require "logster/redis_store"
6
+ require "logger"
7
+ require "examples/sidekiq_logster_reporter"
8
8
 
9
9
  class TestSidekiqReporter < MiniTest::Test
10
-
11
10
  def setup
12
11
  Logster.store = @store = Logster::RedisStore.new(Redis.new)
13
12
  Logster.logger = @logger = Logster::Logger.new(Logster.store)
@@ -38,11 +37,11 @@ class TestSidekiqReporter < MiniTest::Test
38
37
  # A backtrace is joined()
39
38
  assert_equal(trace.join("\n"), report.backtrace)
40
39
  # The backtrace is deleted from the env
41
- assert_nil(report.env['backtrace'])
40
+ assert_nil(report.env["backtrace"])
42
41
  assert_nil(report.env[:backtrace])
43
42
 
44
43
  # The env is in the report
45
- assert_equal("Test", report.env['code'])
46
- assert_equal(20, report.env['params']['article_id'])
44
+ assert_equal("Test", report.env["code"])
45
+ assert_equal(20, report.env["params"]["article_id"])
47
46
  end
48
47
  end
@@ -1,12 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'redis'
4
- require 'logster'
3
+ require "redis"
4
+ require "logster"
5
5
 
6
6
  Logster.config.allow_grouping = true
7
7
  Logster.config.application_version = "ABC123"
8
8
  Logster.store = Logster::RedisStore.new
9
9
 
10
10
  10.times do
11
- Logster.store.report(Logger::WARN, "application", "test warning", backtrace: "method1\nmethod2", env: { something: ["hello world", "hello places"], another: { thing: "something else" } })
11
+ Logster.store.report(
12
+ Logger::WARN,
13
+ "application",
14
+ "test warning",
15
+ backtrace: "method1\nmethod2",
16
+ env: {
17
+ something: ["hello world", "hello places"],
18
+ another: {
19
+ thing: "something else",
20
+ },
21
+ },
22
+ )
12
23
  end
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../test_helper'
4
- require 'rack'
5
- require 'logster/redis_store'
6
- require 'logster/middleware/reporter'
3
+ require_relative "../../test_helper"
4
+ require "rack"
5
+ require "logster/redis_store"
6
+ require "logster/middleware/reporter"
7
7
 
8
8
  class TestReporter < Minitest::Test
9
-
10
9
  def setup
11
10
  Logster.store = Logster::RedisStore.new
12
11
  Logster.store.clear_all
@@ -72,11 +71,14 @@ class TestReporter < Minitest::Test
72
71
  assert_equal(1, Logster.store.count)
73
72
 
74
73
  reporter = Logster::Middleware::Reporter.new(nil)
75
- env = Rack::MockRequest.env_for("/logs/report_js_error?message=hello2", "REMOTE_ADDR" => "100.1.1.2")
74
+ env =
75
+ Rack::MockRequest.env_for(
76
+ "/logs/report_js_error?message=hello2",
77
+ "REMOTE_ADDR" => "100.1.1.2",
78
+ )
76
79
  status, = reporter.call(env)
77
80
 
78
81
  assert_equal(200, status)
79
82
  assert_equal(2, Logster.store.count)
80
83
  end
81
-
82
84
  end