logstash-core 6.0.0.rc2-java → 6.0.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/logstash-core/logstash-core.jar +0 -0
- data/lib/logstash/compiler/lscl.rb +16 -4
- data/lib/logstash/filter_delegator.rb +2 -2
- data/lib/logstash/instrument/wrapped_write_client.rb +3 -3
- data/lib/logstash/output_delegator.rb +2 -2
- data/lib/logstash/runner.rb +4 -1
- data/lib/logstash/timestamp.rb +0 -5
- data/lib/logstash/util/wrapped_acked_queue.rb +2 -2
- data/lib/logstash/util/wrapped_synchronous_queue.rb +2 -2
- data/logstash-core.gemspec +1 -1
- data/spec/logstash/compiler/compiler_spec.rb +85 -0
- data/spec/logstash/timestamp_spec.rb +5 -0
- data/versions-gem-copy.yml +2 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9948f10f7f434f0e67b751dca73b6bc83f577f1b933985b1251dbc6bca7a59dc
|
4
|
+
data.tar.gz: 405b2588cab170eaea4e861e2f559c8698ad40ea3bcc4468e4fcd0e84e869269
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61314838211ae44135b607178f642b449b86ca2dd83f38c5a5d9979438f5ae77b1c1f692dd5384fdf4f9069a8caf521f111b8e22ea17778166b23a33e3389502
|
7
|
+
data.tar.gz: e8660a1b7f2781cc4fa2df9299c50f3c4f31ecec1921a884867c7004264d12bffa1f18959675a81f98802897c63e46e10b44c6b4b7f83763eec62a3e91786734
|
Binary file
|
@@ -101,9 +101,21 @@ module LogStashCompilerLSCLGrammar; module LogStash; module Compiler; module LSC
|
|
101
101
|
else
|
102
102
|
[k,v]
|
103
103
|
end
|
104
|
-
}.reduce({}) do |hash,kv|
|
105
|
-
k,v = kv
|
106
|
-
hash[k]
|
104
|
+
}.reduce({}) do |hash, kv|
|
105
|
+
k, v = kv
|
106
|
+
existing = hash[k]
|
107
|
+
if existing.nil?
|
108
|
+
hash[k] = v
|
109
|
+
elsif existing.kind_of?(::Hash)
|
110
|
+
# For legacy reasons, a config can contain multiple `AST::Attribute`s with the same name
|
111
|
+
# and a hash-type value (e.g., "match" in the grok filter), which are merged into a single
|
112
|
+
# hash value; e.g., `{"match" => {"baz" => "bar"}, "match" => {"foo" => "bulb"}}` is
|
113
|
+
# interpreted as `{"match" => {"baz" => "bar", "foo" => "blub"}}`.
|
114
|
+
# (NOTE: this bypasses `AST::Hash`'s ability to detect duplicate keys)
|
115
|
+
hash[k] = existing.merge(v)
|
116
|
+
else
|
117
|
+
hash[k] = existing + v
|
118
|
+
end
|
107
119
|
hash
|
108
120
|
end
|
109
121
|
|
@@ -187,7 +199,7 @@ module LogStashCompilerLSCLGrammar; module LogStash; module Compiler; module LSC
|
|
187
199
|
|
188
200
|
def expr
|
189
201
|
validate!
|
190
|
-
::Hash[recursive_select(HashEntry).map(&:expr)]
|
202
|
+
jdsl.eValue(source_meta, ::Hash[recursive_select(HashEntry).map(&:expr)])
|
191
203
|
end
|
192
204
|
end
|
193
205
|
|
@@ -44,9 +44,9 @@ module LogStash
|
|
44
44
|
def multi_filter(events)
|
45
45
|
@metric_events_in.increment(events.size)
|
46
46
|
|
47
|
-
start_time = java.lang.System.
|
47
|
+
start_time = java.lang.System.nano_time
|
48
48
|
new_events = @filter.multi_filter(events)
|
49
|
-
@metric_events_time.increment(java.lang.System.
|
49
|
+
@metric_events_time.increment((java.lang.System.nano_time - start_time) / 1_000_000)
|
50
50
|
|
51
51
|
# There is no guarantee in the context of filter
|
52
52
|
# that EVENTS_INT == EVENTS_OUT, see the aggregates and
|
@@ -25,7 +25,7 @@ module LogStash module Instrument
|
|
25
25
|
|
26
26
|
def push(event)
|
27
27
|
increment_counters(1)
|
28
|
-
start_time = java.lang.System.
|
28
|
+
start_time = java.lang.System.nano_time
|
29
29
|
result = @write_client.push(event)
|
30
30
|
report_execution_time(start_time)
|
31
31
|
result
|
@@ -35,7 +35,7 @@ module LogStash module Instrument
|
|
35
35
|
|
36
36
|
def push_batch(batch)
|
37
37
|
increment_counters(batch.size)
|
38
|
-
start_time = java.lang.System.
|
38
|
+
start_time = java.lang.System.nano_time
|
39
39
|
result = @write_client.push_batch(batch)
|
40
40
|
report_execution_time(start_time)
|
41
41
|
result
|
@@ -50,7 +50,7 @@ module LogStash module Instrument
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def report_execution_time(start_time)
|
53
|
-
execution_time = java.lang.System.
|
53
|
+
execution_time = (java.lang.System.nano_time - start_time) / 1_000_000
|
54
54
|
@events_metrics_time.increment(execution_time)
|
55
55
|
@pipeline_metrics_time.increment(execution_time)
|
56
56
|
@plugin_events_metrics_time.increment(execution_time)
|
@@ -45,9 +45,9 @@ module LogStash class OutputDelegator
|
|
45
45
|
|
46
46
|
def multi_receive(events)
|
47
47
|
@in_counter.increment(events.length)
|
48
|
-
start_time = java.lang.System.
|
48
|
+
start_time = java.lang.System.nano_time
|
49
49
|
@strategy.multi_receive(events)
|
50
|
-
@time_metric.increment(java.lang.System.
|
50
|
+
@time_metric.increment((java.lang.System.nano_time - start_time) / 1_000_000)
|
51
51
|
@out_counter.increment(events.length)
|
52
52
|
end
|
53
53
|
|
data/lib/logstash/runner.rb
CHANGED
@@ -484,7 +484,10 @@ class LogStash::Runner < Clamp::StrictCommand
|
|
484
484
|
Stud::trap("INT") do
|
485
485
|
if @interrupted_once
|
486
486
|
logger.fatal(I18n.t("logstash.agent.forced_sigint"))
|
487
|
-
exit
|
487
|
+
# calling just Kernel.exit only raises SystemExit exception
|
488
|
+
# and doesn't guarantee the process will terminate
|
489
|
+
# We must call Kernel.exit! so java.lang.System.exit is called
|
490
|
+
exit!(1)
|
488
491
|
else
|
489
492
|
logger.warn(I18n.t("logstash.agent.sigint"))
|
490
493
|
Thread.new(logger) {|lg| sleep 5; lg.warn(I18n.t("logstash.agent.slow_shutdown")) }
|
data/lib/logstash/timestamp.rb
CHANGED
@@ -205,7 +205,7 @@ module LogStash; module Util
|
|
205
205
|
end
|
206
206
|
|
207
207
|
def start_clock
|
208
|
-
@inflight_clocks[Thread.current] = java.lang.System.
|
208
|
+
@inflight_clocks[Thread.current] = java.lang.System.nano_time
|
209
209
|
end
|
210
210
|
|
211
211
|
def stop_clock(batch)
|
@@ -214,7 +214,7 @@ module LogStash; module Util
|
|
214
214
|
# only stop (which also records) the metrics if the batch is non-empty.
|
215
215
|
# start_clock is now called at empty batch creation and an empty batch could
|
216
216
|
# stay empty all the way down to the close_batch call.
|
217
|
-
time_taken = java.lang.System.
|
217
|
+
time_taken = (java.lang.System.nano_time - @inflight_clocks[Thread.current]) / 1_000_000
|
218
218
|
@event_metric.report_time(:duration_in_millis, time_taken)
|
219
219
|
@pipeline_metric.report_time(:duration_in_millis, time_taken)
|
220
220
|
end
|
@@ -146,7 +146,7 @@ module LogStash; module Util
|
|
146
146
|
end
|
147
147
|
|
148
148
|
def start_clock
|
149
|
-
@inflight_clocks[Thread.current] = java.lang.System.
|
149
|
+
@inflight_clocks[Thread.current] = java.lang.System.nano_time
|
150
150
|
end
|
151
151
|
|
152
152
|
def stop_clock(batch)
|
@@ -155,7 +155,7 @@ module LogStash; module Util
|
|
155
155
|
# only stop (which also records) the metrics if the batch is non-empty.
|
156
156
|
# start_clock is now called at empty batch creation and an empty batch could
|
157
157
|
# stay empty all the way down to the close_batch call.
|
158
|
-
time_taken = java.lang.System.
|
158
|
+
time_taken = (java.lang.System.nano_time - @inflight_clocks[Thread.current]) / 1_000_000
|
159
159
|
@event_metric_time.increment(time_taken)
|
160
160
|
@pipeline_metric_time.increment(time_taken)
|
161
161
|
end
|
data/logstash-core.gemspec
CHANGED
@@ -64,7 +64,7 @@ Gem::Specification.new do |gem|
|
|
64
64
|
gem.add_runtime_dependency "i18n", "= 0.6.9" #(MIT license)
|
65
65
|
|
66
66
|
# filetools and rakelib
|
67
|
-
gem.add_runtime_dependency "minitar", "~> 0.
|
67
|
+
gem.add_runtime_dependency "minitar", "~> 0.6.1"
|
68
68
|
gem.add_runtime_dependency "rubyzip", "~> 1.2.1"
|
69
69
|
gem.add_runtime_dependency "thread_safe", "~> 0.3.5" #(Apache 2.0 license)
|
70
70
|
|
@@ -193,6 +193,91 @@ describe LogStash::Compiler do
|
|
193
193
|
expect(c_plugin).to ir_eql(j.iPlugin(INPUT, "generator", expected_plugin_args))
|
194
194
|
end
|
195
195
|
end
|
196
|
+
|
197
|
+
describe "a filter plugin that repeats a Hash directive" do
|
198
|
+
let(:source) { "input { } filter { #{plugin_source} } output { } " }
|
199
|
+
subject(:c_plugin) { compiled[:filter] }
|
200
|
+
|
201
|
+
let(:plugin_source) do
|
202
|
+
%q[
|
203
|
+
grok {
|
204
|
+
match => { "message" => "%{WORD:word}" }
|
205
|
+
match => { "examplefield" => "%{NUMBER:num}" }
|
206
|
+
break_on_match => false
|
207
|
+
}
|
208
|
+
]
|
209
|
+
end
|
210
|
+
|
211
|
+
let(:expected_plugin_args) do
|
212
|
+
{
|
213
|
+
"match" => {
|
214
|
+
"message" => "%{WORD:word}",
|
215
|
+
"examplefield" => "%{NUMBER:num}"
|
216
|
+
},
|
217
|
+
"break_on_match" => "false"
|
218
|
+
}
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should merge the contents of the individual directives" do
|
222
|
+
expect(c_plugin).to ir_eql(j.iPlugin(FILTER, "grok", expected_plugin_args))
|
223
|
+
end
|
224
|
+
|
225
|
+
describe "a filter plugin that has nested Hash directives" do
|
226
|
+
let(:source) { "input { } filter { #{plugin_source} } output { } " }
|
227
|
+
let(:plugin_source) do
|
228
|
+
<<-FILTER
|
229
|
+
matryoshka {
|
230
|
+
key => "%{host}"
|
231
|
+
filter_options => {
|
232
|
+
string => "string"
|
233
|
+
integer => 3
|
234
|
+
nested => { # <-- This is nested hash!
|
235
|
+
string => "nested-string"
|
236
|
+
integer => 7
|
237
|
+
"quoted-key-string" => "nested-quoted-key-string"
|
238
|
+
"quoted-key-integer" => 31
|
239
|
+
deep => { # <-- This is deeper nested hash!
|
240
|
+
string => "deeply-nested-string"
|
241
|
+
integer => 127
|
242
|
+
"quoted-key-string" => "deeply-nested-quoted-key-string"
|
243
|
+
"quoted-key-integer" => 8191
|
244
|
+
}
|
245
|
+
}
|
246
|
+
}
|
247
|
+
ttl => 5
|
248
|
+
}
|
249
|
+
FILTER
|
250
|
+
end
|
251
|
+
subject(:c_plugin) { compiled[:filter] }
|
252
|
+
|
253
|
+
let(:expected_plugin_args) do
|
254
|
+
{
|
255
|
+
"key" => "%{host}",
|
256
|
+
"filter_options" => {
|
257
|
+
"string" => "string",
|
258
|
+
"integer" => 3,
|
259
|
+
"nested" => { # <-- This is nested hash!
|
260
|
+
"string" => "nested-string",
|
261
|
+
"integer" => 7,
|
262
|
+
"quoted-key-string" => "nested-quoted-key-string",
|
263
|
+
"quoted-key-integer" => 31,
|
264
|
+
"deep" => { # <-- This is deeper nested hash!
|
265
|
+
"string" => "deeply-nested-string",
|
266
|
+
"integer" => 127,
|
267
|
+
"quoted-key-string" => "deeply-nested-quoted-key-string",
|
268
|
+
"quoted-key-integer" => 8191
|
269
|
+
}
|
270
|
+
}
|
271
|
+
},
|
272
|
+
"ttl" => 5
|
273
|
+
}
|
274
|
+
end
|
275
|
+
|
276
|
+
it "should produce a nested ::Hash object" do
|
277
|
+
expect(c_plugin).to ir_eql(j.iPlugin(FILTER, "matryoshka", expected_plugin_args))
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
196
281
|
end
|
197
282
|
|
198
283
|
context "inputs" do
|
data/versions-gem-copy.yml
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
4
|
+
version: 6.0.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -209,7 +209,7 @@ dependencies:
|
|
209
209
|
requirements:
|
210
210
|
- - "~>"
|
211
211
|
- !ruby/object:Gem::Version
|
212
|
-
version: 0.
|
212
|
+
version: 0.6.1
|
213
213
|
name: minitar
|
214
214
|
prerelease: false
|
215
215
|
type: :runtime
|
@@ -217,7 +217,7 @@ dependencies:
|
|
217
217
|
requirements:
|
218
218
|
- - "~>"
|
219
219
|
- !ruby/object:Gem::Version
|
220
|
-
version: 0.
|
220
|
+
version: 0.6.1
|
221
221
|
- !ruby/object:Gem::Dependency
|
222
222
|
requirement: !ruby/object:Gem::Requirement
|
223
223
|
requirements:
|
@@ -627,9 +627,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
627
627
|
version: '0'
|
628
628
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
629
629
|
requirements:
|
630
|
-
- - "
|
630
|
+
- - ">="
|
631
631
|
- !ruby/object:Gem::Version
|
632
|
-
version:
|
632
|
+
version: '0'
|
633
633
|
requirements:
|
634
634
|
- jar org.apache.logging.log4j:log4j-slf4j-impl, 2.6.2
|
635
635
|
- jar org.apache.logging.log4j:log4j-api, 2.6.2
|