Skip to content

Commit fcaeb43

Browse files
Bump rubocop version to 1.48.1. (#101)
Also bump gem version to 0.0.15.
1 parent 17c846b commit fcaeb43

File tree

10 files changed

+666
-646
lines changed

10 files changed

+666
-646
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ jobs:
66
fail-fast: false
77
matrix:
88
rvm:
9+
- 2.7
910
- 2.6
10-
- 2.5
11-
- 2.4
1211
runs-on: ubuntu-latest
1312
steps:
1413
- uses: actions/checkout@v2

.rubocop.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@
55
# Note that changes in the inspected code, or installation of new
66
# versions of RuboCop, may require this file to be generated again.
77

8+
AllCops:
9+
TargetRubyVersion: 2.6
10+
NewCops: disable
11+
12+
# Rakefile doesn't need to be executable.
13+
Lint/ScriptPermission:
14+
Enabled: false
15+
816
# Offense count: 2
917
Metrics/AbcSize:
1018
Max: 120
@@ -31,3 +39,12 @@ Metrics/MethodLength:
3139
# Offense count: 3
3240
Metrics/PerceivedComplexity:
3341
Max: 50
42+
43+
# Offense count: 1
44+
# Configuration parameters: CountComments.
45+
Metrics/BlockLength:
46+
Max: 50
47+
48+
# TODO: Re-enable this and fix frozen strings.
49+
Style/FrozenStringLiteralComment:
50+
Enabled: false

Rakefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ task :fix_perms do
3636
files.each do |file|
3737
mode = File.stat(file).mode & 0o777
3838
next unless mode & 0o444 != 0o444
39+
3940
puts "Changing mode of #{file} from #{mode.to_s(8)} to "\
4041
"#{(mode | 0o444).to_s(8)}"
4142
chmod mode | 0o444, file
4243
end
4344
end
4445

4546
desc 'Run unit tests and RuboCop to check for style violations'
46-
task all: [:test, :rubocop, :fix_perms]
47+
task all: %i[rubocop test fix_perms]
4748

4849
task default: :all
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
Gem::Specification.new do |gem|
22
gem.name = 'fluent-plugin-detect-exceptions'
3-
gem.description = <<-eos
3+
gem.description = <<-DESCRIPTION
44
Fluentd output plugin which detects exception stack traces in a stream of
55
JSON log messages and combines all single-line messages that belong to the
66
same stack trace into one multi-line message.
77
This is an official Google Ruby gem.
8-
eos
8+
DESCRIPTION
99
gem.summary = \
1010
'fluentd output plugin for combining stack traces as multi-line JSON logs'
1111
gem.homepage = \
1212
'https://github.com/GoogleCloudPlatform/fluent-plugin-detect-exceptions'
1313
gem.license = 'Apache-2.0'
14-
gem.version = '0.0.14'
14+
gem.version = '0.0.15'
1515
gem.authors = ['Stackdriver Agents']
1616
gem.email = ['[email protected]']
17-
gem.required_ruby_version = Gem::Requirement.new('>= 2.0')
17+
gem.required_ruby_version = Gem::Requirement.new('>= 2.6')
1818

1919
gem.files = Dir['**/*'].keep_if { |file| File.file?(file) }
2020
gem.test_files = gem.files.grep(/^(test)/)
2121
gem.require_paths = ['lib']
2222

2323
gem.add_runtime_dependency 'fluentd', '>= 0.10'
2424

25+
gem.add_development_dependency 'flexmock', '~> 2.0'
2526
gem.add_development_dependency 'rake', '~> 10.3'
26-
gem.add_development_dependency 'rubocop', '= 0.42.0'
27+
gem.add_development_dependency 'rubocop', '= 1.48.1'
2728
gem.add_development_dependency 'test-unit', '~> 3.0'
28-
gem.add_development_dependency 'flexmock', '~> 2.0'
2929
end

lib/fluent/plugin/exception_detector.rb

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ module ExceptionDetectorConfig
2121
class RuleTarget
2222
attr_accessor :pattern, :to_state
2323

24-
def initialize(p, s)
25-
@pattern = p
26-
@to_state = s
24+
def initialize(pattern, state)
25+
@pattern = pattern
26+
@to_state = state
2727
end
2828

2929
def ==(other)
@@ -52,28 +52,28 @@ def self.supported
5252
end
5353

5454
JAVA_RULES = [
55-
rule([:start_state, :java_start_exception],
55+
rule(%i[start_state java_start_exception],
5656
/(?:Exception|Error|Throwable|V8 errors stack trace)[:\r\n]/,
5757
:java_after_exception),
5858
rule(:java_after_exception, /^[\t ]*nested exception is:[\t ]*/,
5959
:java_start_exception),
6060
rule(:java_after_exception, /^[\r\n]*$/, :java_after_exception),
61-
rule([:java_after_exception, :java], /^[\t ]+(?:eval )?at /, :java),
61+
rule(%i[java_after_exception java], /^[\t ]+(?:eval )?at /, :java),
6262

63-
rule([:java_after_exception, :java],
63+
rule(%i[java_after_exception java],
6464
# C# nested exception.
6565
/^[\t ]+--- End of inner exception stack trace ---$/,
6666
:java),
6767

68-
rule([:java_after_exception, :java],
68+
rule(%i[java_after_exception java],
6969
# C# exception from async code.
7070
/^--- End of stack trace from previous (?x:
7171
)location where exception was thrown ---$/,
7272
:java),
7373

74-
rule([:java_after_exception, :java], /^[\t ]*(?:Caused by|Suppressed):/,
74+
rule(%i[java_after_exception java], /^[\t ]*(?:Caused by|Suppressed):/,
7575
:java_after_exception),
76-
rule([:java_after_exception, :java],
76+
rule(%i[java_after_exception java],
7777
/^[\t ]*... \d+ (?:more|common frames omitted)/, :java)
7878
].freeze
7979

@@ -97,13 +97,13 @@ def self.supported
9797
rule(:start_state, /\bpanic: /, :go_after_panic),
9898
rule(:start_state, /http: panic serving/, :go_goroutine),
9999
rule(:go_after_panic, /^$/, :go_goroutine),
100-
rule([:go_after_panic, :go_after_signal, :go_frame_1],
100+
rule(%i[go_after_panic go_after_signal go_frame_line1],
101101
/^$/, :go_goroutine),
102102
rule(:go_after_panic, /^\[signal /, :go_after_signal),
103-
rule(:go_goroutine, /^goroutine \d+ \[[^\]]+\]:$/, :go_frame_1),
104-
rule(:go_frame_1, /^(?:[^\s.:]+\.)*[^\s.():]+\(|^created by /,
105-
:go_frame_2),
106-
rule(:go_frame_2, /^\s/, :go_frame_1)
103+
rule(:go_goroutine, /^goroutine \d+ \[[^\]]+\]:$/, :go_frame_line1),
104+
rule(:go_frame_line1, /^(?:[^\s.:]+\.)*[^\s.():]+\(|^created by /,
105+
:go_frame_line2),
106+
rule(:go_frame_line2, /^\s/, :go_frame_line1)
107107
].freeze
108108

109109
RUBY_RULES = [
@@ -129,22 +129,22 @@ def self.supported
129129
rule(:dart_exc, /^Concurrent modification/, :dart_stack),
130130
rule(:dart_exc, /^Out of Memory/, :dart_stack),
131131
rule(:dart_exc, /^Stack Overflow/, :dart_stack),
132-
rule(:dart_exc, /^'.+?':.+?$/, :dart_type_err_1),
133-
rule(:dart_type_err_1, /^#\d+\s+.+?\(.+?\)$/, :dart_stack),
134-
rule(:dart_type_err_1, /^.+?$/, :dart_type_err_2),
135-
rule(:dart_type_err_2, /^.*?\^.*?$/, :dart_type_err_3),
136-
rule(:dart_type_err_3, /^$/, :dart_type_err_4),
137-
rule(:dart_type_err_4, /^$/, :dart_stack),
138-
rule(:dart_exc, /^FormatException/, :dart_format_err_1),
139-
rule(:dart_format_err_1, /^#\d+\s+.+?\(.+?\)$/, :dart_stack),
140-
rule(:dart_format_err_1, /^./, :dart_format_err_2),
141-
rule(:dart_format_err_2, /^.*?\^/, :dart_format_err_3),
142-
rule(:dart_format_err_3, /^$/, :dart_stack),
143-
rule(:dart_exc, /^NoSuchMethodError:/, :dart_method_err_1),
144-
rule(:dart_method_err_1, /^Receiver:/, :dart_method_err_2),
145-
rule(:dart_method_err_2, /^Tried calling:/, :dart_method_err_3),
146-
rule(:dart_method_err_3, /^Found:/, :dart_stack),
147-
rule(:dart_method_err_3, /^#\d+\s+.+?\(.+?\)$/, :dart_stack),
132+
rule(:dart_exc, /^'.+?':.+?$/, :dart_type_err_line1),
133+
rule(:dart_type_err_line1, /^#\d+\s+.+?\(.+?\)$/, :dart_stack),
134+
rule(:dart_type_err_line1, /^.+?$/, :dart_type_err_line2),
135+
rule(:dart_type_err_line2, /^.*?\^.*?$/, :dart_type_err_line3),
136+
rule(:dart_type_err_line3, /^$/, :dart_type_err_line4),
137+
rule(:dart_type_err_line4, /^$/, :dart_stack),
138+
rule(:dart_exc, /^FormatException/, :dart_format_err_line1),
139+
rule(:dart_format_err_line1, /^#\d+\s+.+?\(.+?\)$/, :dart_stack),
140+
rule(:dart_format_err_line1, /^./, :dart_format_err_line2),
141+
rule(:dart_format_err_line2, /^.*?\^/, :dart_format_err_line3),
142+
rule(:dart_format_err_line3, /^$/, :dart_stack),
143+
rule(:dart_exc, /^NoSuchMethodError:/, :dart_method_err_line1),
144+
rule(:dart_method_err_line1, /^Receiver:/, :dart_method_err_line2),
145+
rule(:dart_method_err_line2, /^Tried calling:/, :dart_method_err_line3),
146+
rule(:dart_method_err_line3, /^Found:/, :dart_stack),
147+
rule(:dart_method_err_line3, /^#\d+\s+.+?\(.+?\)$/, :dart_stack),
148148
rule(:dart_stack, /^#\d+\s+.+?\(.+?\)$/, :dart_stack),
149149
rule(:dart_stack, /^<asynchronous suspension>$/, :dart_stack)
150150
].freeze
@@ -168,7 +168,7 @@ def self.supported
168168
all: ALL_RULES
169169
}.freeze
170170

171-
DEFAULT_FIELDS = %w(message log).freeze
171+
DEFAULT_FIELDS = %w[message log].freeze
172172
end
173173

174174
# State machine that consumes individual log lines and detects
@@ -236,6 +236,7 @@ def reset
236236
def transition(line)
237237
@rules[@state].each do |r|
238238
next unless line =~ r.pattern
239+
239240
@state = r.to_state
240241
return true
241242
end
@@ -280,14 +281,14 @@ def push(time_sec, record)
280281
@exception_detector.reset
281282
detection_status = :no_trace
282283
else
283-
force_flush if @max_bytes > 0 &&
284+
force_flush if @max_bytes.positive? &&
284285
@buffer_size + message.length > @max_bytes
285286
detection_status = @exception_detector.update(message)
286287
end
287288

288289
update_buffer(detection_status, time_sec, record, message)
289290

290-
force_flush if @max_lines > 0 && @messages.length == @max_lines
291+
force_flush if @max_lines.positive? && @messages.length == @max_lines
291292
end
292293

293294
def flush
@@ -332,8 +333,7 @@ def extract_message(record)
332333
end
333334

334335
def update_buffer(detection_status, time_sec, record, message)
335-
trigger_emit = detection_status == :no_trace ||
336-
detection_status == :end_trace
336+
trigger_emit = %i[no_trace end_trace].include?(detection_status)
337337
if @messages.empty? && trigger_emit
338338
@emit.call(time_sec, record)
339339
return
@@ -361,16 +361,16 @@ def add(time_sec, record, message)
361361
@first_timestamp = time_sec
362362
@buffer_start_time = Time.now
363363
end
364-
unless message.nil?
365-
message_with_line_break =
366-
if @force_line_breaks && !@messages.empty? && !message.include?("\n")
367-
"\n" + message
368-
else
369-
message
370-
end
371-
@messages << message_with_line_break
372-
@buffer_size += message_with_line_break.length
373-
end
364+
return if message.nil?
365+
366+
message_with_line_break =
367+
if @force_line_breaks && !@messages.empty? && !message.include?("\n")
368+
"\n#{message}"
369+
else
370+
message
371+
end
372+
@messages << message_with_line_break
373+
@buffer_size += message_with_line_break.length
374374
end
375375
end
376376
end

lib/fluent/plugin/out_detect_exceptions.rb

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ class DetectExceptionsOutput < Output
4444
def configure(conf)
4545
super
4646

47-
if multiline_flush_interval
48-
@check_flush_interval = [multiline_flush_interval * 0.1, 1].max
49-
end
47+
@check_flush_interval = [multiline_flush_interval * 0.1, 1].max if multiline_flush_interval
5048

5149
@languages = languages.map(&:to_sym)
5250

@@ -57,11 +55,11 @@ def configure(conf)
5755
def start
5856
super
5957

60-
if multiline_flush_interval
61-
@flush_buffer_mutex = Mutex.new
62-
@stop_check = false
63-
@thread = Thread.new(&method(:check_flush_loop))
64-
end
58+
return unless multiline_flush_interval
59+
60+
@flush_buffer_mutex = Mutex.new
61+
@stop_check = false
62+
@thread = Thread.new(&method(:check_flush_loop))
6563
end
6664

6765
def before_shutdown
@@ -77,8 +75,8 @@ def shutdown
7775
super
7876
end
7977

80-
def emit(tag, es, chain)
81-
es.each do |time_sec, record|
78+
def emit(tag, entries, chain)
79+
entries.each do |time_sec, record|
8280
process_record(tag, time_sec, record)
8381
end
8482
chain.next
@@ -121,13 +119,14 @@ def check_flush_loop
121119
@flush_buffer_mutex.sleep(@check_flush_interval)
122120
now = Time.now
123121
break if @stop_check
122+
124123
@accumulators.each_value do |acc|
125124
acc.force_flush if now - acc.buffer_start_time >
126125
@multiline_flush_interval
127126
end
128127
end
129128
end
130-
rescue
129+
rescue StandardError
131130
log.error 'error in check_flush_loop', error: $ERROR_INFO.to_s
132131
log.error_backtrace
133132
end

test/helper.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,29 @@
1414

1515
require 'rubygems'
1616
require 'bundler'
17-
1817
begin
1918
Bundler.setup(:default, :development)
2019
rescue Bundler::BundlerError => e
20+
# rubocop:disable Style/StderrPuts
2121
$stderr.puts e.message
2222
$stderr.puts 'Run `bundle install` to install missing gems'
23+
# rubocop:enable Style/StderrPuts
2324
exit e.status_code
2425
end
25-
2626
require 'test/unit'
2727

2828
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2929
$LOAD_PATH.unshift(File.dirname(__FILE__))
3030
require 'fluent/test'
31-
3231
unless ENV.key?('VERBOSE')
3332
nulllogger = Object.new
3433
nulllogger.instance_eval do |_|
35-
def respond_to_missing?
34+
def respond_to_missing?(_method, _include_private = false)
3635
true
3736
end
3837

39-
def method_missing(_method, *_args) # rubocop:disable Style/MethodMissing
38+
def method_missing(_method, *_args)
39+
# pass
4040
end
4141
end
4242
# global $log variable is used by fluentd

0 commit comments

Comments
 (0)