logstash-filter-date 2.1.5 → 2.1.6
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -0
- data/lib/logstash/filters/date.rb +28 -10
- data/logstash-filter-date.gemspec +1 -1
- data/spec/filters/date_spec.rb +44 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b55acd38d75625d5aad84145a3ba0543b967e7c2
|
4
|
+
data.tar.gz: 468b66d39fe5bb0e766787f222618b76191d2a07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 086fc7bf00a6c5e7346ee65b20ba5d998f9aaba9a9995ed30af065c8e7957c51a34bae96af80d127c7d2c95122c63d52f8bdb51b74649e47b6fee48f32f36dcf
|
7
|
+
data.tar.gz: 5e3521439c348673c5ad1d23dacbe770690db36a84cbd739ae2f37f0cd1c34a4d7041101ae3436319f80cde3916b3e71ad37560ddd16f394260f057e3a925fe0
|
data/CHANGELOG.md
CHANGED
@@ -24,6 +24,10 @@ class LogStash::Filters::Date < LogStash::Filters::Base
|
|
24
24
|
if RUBY_ENGINE == "jruby"
|
25
25
|
JavaException = java.lang.Exception
|
26
26
|
UTC = org.joda.time.DateTimeZone.forID("UTC")
|
27
|
+
java_import org.joda.time.LocalDateTime
|
28
|
+
class LocalDateTime
|
29
|
+
java_alias :to_datetime_with_tz, :toDateTime, [Java::org.joda.time.DateTimeZone]
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
config_name "date"
|
@@ -185,22 +189,35 @@ class LogStash::Filters::Date < LogStash::Filters::Base
|
|
185
189
|
setupMatcher(@config["match"].shift, locale, @config["match"] )
|
186
190
|
end
|
187
191
|
|
188
|
-
def parseWithJodaParser(joda_parser, date, format_has_year)
|
192
|
+
def parseWithJodaParser(joda_parser, date, format_has_year, format_has_timezone)
|
189
193
|
return joda_parser.parseMillis(date) if format_has_year
|
190
194
|
now = Time.now
|
191
195
|
now_month = now.month
|
192
|
-
|
196
|
+
if (format_has_timezone)
|
197
|
+
result = joda_parser.parseDateTime(date)
|
198
|
+
else
|
199
|
+
# Parse date in UTC, Timezone correction later
|
200
|
+
result = joda_parser.withZone(UTC).parseLocalDateTime(date)
|
201
|
+
end
|
202
|
+
|
193
203
|
event_month = result.getMonthOfYear
|
194
204
|
|
195
205
|
if (event_month == now_month)
|
196
|
-
result.with_year(now.year)
|
206
|
+
result = result.with_year(now.year)
|
197
207
|
elsif (event_month == 12 && now_month == 1)
|
198
|
-
result.with_year(now.year-1)
|
208
|
+
result = result.with_year(now.year-1)
|
199
209
|
elsif (event_month == 1 && now_month == 12)
|
200
|
-
result.with_year(now.year+1)
|
210
|
+
result = result.with_year(now.year+1)
|
201
211
|
else
|
202
|
-
result.with_year(now.year)
|
203
|
-
end
|
212
|
+
result = result.with_year(now.year)
|
213
|
+
end
|
214
|
+
|
215
|
+
if (format_has_timezone)
|
216
|
+
return result.get_millis
|
217
|
+
else
|
218
|
+
#Timezone correction
|
219
|
+
return result.to_datetime_with_tz(joda_parser.getZone()).get_millis
|
220
|
+
end
|
204
221
|
end
|
205
222
|
|
206
223
|
def setupMatcher(field, locale, value)
|
@@ -248,6 +265,7 @@ class LogStash::Filters::Date < LogStash::Filters::Base
|
|
248
265
|
else
|
249
266
|
begin
|
250
267
|
format_has_year = format.match(/y|Y/)
|
268
|
+
format_has_timezone = format.match(/Z/)
|
251
269
|
joda_parser = org.joda.time.format.DateTimeFormat.forPattern(format)
|
252
270
|
if @timezone && !@sprintf_timezone
|
253
271
|
joda_parser = joda_parser.withZone(org.joda.time.DateTimeZone.forID(@timezone))
|
@@ -259,11 +277,11 @@ class LogStash::Filters::Date < LogStash::Filters::Base
|
|
259
277
|
end
|
260
278
|
if @sprintf_timezone
|
261
279
|
parsers << lambda { |date , tz|
|
262
|
-
return parseWithJodaParser(joda_parser.withZone(org.joda.time.DateTimeZone.forID(tz)), date, format_has_year)
|
280
|
+
return parseWithJodaParser(joda_parser.withZone(org.joda.time.DateTimeZone.forID(tz)), date, format_has_year, format_has_timezone)
|
263
281
|
}
|
264
282
|
end
|
265
283
|
parsers << lambda do |date|
|
266
|
-
return parseWithJodaParser(joda_parser, date, format_has_year)
|
284
|
+
return parseWithJodaParser(joda_parser, date, format_has_year, format_has_timezone)
|
267
285
|
end
|
268
286
|
|
269
287
|
#Include a fallback parser to english when default locale is non-english
|
@@ -271,7 +289,7 @@ class LogStash::Filters::Date < LogStash::Filters::Base
|
|
271
289
|
"en" != java.util.Locale.getDefault().getLanguage() &&
|
272
290
|
(format.include?("MMM") || format.include?("E"))
|
273
291
|
en_joda_parser = joda_parser.withLocale(java.util.Locale.forLanguageTag('en-US'))
|
274
|
-
parsers << lambda { |date| parseWithJodaParser(en_joda_parser, date, format_has_year) }
|
292
|
+
parsers << lambda { |date| parseWithJodaParser(en_joda_parser, date, format_has_year, format_has_timezone) }
|
275
293
|
end
|
276
294
|
rescue JavaException => e
|
277
295
|
raise LogStash::ConfigurationError, I18n.t("logstash.agent.configuration.invalid_plugin_register",
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-date'
|
4
|
-
s.version = '2.1.
|
4
|
+
s.version = '2.1.6'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "The date filter is used for parsing dates from fields, and then using that date or timestamp as the logstash timestamp for the event."
|
7
7
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
data/spec/filters/date_spec.rb
CHANGED
@@ -386,6 +386,28 @@ RUBY_ENGINE == "jruby" and describe LogStash::Filters::Date do
|
|
386
386
|
end # times.each
|
387
387
|
end
|
388
388
|
|
389
|
+
describe "don't fail on next years DST switchover in CET" do
|
390
|
+
config <<-CONFIG
|
391
|
+
filter {
|
392
|
+
date {
|
393
|
+
match => [ "message", "yyyy MMM dd HH:mm:ss" ]
|
394
|
+
locale => "en"
|
395
|
+
timezone => "CET"
|
396
|
+
}
|
397
|
+
}
|
398
|
+
CONFIG
|
399
|
+
|
400
|
+
before(:each) do
|
401
|
+
logstash_time = Time.utc(2016,03,29,23,59,50)
|
402
|
+
allow(Time).to receive(:now).and_return(logstash_time)
|
403
|
+
end
|
404
|
+
|
405
|
+
sample "2016 Mar 26 02:00:37" do
|
406
|
+
insist { subject["tags"] } != ["_dateparsefailure"]
|
407
|
+
insist { subject["@timestamp"].to_s } == "2016-03-26T01:00:37.000Z"
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
389
411
|
context "Default year handling when parsing with timezone from event" do
|
390
412
|
|
391
413
|
describe "LOGSTASH-34 - Default year should be this year" do
|
@@ -445,6 +467,28 @@ RUBY_ENGINE == "jruby" and describe LogStash::Filters::Date do
|
|
445
467
|
insist { subject["@timestamp"].year } == 2014
|
446
468
|
end
|
447
469
|
end
|
470
|
+
|
471
|
+
describe "don't fail on next years DST switchover in CET" do
|
472
|
+
config <<-CONFIG
|
473
|
+
filter {
|
474
|
+
date {
|
475
|
+
match => [ "message", "MMM dd HH:mm:ss" ]
|
476
|
+
locale => "en"
|
477
|
+
timezone => "CET"
|
478
|
+
}
|
479
|
+
}
|
480
|
+
CONFIG
|
481
|
+
|
482
|
+
before(:each) do
|
483
|
+
logstash_time = Time.utc(2016,03,29,23,59,50)
|
484
|
+
allow(Time).to receive(:now).and_return(logstash_time)
|
485
|
+
end
|
486
|
+
|
487
|
+
sample "Mar 26 02:00:37" do
|
488
|
+
insist { subject["tags"] } != ["_dateparsefailure"]
|
489
|
+
insist { subject["@timestamp"].to_s } == "2016-03-26T01:00:37.000Z"
|
490
|
+
end
|
491
|
+
end
|
448
492
|
end
|
449
493
|
|
450
494
|
describe "LOGSTASH-34 - Default year should be this year" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-date
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|