fluent-plugin-mesosphere-filter 0.1.12 → 0.2.0

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: 4a0a835dd510a8ba26fb44a41b0f2ceac1cf9fe1
4
- data.tar.gz: d156ade5790336f2928136f446f14210593c7cda
3
+ metadata.gz: 24d1d9b79acd0a65968939fb9eeec29ca5d19776
4
+ data.tar.gz: 19d866f268e7d0ccb6dd563214d8e0ed91f6fb56
5
5
  SHA512:
6
- metadata.gz: b18cf6364356cc3bd67b50e889afeddaf5f59ddb3d9b02acd456f4edd6321146a47dfecf8600955efe619d41321b9f24244e3ca15a0e94276676581459b1391d
7
- data.tar.gz: 6b2cbaec9c32ce58fc75f41cf8b2c8e25daa7f2ba7653141b5481b90c7f56a85b42b2e4d922e5e24cc8b2f5ba12a00143975866b46fe76185ebc95cd732ce922
6
+ metadata.gz: bcc0c3e95aa0814ed5fa62ec1016c75dcfd11078a95a02102579f90b5a24dca60117f1640defec263de078091c758f8b82c551a7692322944e2dfd863ac5257f
7
+ data.tar.gz: b96ea2cab68e0a5d2d70294ac7020381150508d67adfd736fcde5c77c284b4a15dc7887667a670f8a370157924467c12f2fe7627296fa6fd8d5c04738aead51b
@@ -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-mesosphere-filter'
7
- gem.version = '0.1.12'
7
+ gem.version = '0.2.0'
8
8
  gem.authors = ['Joseph Hughes']
9
9
  gem.email = ['jjhughes57@gmail.com']
10
10
  gem.description = 'Filter plugin to add Mesosphere metadata'
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
20
20
 
21
21
  gem.required_ruby_version = '>= 2.0.0'
22
22
 
23
- gem.add_runtime_dependency 'fluentd', '>= 0.10.43'
23
+ gem.add_runtime_dependency 'fluentd', ['>= 0.14.0', '< 2']
24
24
  gem.add_runtime_dependency 'lru_redux', '~> 1.1'
25
25
  gem.add_runtime_dependency 'docker-api', '~> 1.23'
26
26
  gem.add_runtime_dependency 'oj', '>= 2.13.1'
@@ -15,7 +15,13 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
  #
18
- module Fluent
18
+ require 'docker-api'
19
+ require 'lru_redux'
20
+ require 'oj'
21
+ require 'time'
22
+ require 'fluent/plugin/filter'
23
+
24
+ module Fluent::Plugin
19
25
  # Parses Marathon and Chronos data from docker to make fluentd logs more
20
26
  # useful.
21
27
  class MesosphereFilter < Filter
@@ -39,11 +45,6 @@ module Fluent
39
45
  def configure(conf)
40
46
  super
41
47
 
42
- require 'docker-api'
43
- require 'lru_redux'
44
- require 'oj'
45
- require 'time'
46
-
47
48
  @cache_ttl = :none if @cache_ttl < 0
48
49
 
49
50
  @cache = LruRedux::TTL::ThreadSafeCache.new(@cache_size, @cache_ttl)
@@ -56,7 +57,7 @@ module Fluent
56
57
  # Gets the log event stream and moifies it. This is where the plugin hooks
57
58
  # into the fluentd envent stream.
58
59
  def filter_stream(tag, es)
59
- new_es = MultiEventStream.new
60
+ new_es = Fluent::MultiEventStream.new
60
61
  container_id = ''
61
62
 
62
63
  container_id = get_container_id_from_tag(tag) if get_container_id_tag
@@ -28,6 +28,7 @@ end
28
28
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
29
29
  $LOAD_PATH.unshift(File.dirname(__FILE__))
30
30
  require 'fluent/test'
31
+ require 'fluent/test/driver/filter'
31
32
  require 'webmock/test_unit'
32
33
  WebMock.disable_net_connect!(:allow => "codeclimate.com")
33
34
 
@@ -29,8 +29,8 @@ class AmplifierFilterTest < Test::Unit::TestCase
29
29
  namespace_env_var NAMESPACE
30
30
  ]
31
31
 
32
- def create_driver(conf = CONFIG, tag = 'test')
33
- Fluent::Test::FilterTestDriver.new(Fluent::MesosphereFilter, tag).configure(conf)
32
+ def create_driver(conf = CONFIG)
33
+ Fluent::Test::Driver::Filter.new(Fluent::Plugin::MesosphereFilter).configure(conf)
34
34
  end
35
35
 
36
36
  def setup_docker_stub(file, docker_api_url)
@@ -53,15 +53,15 @@ class AmplifierFilterTest < Test::Unit::TestCase
53
53
  def test_marathon_filter
54
54
  setup_marathon_container('foobar123', 'marathon')
55
55
 
56
- d1 = create_driver(CONFIG, 'docker.foobar123')
57
- d1.run do
58
- d1.filter('log' => 'Hello World 1')
56
+ d1 = create_driver(CONFIG)
57
+ d1.run(default_tag: 'docker.foobar123') do
58
+ d1.feed('log' => 'Hello World 1')
59
59
  end
