logstash-filter-units 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -11
- data/lib/logstash/filters/units.rb +261 -255
- data/logstash-filter-units.gemspec +3 -2
- data/spec/filters/units_spec.rb +66 -66
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77351902d501e8d3ed2aff1d95be75078f4e6731
|
4
|
+
data.tar.gz: f8518e36bd0b3b9e4f70c03f18964f5debad93f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 797eec246d7f1b29e0e751a5fad410edbc1e89416233aaa926ae6ef26198977a799066190f8763bf6f6c7b45c69fc35ad9f62b1842768b345e3942484a7003a1
|
7
|
+
data.tar.gz: 1f36b803c1fc541cd54bd58c05ab2c7d757c6cf8972e4b1c7a277011843e5ee589df25717dd6a34670a7466b5ce781e286078dfb902a2a755646b13bf0be22c1
|
data/Gemfile
CHANGED
@@ -1,12 +1,2 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
|
-
|
3
|
-
# gem 'jrjackson'
|
4
|
-
# gem 'stud'
|
5
|
-
# gem 'clamp'
|
6
|
-
# gem 'i18n'
|
7
|
-
# gem 'filesize'
|
8
|
-
# gem 'cabin'
|
9
|
-
# gem 'rake'
|
10
|
-
# gem 'unitwise'
|
11
|
-
gem "logstash", :github => "elasticsearch/logstash", :branch => "1.5"
|
12
|
-
gemspec
|
2
|
+
gemspec
|
@@ -3,278 +3,284 @@
|
|
3
3
|
require "logstash/filters/base"
|
4
4
|
require "logstash/namespace"
|
5
5
|
require "unitwise"
|
6
|
+
# ------------------------------------------------------------------------------
|
6
7
|
|
7
8
|
# The units filter is used for converting specified fields from one
|
8
9
|
# unit of measure to another (or many others).
|
9
|
-
|
10
10
|
class LogStash::Filters::Units < LogStash::Filters::Base
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
11
|
+
config_name "units"
|
12
|
+
milestone 1
|
13
|
+
|
14
|
+
# The source fields to be converted
|
15
|
+
# Fields may be specified in three different ways:
|
16
|
+
# - Fields may be referenced specifically, by drilling
|
17
|
+
# down the field hierarchy using the square bracket syntax. If
|
18
|
+
# they are specified in this manner, then only the exact field
|
19
|
+
# specified will be converted.
|
20
|
+
# - Fields may also be specifed more generally simply by proving
|
21
|
+
# the field name. If done this way, the given field will convert
|
22
|
+
# any bottom level field of the same name.
|
23
|
+
# - If provided a string rather than an array of fields, the field
|
24
|
+
# provided will be converted in place rather then prepended with
|
25
|
+
# additional fields.
|
26
|
+
# Example:
|
27
|
+
# [source,ruby]
|
28
|
+
# filter {
|
29
|
+
# units {
|
30
|
+
# fields => ["top_level_field",
|
31
|
+
# "bottom_level_field",
|
32
|
+
# "[a][nested][field]"]
|
33
|
+
# output_units => ["kilobyte", "megabyte"]
|
34
|
+
# }
|
35
|
+
# }
|
36
|
+
# Example:
|
37
|
+
# [source,ruby]
|
38
|
+
# filter {
|
39
|
+
# units {
|
40
|
+
# fields => "in_place_conversion"
|
41
|
+
# output_units => ["megabyte"]
|
42
|
+
# }
|
43
|
+
# }
|
44
|
+
config(:fields, :validate => :array, :required => true)
|
45
|
+
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
47
|
+
# The unit of measure of the source fields to be converted.
|
48
|
+
# This parameter supports all units of measure specified by
|
49
|
+
# the unitwise gem.
|
50
|
+
# http://github.com/joshwlewis/unitwise
|
51
|
+
# Example:
|
52
|
+
# [source,ruby]
|
53
|
+
# filter {
|
54
|
+
# units {
|
55
|
+
# fields => ["length", "height"]
|
56
|
+
# input_unit => "millimeter"
|
57
|
+
# output_units => ["centimeter", "meter"]
|
58
|
+
# }
|
59
|
+
# }
|
60
|
+
config(:input_unit, :validate => :string, :default => "byte")
|
60
61
|
|
61
|
-
config(:output_units, :required => true)
|
62
|
-
# The units of measure used for conversion.
|
63
|
-
# This parameter supports all units of measure specified by
|
64
|
-
# the unitwise gem.
|
65
|
-
# http://github.com/joshwlewis/unitwise
|
66
|
-
# By default, new fields will be named according to these units.
|
67
|
-
# Example:
|
68
|
-
# [source,ruby]
|
69
|
-
# filter {
|
70
|
-
# units {
|
71
|
-
# fields => ["length", "height"]
|
72
|
-
# input_unit => "millimeter"
|
73
|
-
# output_units => ["centimeter", "meter"]
|
74
|
-
# }
|
75
|
-
# }
|
76
62
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
#
|
93
|
-
# {
|
94
|
-
# "a" => {
|
95
|
-
# "b" => {
|
96
|
-
# "c" => 1000000
|
97
|
-
# }
|
98
|
-
# }
|
99
|
-
# }
|
100
|
-
#
|
101
|
-
# becomes
|
102
|
-
#
|
103
|
-
# {
|
104
|
-
# "a" => {
|
105
|
-
# "b" => {
|
106
|
-
# "c" => 1000000
|
107
|
-
# }
|
108
|
-
# },
|
109
|
-
# "special" => {
|
110
|
-
# "a" => {
|
111
|
-
# "b" => {
|
112
|
-
# "c" => {
|
113
|
-
# "kilobyte" => 1000,
|
114
|
-
# "megabyte" => 1
|
115
|
-
# }
|
116
|
-
# }
|
117
|
-
# }
|
118
|
-
# }
|
119
|
-
# }
|
63
|
+
# The units of measure used for conversion.
|
64
|
+
# This parameter supports all units of measure specified by
|
65
|
+
# the unitwise gem.
|
66
|
+
# http://github.com/joshwlewis/unitwise
|
67
|
+
# By default, new fields will be named according to these units.
|
68
|
+
# Example:
|
69
|
+
# [source,ruby]
|
70
|
+
# filter {
|
71
|
+
# units {
|
72
|
+
# fields => ["length", "height"]
|
73
|
+
# input_unit => "millimeter"
|
74
|
+
# output_units => ["centimeter", "meter"]
|
75
|
+
# }
|
76
|
+
# }
|
77
|
+
config(:output_units, :required => true)
|
120
78
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
79
|
+
# If specified, the fields generated by the filter will be
|
80
|
+
# placed within a hierarchy mirroring that of the fields
|
81
|
+
# listed within the fields parameter, which is itself nested
|
82
|
+
# under the given root field.
|
83
|
+
# For example, with this config:
|
84
|
+
# [source,ruby]
|
85
|
+
# filter {
|
86
|
+
# units {
|
87
|
+
# fields => ["c"]
|
88
|
+
# input_unit => "byte"
|
89
|
+
# output_units => ["kilobyte", "megabyte"]
|
90
|
+
# root_field => "special"
|
91
|
+
# }
|
92
|
+
# }
|
93
|
+
#
|
94
|
+
# {
|
95
|
+
# "a" => {
|
96
|
+
# "b" => {
|
97
|
+
# "c" => 1000000
|
98
|
+
# }
|
99
|
+
# }
|
100
|
+
# }
|
101
|
+
#
|
102
|
+
# becomes
|
103
|
+
#
|
104
|
+
# {
|
105
|
+
# "a" => {
|
106
|
+
# "b" => {
|
107
|
+
# "c" => 1000000
|
108
|
+
# }
|
109
|
+
# },
|
110
|
+
# "special" => {
|
111
|
+
# "a" => {
|
112
|
+
# "b" => {
|
113
|
+
# "c" => {
|
114
|
+
# "kilobyte" => 1000,
|
115
|
+
# "megabyte" => 1
|
116
|
+
# }
|
117
|
+
# }
|
118
|
+
# }
|
119
|
+
# }
|
120
|
+
# }
|
121
|
+
config(:root_field, :validate => :string)
|
138
122
|
|
139
|
-
|
140
|
-
|
141
|
-
|
123
|
+
# Renames the resulting output fields according to a hash.
|
124
|
+
# Keys should be the output fields and values should be their
|
125
|
+
# desired names, respectively. Unamed fields will persist.
|
126
|
+
# Example:
|
127
|
+
# [source,ruby]
|
128
|
+
# filter {
|
129
|
+
# units {
|
130
|
+
# fields => ["file_size"]
|
131
|
+
# input_unit => "byte"
|
132
|
+
# output_units => ["kilobyte", "megabyte"]
|
133
|
+
# rename_labels => {
|
134
|
+
# "kilobyte" => "kB"
|
135
|
+
# "megabyte" => "mB"
|
136
|
+
# }
|
137
|
+
# }
|
138
|
+
# }
|
139
|
+
config(:rename_labels, :validate => :hash, :default => {})
|
140
|
+
# ----------------------------------------------------------------------------
|
142
141
|
|
143
|
-
|
144
|
-
|
145
|
-
|
142
|
+
def initialize(*args)
|
143
|
+
super(*args)
|
144
|
+
end
|
146
145
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
146
|
+
public
|
147
|
+
def register()
|
148
|
+
end
|
149
|
+
# ----------------------------------------------------------------------------
|
150
|
+
|
151
|
+
private
|
152
|
+
def nested_hash_to_matrix(data)
|
153
|
+
@sep = '.'
|
154
|
+
@output = []
|
155
|
+
def _nested_hash_to_matrix(data, name)
|
156
|
+
data.each do |key, val|
|
157
|
+
new_key = name + @sep + key.to_s
|
158
|
+
if val.is_a?(Hash) and val != {}
|
159
|
+
_nested_hash_to_matrix(val, new_key)
|
160
|
+
else
|
161
|
+
@output.push([new_key, val])
|
162
|
+
end
|
163
|
+
end
|
164
|
+
return @output
|
165
|
+
end
|
162
166
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
+
@output = _nested_hash_to_matrix(data, @sep)
|
168
|
+
@output = @output.map { |key, val| [key.split('.')[2..-1], val] }
|
169
|
+
return @output
|
170
|
+
end
|
167
171
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
172
|
+
private
|
173
|
+
def matrix_to_nested_hash(data)
|
174
|
+
output = {}
|
175
|
+
data.each do |keys, value|
|
176
|
+
cursor = output
|
177
|
+
for key in keys[0..-2]
|
178
|
+
if !cursor.include?(key)
|
179
|
+
cursor[key] = {}
|
180
|
+
cursor = cursor[key]
|
181
|
+
else
|
182
|
+
cursor = cursor[key]
|
183
|
+
end
|
184
|
+
end
|
185
|
+
cursor[keys[-1]] = value
|
186
|
+
end
|
187
|
+
return output
|
188
|
+
end
|
189
|
+
# ----------------------------------------------------------------------------
|
185
190
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
191
|
+
private
|
192
|
+
def convert_to_dict(value)
|
193
|
+
# convert a single value to a hash of converted values
|
194
|
+
output = {}
|
195
|
+
for output_unit in @output_units do
|
196
|
+
output_value = convert(value, output_unit)
|
197
|
+
if @rename_labels.include?(output_unit)
|
198
|
+
output_unit = @rename_labels[output_unit]
|
199
|
+
end
|
200
|
+
output[output_unit] = output_value
|
201
|
+
end
|
202
|
+
return output
|
203
|
+
end
|
199
204
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
205
|
+
private
|
206
|
+
def convert(value, output_unit)
|
207
|
+
begin
|
208
|
+
return output_value = Unitwise(value, @input_unit).convert_to(output_unit).value
|
209
|
+
rescue Exception
|
210
|
+
raise StandardError
|
211
|
+
end
|
212
|
+
end
|
208
213
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
214
|
+
private
|
215
|
+
def field_handler(fields)
|
216
|
+
output = {"exact" => [], "partial" => []}
|
217
|
+
for field in fields
|
218
|
+
if /\[|\]/.match(field)
|
219
|
+
temp = field.split(/\]\[|^\[|\]$/)[1..-1]
|
220
|
+
output["exact"].push(temp)
|
221
|
+
else
|
222
|
+
output["partial"].push(field)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
return output
|
226
|
+
end
|
227
|
+
# ----------------------------------------------------------------------------
|
222
228
|
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
229
|
+
public
|
230
|
+
def filter(event)
|
231
|
+
return unless filter?(event)
|
232
|
+
begin
|
233
|
+
# flag for converting a value in place or expanding it into
|
234
|
+
# a hash
|
235
|
+
inplace = @output_units.is_a?(String)
|
236
|
+
matrix = nested_hash_to_matrix(event.to_hash)
|
231
237
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
238
|
+
# convert matching fields and remove rows that
|
239
|
+
# do not contain leaf nodes that match @fields
|
240
|
+
fields = field_handler(@fields)
|
241
|
+
del = []
|
242
|
+
matrix.each do |row|
|
243
|
+
if fields["exact"].include?(row[0])
|
244
|
+
if inplace
|
245
|
+
row[1] = convert(row[1], @output_units)
|
246
|
+
else
|
247
|
+
row[1] = convert_to_dict(row[1])
|
248
|
+
end
|
249
|
+
elsif fields["partial"].include?(row[0][-1])
|
250
|
+
if inplace
|
251
|
+
row[1] = convert(row[1], @output_units)
|
252
|
+
else
|
253
|
+
row[1] = convert_to_dict(row[1])
|
254
|
+
end
|
255
|
+
else
|
256
|
+
del.push(row)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
# delete all rows that do not have leaf nodes listed
|
260
|
+
# in fields
|
261
|
+
for row in del
|
262
|
+
matrix.delete(row)
|
263
|
+
end
|
264
|
+
|
265
|
+
new_hash = matrix_to_nested_hash(matrix)
|
266
|
+
if @root_field
|
267
|
+
new_hash = {@root_field => new_hash}
|
268
|
+
end
|
263
269
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
270
|
+
# merge new hash into event's hash
|
271
|
+
# assignment of items from new_hash with a prior merge
|
272
|
+
# will destroy unmatched branches
|
273
|
+
data = event.to_hash().merge(new_hash)
|
274
|
+
data.each do |key, value|
|
275
|
+
event[key] = value
|
276
|
+
end
|
277
|
+
return filter_matched(event)
|
278
|
+
rescue StandardError
|
279
|
+
event.tag("_unitsparsefailure")
|
280
|
+
return event
|
281
|
+
rescue Logstash::ShutdownSignal
|
282
|
+
event.cancel()
|
283
|
+
@logger.debug(e)
|
284
|
+
end
|
285
|
+
end
|
280
286
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-units'
|
4
|
-
s.version = '0.1.
|
4
|
+
s.version = '0.1.1'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "A filter for performing unit conversions on specified fields."
|
7
7
|
s.description = "The units filter is used for converting specified fields from one unit of measure to another (or many others)."
|
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
|
22
22
|
# Gem dependencies
|
23
23
|
s.add_runtime_dependency "logstash", '>= 1.4.0', '< 2.0.0'
|
24
|
-
s.add_runtime_dependency "unitwise"
|
24
|
+
s.add_runtime_dependency "unitwise"
|
25
25
|
s.add_development_dependency "logstash-devutils"
|
26
|
+
|
26
27
|
end
|
data/spec/filters/units_spec.rb
CHANGED
@@ -3,73 +3,73 @@ require "logstash/devutils/rspec/spec_helper"
|
|
3
3
|
require "logstash/filters/units"
|
4
4
|
|
5
5
|
describe LogStash::Filters::Units do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
6
|
+
describe "special field" do
|
7
|
+
let(:config) do <<-CONFIG
|
8
|
+
filter {
|
9
|
+
units {
|
10
|
+
fields => ["[a1][a2]", "b1", "c1", "d2"]
|
11
|
+
input_unit => "byte"
|
12
|
+
output_units => ["kibibyte", "mebibyte"]
|
13
|
+
root_field => "special"
|
14
|
+
rename_labels => {
|
15
|
+
"kibibyte" => "kb"
|
16
|
+
"mebibyte" => "mb"
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
CONFIG
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
23
|
+
event = {
|
24
|
+
"a1" => {
|
25
|
+
"a2" => 1024
|
26
|
+
},
|
27
|
+
"b1" => 1024,
|
28
|
+
"c1" => 1024,
|
29
|
+
"d1" => {
|
30
|
+
"d2" => 1024
|
31
|
+
}
|
32
|
+
}
|
33
|
+
sample(event) do
|
34
|
+
insist { subject["special"]["a1"]["a2"]["kb"] } == 1
|
35
|
+
insist { subject["special"]["a1"]["a2"]["kb"] } == 1
|
36
|
+
insist { subject["special"]["b1"]["kb"] } == 1
|
37
|
+
insist { subject["special"]["c1"]["kb"] } == 1
|
38
|
+
insist { subject["special"]["d1"]["d2"]["kb"] } == 1
|
39
|
+
end
|
40
|
+
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
42
|
+
describe "in place" do
|
43
|
+
let(:config) do <<-CONFIG
|
44
|
+
filter {
|
45
|
+
units {
|
46
|
+
fields => ["[a1][a2]", "b1", "c1", "d2"]
|
47
|
+
input_unit => "byte"
|
48
|
+
output_units => ["kibibyte", "mebibyte"]
|
49
|
+
rename_labels => {
|
50
|
+
"kibibyte" => "kb"
|
51
|
+
"mebibyte" => "mb"
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
CONFIG
|
56
|
+
end
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
58
|
+
event = {
|
59
|
+
"a1" => {
|
60
|
+
"a2" => 1024**2
|
61
|
+
},
|
62
|
+
"b1" => 1024**2,
|
63
|
+
"c1" => 1024**2,
|
64
|
+
"d1" => {
|
65
|
+
"d2" => 1024**2
|
66
|
+
}
|
67
|
+
}
|
68
|
+
sample(event) do
|
69
|
+
insist { subject["a1"]["a2"]["mb"] } == 1
|
70
|
+
insist { subject["b1"]["mb"] } == 1
|
71
|
+
insist { subject["c1"]["mb"] } == 1
|
72
|
+
insist { subject["d1"]["d2"]["mb"] } == 1
|
73
|
+
end
|
74
|
+
end
|
75
75
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-units
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Braun
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash
|
@@ -36,12 +36,12 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - '>='
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
39
|
+
version: '0'
|
40
40
|
requirement: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
42
|
- - '>='
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
44
|
+
version: '0'
|
45
45
|
prerelease: false
|
46
46
|
type: :runtime
|
47
47
|
- !ruby/object:Gem::Dependency
|