fluent-plugin-mesosphere-filter 0.1.12 → 0.2.0

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: 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