logstash-filter-grok 4.0.4 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ require "logstash/devutils/rspec/spec_helper"
3
+ require "stud/temporary"
4
+
5
+ module LogStash::Environment
6
+ # running the grok code outside a logstash package means
7
+ # LOGSTASH_HOME will not be defined, so let's set it here
8
+ # before requiring the grok filter
9
+ unless self.const_defined?(:LOGSTASH_HOME)
10
+ LOGSTASH_HOME = File.expand_path("../../../", __FILE__)
11
+ end
12
+
13
+ # also :pattern_path method must exist so we define it too
14
+ unless self.method_defined?(:pattern_path)
15
+ def pattern_path(path)
16
+ ::File.join(LOGSTASH_HOME, "patterns", path)
17
+ end
18
+ end
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-grok
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.4
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-19 00:00:00.000000000 Z
11
+ date: 2021-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -44,6 +44,20 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 5.6.0
47
+ - !ruby/object:Gem::Dependency
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '1.0'
53
+ name: logstash-mixin-ecs_compatibility_support
54
+ prerelease: false
55
+ type: :runtime
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.0'
47
61
  - !ruby/object:Gem::Dependency
48
62
  requirement: !ruby/object:Gem::Requirement
49
63
  requirements:
@@ -77,7 +91,10 @@ dependencies:
77
91
  requirements:
78
92
  - - ">="
79
93
  - !ruby/object:Gem::Version
80
- version: '0'
94
+ version: 4.3.0
95
+ - - "<"
96
+ - !ruby/object:Gem::Version
97
+ version: '5'
81
98
  name: logstash-patterns-core
82
99
  prerelease: false
83
100
  type: :runtime
@@ -85,21 +102,24 @@ dependencies:
85
102
  requirements:
86
103
  - - ">="
87
104
  - !ruby/object:Gem::Version
88
- version: '0'
105
+ version: 4.3.0
106
+ - - "<"
107
+ - !ruby/object:Gem::Version
108
+ version: '5'
89
109
  - !ruby/object:Gem::Dependency
90
110
  requirement: !ruby/object:Gem::Requirement
91
111
  requirements:
92
- - - '='
112
+ - - ">="
93
113
  - !ruby/object:Gem::Version
94
- version: 1.3.6
114
+ version: '0'
95
115
  name: logstash-devutils
96
116
  prerelease: false
97
117
  type: :development
98
118
  version_requirements: !ruby/object:Gem::Requirement
99
119
  requirements:
100
- - - '='
120
+ - - ">="
101
121
  - !ruby/object:Gem::Version
102
- version: 1.3.6
122
+ version: '0'
103
123
  description: This gem is a Logstash plugin required to be installed on top of the
104
124
  Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
105
125
  gem is not a stand-alone program
@@ -116,10 +136,10 @@ files:
116
136
  - README.md
117
137
  - docs/index.asciidoc
118
138
  - lib/logstash/filters/grok.rb
119
- - lib/logstash/filters/grok/timeout_enforcer.rb
120
- - lib/logstash/filters/grok/timeout_exception.rb
121
139
  - logstash-filter-grok.gemspec
140
+ - spec/filters/grok_performance_spec.rb
122
141
  - spec/filters/grok_spec.rb
142
+ - spec/spec_helper.rb
123
143
  homepage: http://www.elastic.co/guide/en/logstash/current/index.html
124
144
  licenses:
125
145
  - Apache License (2.0)
@@ -147,4 +167,6 @@ signing_key:
147
167
  specification_version: 4
148
168
  summary: Parses unstructured event data into fields
149
169
  test_files:
170
+ - spec/filters/grok_performance_spec.rb
150
171
  - spec/filters/grok_spec.rb
172
+ - spec/spec_helper.rb
@@ -1,72 +0,0 @@
1
- class LogStash::Filters::Grok::TimeoutEnforcer
2
- def initialize(logger, timeout_nanos)
3
- @logger = logger
4
- @running = java.util.concurrent.atomic.AtomicBoolean.new(false)
5
- @timeout_nanos = timeout_nanos
6
-
7
- # Stores running matches with their start time, this is used to cancel long running matches
8
- # Is a map of Thread => start_time
9
- @threads_to_start_time = java.util.concurrent.ConcurrentHashMap.new
10
- end
11
-
12
- def running
13
- @running.get()
14
- end
15
-
16
- def grok_till_timeout(grok, field, value)
17
- begin
18
- thread = java.lang.Thread.currentThread()
19
- @threads_to_start_time.put(thread, java.lang.System.nanoTime)
20
- grok.execute(value)
21
- rescue InterruptedRegexpError, java.lang.InterruptedException => e
22
- raise ::LogStash::Filters::Grok::TimeoutException.new(grok, field, value)
23
- ensure
24
- # If the regexp finished, but interrupt was called after, we'll want to
25
- # clear the interrupted status anyway
26
- @threads_to_start_time.remove(thread)
27
- thread.interrupted
28
- end
29
- end
30
-
31
- def start!
32
- @running.set(true)
33
- @timer_thread = Thread.new do
34
- while @running.get()
35
- begin
36
- cancel_timed_out!
37
- rescue Exception => e
38
- @logger.error("Error while attempting to check/cancel excessively long grok patterns",
39
- :message => e.message,
40
- :class => e.class.name,
41
- :backtrace => e.backtrace
42
- )
43
- end
44
- sleep 0.25
45
- end
46
- end
47
- end
48
-
49
- def stop!
50
- @running.set(false)
51
- # Check for the thread mostly for a fast start/shutdown scenario
52
- @timer_thread.join if @timer_thread
53
- end
54
-
55
- private
56
-
57
- def cancel_timed_out!
58
- now = java.lang.System.nanoTime # save ourselves some nanotime calls
59
- @threads_to_start_time.keySet.each do |thread|
60
- # Use compute to lock this value
61
- @threads_to_start_time.computeIfPresent(thread) do |thread, start_time|
62
- if start_time < now && now - start_time > @timeout_nanos
63
- thread.interrupt
64
- nil # Delete the key
65
- else
66
- start_time # preserve the key
67
- end
68
- end
69
- end
70
- end
71
-
72
- end
@@ -1,21 +0,0 @@
1
- class LogStash::Filters::Grok::TimeoutException < Exception
2
- attr_reader :grok, :field, :value
3
-
4
- def initialize(grok=nil, field=nil, value=nil)
5
- @field = field
6
- @value = value
7
- @grok = grok
8
- end
9
-
10
- def message
11
- "Timeout executing grok '#{@grok.pattern}' against field '#{field}' with value '#{trunc_value}'!"
12
- end
13
-
14
- def trunc_value
15
- if value.size <= 255 # If no more than 255 chars
16
- value
17
- else
18
- "Value too large to output (#{value.bytesize} bytes)! First 255 chars are: #{value[0..255]}"
19
- end
20
- end
21
- end