logster 2.12.1 → 2.13.0

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +5 -0
  3. data/.streerc +2 -0
  4. data/CHANGELOG.md +10 -1
  5. data/Gemfile +1 -1
  6. data/assets/javascript/{chunk.143.2faa04830259ce9aa59a.js → chunk.143.91d07e8cdd5c4b9e4731.js} +4 -4
  7. data/assets/javascript/{chunk.178.ca5ade1d8cbdbfbe6d72.js → chunk.178.16d0c9057345120bdba1.js} +3 -3
  8. data/assets/javascript/client-app.js +4 -2
  9. data/client-app/app/components/back-trace.js +4 -0
  10. data/client-app/package.json +1 -1
  11. data/client-app/preload-json-manager.rb +10 -17
  12. data/client-app/tests/integration/components/back-trace-test.js +17 -0
  13. data/client-app/yarn.lock +22 -22
  14. data/lib/examples/sidekiq_logster_reporter.rb +5 -7
  15. data/lib/logster/base_store.rb +26 -22
  16. data/lib/logster/cache.rb +2 -1
  17. data/lib/logster/configuration.rb +3 -3
  18. data/lib/logster/defer_logger.rb +2 -4
  19. data/lib/logster/group.rb +17 -20
  20. data/lib/logster/ignore_pattern.rb +1 -2
  21. data/lib/logster/logger.rb +18 -16
  22. data/lib/logster/message.rb +53 -57
  23. data/lib/logster/middleware/debug_exceptions.rb +12 -10
  24. data/lib/logster/middleware/reporter.rb +17 -26
  25. data/lib/logster/middleware/viewer.rb +77 -97
  26. data/lib/logster/pattern.rb +4 -7
  27. data/lib/logster/rails/railtie.rb +10 -13
  28. data/lib/logster/redis_rate_limiter.rb +2 -7
  29. data/lib/logster/redis_store.rb +79 -99
  30. data/lib/logster/scheduler.rb +1 -5
  31. data/lib/logster/suppression_pattern.rb +7 -5
  32. data/lib/logster/version.rb +1 -1
  33. data/lib/logster/web.rb +1 -1
  34. data/lib/logster.rb +15 -17
  35. data/logster.gemspec +14 -14
  36. data/test/examples/test_sidekiq_reporter_example.rb +8 -9
  37. data/test/fake_data/generate.rb +14 -3
  38. data/test/logster/middleware/test_reporter.rb +9 -7
  39. data/test/logster/middleware/test_viewer.rb +117 -101
  40. data/test/logster/test_base_store.rb +79 -58
  41. data/test/logster/test_cache.rb +5 -11
  42. data/test/logster/test_defer_logger.rb +3 -3
  43. data/test/logster/test_group.rb +14 -18
  44. data/test/logster/test_ignore_pattern.rb +2 -3
  45. data/test/logster/test_logger.rb +14 -14
  46. data/test/logster/test_message.rb +29 -31
  47. data/test/logster/test_pattern.rb +7 -15
  48. data/test/logster/test_redis_rate_limiter.rb +35 -21
  49. data/test/logster/test_redis_store.rb +239 -151
  50. data/test/test_helper.rb +9 -9
  51. 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.1"
4
+ VERSION = "2.13.0"
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