fluent-plugin-kubernetes_metadata_filter 2.1.2 → 2.1.3
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
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
|