60
- filtered = d1.filtered_as_array
60
+ filtered = d1.filtered
61
61
 
62
62
  task_id = 'hello-world.14b0596d-93ea-11e5-a134-124eefe69197'
63
63
 
64
- log_entry = filtered[0][2]
64
+ log_entry = filtered[0][1]
65
65
 
66
66
  assert_equal 'marathon', log_entry['mesos_framework']
67
67
  assert_equal 'hello-world', log_entry['app']
@@ -71,30 +71,30 @@ class AmplifierFilterTest < Test::Unit::TestCase
71
71
  def test_container_cache
72
72
  setup_marathon_container('foobar123', 'marathon')
73
73
 
74
- d1 = create_driver(CONFIG, 'docker.foobar123')
75
- d1.run do
74
+ d1 = create_driver(CONFIG)
75
+ d1.run(default_tag: 'docker.foobar123') do
76
76
  1000.times do
77
- d1.filter('log' => 'Hello World 4')
77
+ d1.feed('log' => 'Hello World 4')
78
78
  end
79
79
  end
80
80
  docker_api_url = 'http://tcp//example.com:5422/v1.16/containers/foobar123/json'
81
81
 
82
- assert_equal 1000, d1.filtered_as_array.length
82
+ assert_equal 1000, d1.filtered.length
83
83
  assert_requested(:get, docker_api_url, times: 2)
84
84
  end
85
85
 
86
86
  def test_container_cache_expiration
87
87
  setup_marathon_container('foobar123', 'marathon')
88
88
 
89
- d1 = create_driver(CONFIG2, 'docker.foobar123')
90
- d1.run do
91
- d1.filter('log' => 'Hello World 4')
89
+ d1 = create_driver(CONFIG2)
90
+ d1.run(default_tag: 'docker.foobar123') do
91
+ d1.feed('log' => 'Hello World 4')
92
92
  end
93
93
 
94
94
  Timecop.travel(Time.now + 10 * 60)
95
95
 
96
- d1.run do
97
- d1.filter('log' => 'Hello World 4')
96
+ d1.run(default_tag: 'docker.foobar123') do
97
+ d1.feed('log' => 'Hello World 4')
98
98
  end
99
99
 
100
100
  Timecop.return
@@ -107,14 +107,14 @@ class AmplifierFilterTest < Test::Unit::TestCase
107
107
  def test_chronos_filter
108
108
  setup_chronos_container
109
109
 
110
- d1 = create_driver(CONFIG, 'docker.foobar124')
111
- d1.run do
112
- d1.filter('log' => 'Hello World 1')
110
+ d1 = create_driver(CONFIG)
111
+ d1.run(default_tag: 'docker.foobar124') do
112
+ d1.feed('log' => 'Hello World 1')
113
113
  end
114
- filtered = d1.filtered_as_array
114
+ filtered = d1.filtered
115
115
 
116
116
  task_id = 'ct:1448508194000:0:recurring-transaction2:task'
117
- log_entry = filtered[0][2]
117
+ log_entry = filtered[0][1]
118
118
 
119
119
  assert_equal 'chronos', log_entry['mesos_framework']
120
120
  assert_equal 'some-task-app2-11182015-1718', log_entry['app']
@@ -127,14 +127,14 @@ class AmplifierFilterTest < Test::Unit::TestCase
127
127
  file = File.open('test/containers/chronos_bad.json', 'rb')
128
128
  setup_docker_stub(file, docker_api_url)
129
129
 
130
- d1 = create_driver(CONFIG, 'docker.foobar124')
131
- d1.run do
132
- d1.filter('log' => 'Hello World 1')
130
+ d1 = create_driver(CONFIG)
131
+ d1.run(default_tag: 'docker.foobar124') do
132
+ d1.feed('log' => 'Hello World 1')
133
133
  end
134
- filtered = d1.filtered_as_array
134
+ filtered = d1.filtered
135
135
 
136
136
  task_id = 'ct:1448508194000:0:recurring-transaction3:task'
137
- log_entry = filtered[0][2]
137
+ log_entry = filtered[0][1]
138
138
 
139
139
  assert_equal 'chronos', log_entry['mesos_framework']
140
140
  assert_equal task_id, log_entry['mesos_task_id']
@@ -145,12 +145,12 @@ class AmplifierFilterTest < Test::Unit::TestCase
145
145
  def test_merge_json
146
146
  setup_chronos_container
147
147
 
148
- d1 = create_driver(CONFIG, 'docker.foobar124')
149
- d1.run do
150
- d1.filter('log' => '{"test_key":"Hello World"}')
148
+ d1 = create_driver(CONFIG)
149
+ d1.run(default_tag: 'docker.foobar124') do
150
+ d1.feed('log' => '{"test_key":"Hello World"}')
151
151
  end
152
- filtered = d1.filtered_as_array
153
- log_entry = filtered[0][2]
152
+ filtered = d1.filtered
153
+ log_entry = filtered[0][1]
154
154
 
