fluent-plugin-kubernetes_metadata_filter 2.1.2 → 2.1.3
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e478872fe7fd194bb1746e4e44a917a7d07067b
|
4
|
+
data.tar.gz: dfc10c0b81a8a3a8a805e53fb914bf5525f4e328
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27ac4b15b101d557411aebc943d5d1e5b464ec94d4e5e9318b960f0c022b09232f6112936af84b30a17834ee67562a3d0f12cea477639672089e1d3afd3541ae
|
7
|
+
data.tar.gz: bd79142fc9afde71d94ab772e65cc36cb118e0d6624014275fe2a151d5353e3e25a214ee8fc8a74e8e0d519e475cc0aa8ee364ace1f25091e0af88498685de26
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = "fluent-plugin-kubernetes_metadata_filter"
|
7
|
-
gem.version = "2.1.
|
7
|
+
gem.version = "2.1.3"
|
8
8
|
gem.authors = ["Jimmi Dyson"]
|
9
9
|
gem.email = ["jimmidyson@gmail.com"]
|
10
10
|
gem.description = %q{Filter plugin to add Kubernetes metadata}
|
@@ -299,22 +299,24 @@ module Fluent::Plugin
|
|
299
299
|
end
|
300
300
|
|
301
301
|
def filter_stream_from_files(tag, es)
|
302
|
-
return es if es.
|
302
|
+
return es if (es.respond_to?(:empty?) && es.empty?) || !es.is_a?(Fluent::EventStream)
|
303
303
|
new_es = Fluent::MultiEventStream.new
|
304
304
|
|
305
305
|
match_data = tag.match(@tag_to_kubernetes_name_regexp_compiled)
|
306
306
|
batch_miss_cache = {}
|
307
|
-
|
308
|
-
container_id = match_data['docker_id']
|
309
|
-
metadata = {
|
310
|
-
'docker' => {
|
311
|
-
'container_id' => container_id
|
312
|
-
},
|
313
|
-
'kubernetes' => get_metadata_for_record(match_data, container_id, create_time_from_record(es.first[1]), batch_miss_cache)
|
314
|
-
}
|
315
|
-
end
|
307
|
+
metadata = nil
|
316
308
|
|
317
309
|
es.each do |time, record|
|
310
|
+
if match_data && metadata.nil?
|
311
|
+
container_id = match_data['docker_id']
|
312
|
+
metadata = {
|
313
|
+
'docker' => {
|
314
|
+
'container_id' => container_id
|
315
|
+
},
|
316
|
+
'kubernetes' => get_metadata_for_record(match_data, container_id, create_time_from_record(record), batch_miss_cache)
|
317
|
+
}
|
318
|
+
end
|
319
|
+
|
318
320
|
record = record.merge(Marshal.load(Marshal.dump(metadata))) if metadata
|
319
321
|
new_es.add(time, record)
|
320
322
|
end
|
@@ -323,7 +325,7 @@ module Fluent::Plugin
|
|
323
325
|
end
|
324
326
|
|
325
327
|
def filter_stream_from_journal(tag, es)
|
326
|
-
return es if es.
|
328
|
+
return es if (es.respond_to?(:empty?) && es.empty?) || !es.is_a?(Fluent::EventStream)
|
327
329
|
new_es = Fluent::MultiEventStream.new
|
328
330
|
batch_miss_cache = {}
|
329
331
|
es.each do |time, record|
|
@@ -160,11 +160,21 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
160
160
|
|
161
161
|
test 'nil event stream from journal' do
|
162
162
|
#not certain how this is possible but adding test to properly
|
163
|
-
#guard against this condition we have seen
|
164
|
-
|
163
|
+
#guard against this condition we have seen - test for nil,
|
164
|
+
#empty, no empty method, not an event stream
|
165
165
|
plugin = create_driver.instance
|
166
|
-
|
167
|
-
|
166
|
+
[nil, Fluent::MultiEventStream.new, 1, [1]].each do |es|
|
167
|
+
assert_equal es, plugin.filter_stream_from_journal('tag', es)
|
168
|
+
end
|
169
|
+
# and make sure OneEventStream works
|
170
|
+
ts = Time.now()
|
171
|
+
rec = {"message"=>"hello"}
|
172
|
+
es = Fluent::OneEventStream.new(ts, rec)
|
173
|
+
newes = plugin.filter_stream_from_journal('tag', es)
|
174
|
+
newes.each do |newts, newrec|
|
175
|
+
assert_equal ts, newts
|
176
|
+
assert_equal rec, newrec
|
177
|
+
end
|
168
178
|
end
|
169
179
|
|
170
180
|
test 'nil event stream from files' do
|
@@ -172,8 +182,18 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
172
182
|
#guard against this condition we have seen
|
173
183
|
|
174
184
|
plugin = create_driver.instance
|
175
|
-
|
176
|
-
|
185
|
+
[nil, Fluent::MultiEventStream.new, 1, [1]].each do |es|
|
186
|
+
assert_equal es, plugin.filter_stream_from_files('tag', es)
|
187
|
+
end
|
188
|
+
# and make sure OneEventStream works
|
189
|
+
ts = Time.now()
|
190
|
+
rec = {"message"=>"hello"}
|
191
|
+
es = Fluent::OneEventStream.new(ts, rec)
|
192
|
+
newes = plugin.filter_stream_from_journal('tag', es)
|
193
|
+
newes.each do |newts, newrec|
|
194
|
+
assert_equal ts, newts
|
195
|
+
assert_equal rec, newrec
|
196
|
+
end
|
177
197
|
end
|
178
198
|
|
179
199
|
test 'inability to connect to the api server handles exception and doensnt block pipeline' do
|
@@ -773,5 +793,47 @@ class KubernetesMetadataFilterTest < Test::Unit::TestCase
|
|
773
793
|
assert_equal(expected_kube_metadata, filtered[0])
|
774
794
|
end
|
775
795
|
end
|
796
|
+
|
797
|
+
test 'processes all events when reading from MessagePackEventStream' do
|
798
|
+
VCR.use_cassette('kubernetes_docker_metadata') do
|
799
|
+
entries = [[@time, {'time'=>'2015-05-08T09:22:01Z'}], [@time, {'time'=>'2015-05-08T09:22:01Z'}]]
|
800
|
+
array_stream = Fluent::ArrayEventStream.new(entries)
|
801
|
+
msgpack_stream = Fluent::MessagePackEventStream.new(array_stream.to_msgpack_stream)
|
802
|
+
|
803
|
+
d = create_driver('
|
804
|
+
kubernetes_url https://localhost:8443
|
805
|
+
watch false
|
806
|
+
cache_size 1
|
807
|
+
')
|
808
|
+
d.run {
|
809
|
+
d.feed(DEFAULT_TAG, msgpack_stream)
|
810
|
+
}
|
811
|
+
filtered = d.filtered.map{|e| e.last}
|
812
|
+
|
813
|
+
expected_kube_metadata = {
|
814
|
+
'time'=>'2015-05-08T09:22:01Z',
|
815
|
+
'docker' => {
|
816
|
+
'container_id' => '49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459'
|
817
|
+
},
|
818
|
+
'kubernetes' => {
|
819
|
+
'host' => 'jimmi-redhat.localnet',
|
820
|
+
'pod_name' => 'fabric8-console-controller-98rqc',
|
821
|
+
'container_name' => 'fabric8-console-container',
|
822
|
+
'container_image' => 'fabric8/hawtio-kubernetes:latest',
|
823
|
+
'container_image_id' => 'docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303',
|
824
|
+
'namespace_name' => 'default',
|
825
|
+
'namespace_id' => '898268c8-4a36-11e5-9d81-42010af0194c',
|
826
|
+
'pod_id' => 'c76927af-f563-11e4-b32d-54ee7527188d',
|
827
|
+
'master_url' => 'https://localhost:8443',
|
828
|
+
'labels' => {
|
829
|
+
'component' => 'fabric8Console'
|
830
|
+
}
|
831
|
+
}
|
832
|
+
}
|
833
|
+
|
834
|
+
assert_equal(expected_kube_metadata, filtered[0])
|
835
|
+
assert_equal(expected_kube_metadata, filtered[1])
|
836
|
+
end
|
837
|
+
end
|
776
838
|
end
|
777
839
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-kubernetes_metadata_filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmi Dyson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|