fluent-plugin-conditional_filter 0.0.1 → 0.0.2
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/README.md +21 -6
- data/fluent-plugin-conditional_filter.gemspec +1 -1
- data/lib/fluent/plugin/out_conditional_filter.rb +12 -2
- data/spec/lib/out_conditional_filter_spec.rb +104 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da5d5a07de7eecf356626bd2cf0bdd88c300f39e
|
4
|
+
data.tar.gz: 8ad55890d05c1e1ecc37264d2003c9d139968318
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4002c8649cb44d8a05f1219483c9998cff8d3158e489c58769f7b31b2e8f698dd292ec30c81ba8e610e3f14282762bb5cc298d17a72dfddba1ddb6313457dda0
|
7
|
+
data.tar.gz: 785a93b79ba285fd2c948c2d0456cf83ddd8cb8c38f3d1080c4d927605399ed353dfc764cbbbd1e8f975ab56f54eaf77bf99181639779ff1757dbc9e3c983451
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
# Fluent::Plugin::ConditionalFilter [](http://travis-ci.org/kentaro/fluent-plugin-conditional_filter)
|
1
|
+
# Fluent::Plugin::ConditionalFilter [](http://travis-ci.org/kentaro/fluent-plugin-conditional_filter)
|
2
2
|
|
3
3
|
## Component
|
4
4
|
|
5
5
|
### ConditionalFilterOutput
|
6
6
|
|
7
|
-
fluent-plugin-conditional_filter provides a simple filter that filters out key/value pairs that don't
|
7
|
+
fluent-plugin-conditional_filter provides a simple filter that filters out key/value pairs that don't satisfy a given condition.
|
8
8
|
|
9
9
|
## Usage
|
10
10
|
|
@@ -12,9 +12,10 @@ fluent-plugin-conditional_filter provides a simple filter that filters out key/v
|
|
12
12
|
|
13
13
|
```
|
14
14
|
<match test.**>
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
add_tag_prefix filtered.
|
16
|
+
key_pattern @example\.com$
|
17
|
+
condition 10
|
18
|
+
filter numeric_upward
|
18
19
|
</match>
|
19
20
|
```
|
20
21
|
|
@@ -24,7 +25,7 @@ fluent-plugin-conditional_filter provides a simple filter that filters out key/v
|
|
24
25
|
|
25
26
|
Key pattern to check.
|
26
27
|
|
27
|
-
#### `condition` (
|
28
|
+
#### `condition` (required)
|
28
29
|
|
29
30
|
Condition for the filter below.
|
30
31
|
|
@@ -36,6 +37,20 @@ Set filtering strategy.
|
|
36
37
|
|
37
38
|
You can also use the params above inherited from [Fluent::HandleTagNameMixin](https://github.com/fluent/fluentd/blob/master/lib/fluent/mixin.rb).
|
38
39
|
|
40
|
+
### Filters
|
41
|
+
|
42
|
+
#### numeric_upward
|
43
|
+
|
44
|
+
Filter out such key/value pairs whose value aren't greater than or equal to the given value as float value.
|
45
|
+
|
46
|
+
#### numeric_downward
|
47
|
+
|
48
|
+
Filter out such key/value pairs whose value aren't smaller than or equal to the given value as float value
|
49
|
+
|
50
|
+
#### string_match
|
51
|
+
|
52
|
+
Filter out such key/value pairs whose value don't match the given value as string.
|
53
|
+
|
39
54
|
## Installation
|
40
55
|
|
41
56
|
Add this line to your application's Gemfile:
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'fluent-plugin-conditional_filter'
|
7
|
-
spec.version = '0.0.
|
7
|
+
spec.version = '0.0.2'
|
8
8
|
spec.authors = ['Kentaro Kuribayashi']
|
9
9
|
spec.email = ['kentarok@gmail.com']
|
10
10
|
spec.description = %q{A fluent plugin that provides conditional filters}
|
@@ -17,7 +17,7 @@ class Fluent::ConditionalFilterOutput < Fluent::Output
|
|
17
17
|
)
|
18
18
|
end
|
19
19
|
|
20
|
-
@key_pattern_regexp =
|
20
|
+
@key_pattern_regexp = Regexp.new(key_pattern)
|
21
21
|
end
|
22
22
|
|
23
23
|
def emit(tag, es, chain)
|
@@ -40,7 +40,17 @@ class Fluent::ConditionalFilterOutput < Fluent::Output
|
|
40
40
|
when 'numeric_upward'
|
41
41
|
filter_record = record.select do |key, value|
|
42
42
|
key.match(@key_pattern_regexp) &&
|
43
|
-
|
43
|
+
record[key].to_f >= condition.to_f
|
44
|
+
end
|
45
|
+
when 'numeric_downward'
|
46
|
+
filter_record = record.select do |key, value|
|
47
|
+
key.match(@key_pattern_regexp) &&
|
48
|
+
record[key].to_f <= condition.to_f
|
49
|
+
end
|
50
|
+
when 'string_match'
|
51
|
+
filter_record = record.select do |key, value|
|
52
|
+
key.match(@key_pattern_regexp) &&
|
53
|
+
record[key].match(Regexp.new(condition))
|
44
54
|
end
|
45
55
|
else
|
46
56
|
raise ArgumentError.new("[out_conditional_filter] no such filter: #{filter}")
|
@@ -6,7 +6,7 @@ describe Fluent::ConditionalFilterOutput do
|
|
6
6
|
context "success" do
|
7
7
|
let(:conf) {
|
8
8
|
%[
|
9
|
-
key_pattern @example
|
9
|
+
key_pattern @example\.com$
|
10
10
|
condition 10
|
11
11
|
filter numeric_upward
|
12
12
|
]
|
@@ -19,7 +19,7 @@ describe Fluent::ConditionalFilterOutput do
|
|
19
19
|
|
20
20
|
it {
|
21
21
|
expect(subject).to be_an_instance_of described_class
|
22
|
-
expect(subject.key_pattern).to be ==
|
22
|
+
expect(subject.key_pattern).to be == "@example\.com$"
|
23
23
|
expect(subject.instance_variable_get(:@key_pattern_regexp)).to be == /@example.com$/
|
24
24
|
}
|
25
25
|
end
|
@@ -123,6 +123,108 @@ describe Fluent::ConditionalFilterOutput do
|
|
123
123
|
}
|
124
124
|
end
|
125
125
|
end
|
126
|
+
|
127
|
+
context('numeric_downward') do
|
128
|
+
let(:conf) {
|
129
|
+
%[
|
130
|
+
key_pattern @example.com$
|
131
|
+
condition 10
|
132
|
+
filter numeric_downward
|
133
|
+
]
|
134
|
+
}
|
135
|
+
|
136
|
+
let(:driver) { Fluent::Test::OutputTestDriver.new(described_class, 'test').configure(conf) }
|
137
|
+
subject {
|
138
|
+
driver.instance
|
139
|
+
}
|
140
|
+
|
141
|
+
context('with 0 matched key/value pair') do
|
142
|
+
before {
|
143
|
+
driver.run {
|
144
|
+
driver.emit('foo@example.com' => 18, 'bar@example.com' => 26, 'baz@baz.com' => 15)
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
it {
|
149
|
+
expect(driver.emits[0]).to be_nil
|
150
|
+
}
|
151
|
+
end
|
152
|
+
|
153
|
+
context('with 1 matched key/value pair') do
|
154
|
+
before {
|
155
|
+
driver.run {
|
156
|
+
driver.emit('foo@example.com' => 11, 'bar@example.com' => 6, 'baz@baz.com' => 5)
|
157
|
+
}
|
158
|
+
}
|
159
|
+
|
160
|
+
it {
|
161
|
+
expect(driver.emits[0][2].keys.length).to be == 1
|
162
|
+
}
|
163
|
+
end
|
164
|
+
|
165
|
+
context('with 2 matched key/value pairs') do
|
166
|
+
before {
|
167
|
+
driver.run {
|
168
|
+
driver.emit('foo@example.com' => 10, 'bar@example.com' => 5, 'baz@baz.com' => 5)
|
169
|
+
}
|
170
|
+
}
|
171
|
+
|
172
|
+
it {
|
173
|
+
expect(driver.emits[0][2].keys.length).to be == 2
|
174
|
+
}
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context('string_match') do
|
179
|
+
let(:conf) {
|
180
|
+
%[
|
181
|
+
key_pattern @example.com$
|
182
|
+
condition (staff|user)
|
183
|
+
filter string_match
|
184
|
+
]
|
185
|
+
}
|
186
|
+
|
187
|
+
let(:driver) { Fluent::Test::OutputTestDriver.new(described_class, 'test').configure(conf) }
|
188
|
+
subject {
|
189
|
+
driver.instance
|
190
|
+
}
|
191
|
+
|
192
|
+
context('with 0 matched key/value pair') do
|
193
|
+
before {
|
194
|
+
driver.run {
|
195
|
+
driver.emit('foo@example.com' => 'guest', 'bar@example.com' => 'guest', 'baz@baz.com' => 'staff')
|
196
|
+
}
|
197
|
+
}
|
198
|
+
|
199
|
+
it {
|
200
|
+
expect(driver.emits[0]).to be_nil
|
201
|
+
}
|
202
|
+
end
|
203
|
+
|
204
|
+
context('with 1 matched key/value pair') do
|
205
|
+
before {
|
206
|
+
driver.run {
|
207
|
+
driver.emit('foo@example.com' => 'staff', 'bar@example.com' => 'guest', 'baz@baz.com' => 'user')
|
208
|
+
}
|
209
|
+
}
|
210
|
+
|
211
|
+
it {
|
212
|
+
expect(driver.emits[0][2].keys.length).to be == 1
|
213
|
+
}
|
214
|
+
end
|
215
|
+
|
216
|
+
context('with 2 matched key/value pairs') do
|
217
|
+
before {
|
218
|
+
driver.run {
|
219
|
+
driver.emit('foo@example.com' => 'staff', 'bar@example.com' => 'user', 'baz@baz.com' => 'staff')
|
220
|
+
}
|
221
|
+
}
|
222
|
+
|
223
|
+
it {
|
224
|
+
expect(driver.emits[0][2].keys.length).to be == 2
|
225
|
+
}
|
226
|
+
end
|
227
|
+
end
|
126
228
|
end
|
127
229
|
end
|
128
230
|
|