155
155
  assert_equal 'Hello World', log_entry['test_key']
156
156
  end
@@ -158,12 +158,12 @@ class AmplifierFilterTest < Test::Unit::TestCase
158
158
  def test_merge_json_with_namespace
159
159
  setup_chronos_container
160
160
 
161
- d1 = create_driver(CONFIG4, 'docker.foobar124')
162
- d1.run do
163
- d1.filter('log' => '{"test_key":"Hello World"}')
161
+ d1 = create_driver(CONFIG4)
162
+ d1.run(default_tag: 'docker.foobar124') do
163
+ d1.feed('log' => '{"test_key":"Hello World"}')
164
164
  end
165
- filtered = d1.filtered_as_array
166
- log_entry = filtered[0][2]
165
+ filtered = d1.filtered
166
+ log_entry = filtered[0][1]
167
167
 
168
168
  assert_equal 'ns', log_entry['namespace']
169
169
  assert_equal 'Hello World', log_entry['ns']['test_key']
@@ -174,15 +174,15 @@ class AmplifierFilterTest < Test::Unit::TestCase
174
174
  bad_json1 = '{"test_key":"Hello World"'
175
175
  bad_json2 = '{"test_key":"Hello World", "badnews"}'
176
176
 
177
- d1 = create_driver(CONFIG, 'docker.foobar124')
178
- d1.run do
179
- d1.filter('log' => bad_json1)
180
- d1.filter('log' => bad_json2)
177
+ d1 = create_driver(CONFIG)
178
+ d1.run(default_tag: 'docker.foobar124') do
179
+ d1.feed('log' => bad_json1)
180
+ d1.feed('log' => bad_json2)
181
181
  end
182
- filtered = d1.filtered_as_array
182
+ filtered = d1.filtered
183
183
 
184
- assert_equal bad_json1, filtered[0][2]['log']
185
- assert_equal bad_json2, filtered[1][2]['log']
184
+ assert_equal bad_json1, filtered[0][1]['log']
185
+ assert_equal bad_json2, filtered[1][1]['log']
186
186
  end
187
187
 
188
188
  def test_bad_merge_json_with_namespace
@@ -190,30 +190,30 @@ class AmplifierFilterTest < Test::Unit::TestCase
190
190
  bad_json1 = '{"test_key":"Hello World"'
191
191
  bad_json2 = '{"test_key":"Hello World", "badnews"}'
192
192
 
193
- d1 = create_driver(CONFIG4, 'docker.foobar124')
194
- d1.run do
195
- d1.filter('log' => bad_json1)
196
- d1.filter('log' => bad_json2)
193
+ d1 = create_driver(CONFIG4)
194
+ d1.run(default_tag: 'docker.foobar124') do
195
+ d1.feed('log' => bad_json1)
196
+ d1.feed('log' => bad_json2)
197
197
  end
198
- filtered = d1.filtered_as_array
198
+ filtered = d1.filtered
199
199
 
200
- assert_equal bad_json1, filtered[0][2]['log']
201
- assert_equal bad_json2, filtered[1][2]['log']
202
- assert_equal false, filtered[0][2].key?('ns')
203
- assert_equal false, filtered[1][2].key?('ns')
200
+ assert_equal bad_json1, filtered[0][1]['log']
201
+ assert_equal bad_json2, filtered[1][1]['log']
202
+ assert_equal false, filtered[0][1].key?('ns')
203
+ assert_equal false, filtered[1][1].key?('ns')
204
204
  end
205
205
 
206
206
  def test_container_id_from_record
207
207
  setup_marathon_container('somecontainer123', 'marathon2')
208
208
 
209
- d1 = create_driver(CONFIG3, 'docker')
210
- d1.run do
211
- d1.filter('log' => 'hello_world', 'container_id' => 'somecontainer123')
209
+ d1 = create_driver(CONFIG3)
210
+ d1.run(default_tag: 'docker') do
211
+ d1.feed('log' => 'hello_world', 'container_id' => 'somecontainer123')
212
212
  end
213
- filtered = d1.filtered_as_array
213
+ filtered = d1.filtered
214
214
 
215
215
  task_id = 'hello-world.14b0596d-93ea-11e5-a134-124eefe69197'
216
- log_entry = filtered[0][2]
216
+ log_entry = filtered[0][1]
217
217
 
218
218
  assert_equal 'marathon', log_entry['mesos_framework']
219
219
  assert_equal 'hello-world', log_entry['app']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mesosphere-filter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Hughes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-12 00:00:00.000000000 Z
11
+ date: 2017-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.10.43
19
+ version: 0.14.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 0.10.43
29
+ version: 0.14.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: lru_redux
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -234,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
240
  version: '0'
235
241
  requirements: []
236
242
  rubyforge_project:
237
- rubygems_version: 2.6.12
243
+ rubygems_version: 2.6.14
238
244
  signing_key:
239
245
  specification_version: 4
240
246
  summary: Filter plugin to add Mesosphere metadata to fluentd from Chronos and Marathon