fluent-plugin-reemit 0.3.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de2b0c078c5715c5079548c99f2efbbc838fc881
4
- data.tar.gz: 640bf1b9a340eb7fe09af815f65ba145b5dd8318
3
+ metadata.gz: a6de921463dfbc3f21a5b0d55a073d53341bb7b3
4
+ data.tar.gz: d220a7ff0f0e46050d9fc820ea3694ac67be422d
5
5
  SHA512:
6
- metadata.gz: 5cfb6bdd0b00d62162754deb1d1480450389755e57d5f6f6696d59890361578b66c759cc45a04be2414d97154f5c7553f6789b12269f0c970531c672535b9c39
7
- data.tar.gz: 9b8b6fdab2004582082c62881064feb5d5cef4517b47534a844c7f8d92bbf56545cbd169d3d05ae60aac0d278ff7ba4ca6a6c11dab168e5bcdeb09ed85b953f3
6
+ metadata.gz: fba582993fad70f50cab375636349284bd4286838bb8206f08126d7f3e29d27ac0aab169c518f23b0bf8113af7cacbc05c22b07645c7b8b73fe2cb9244d3a461
7
+ data.tar.gz: 185201f75e424cd764a856563741943ddaf399286feae3aa5924b69e07d199d58c612fd4f2d0f5a61a658162af36072f82fd943b89704d19d76b45f3a0d7643f
@@ -1,3 +1,9 @@
1
+ ## 0.3.2 (2017/09/15)
2
+
3
+ Fixes:
4
+
5
+ * Fix to work with Fluentd v0.14 Filter Plugin
6
+
1
7
  ## 0.3.1 (2017/09/15)
2
8
 
3
9
  Fixes:
@@ -0,0 +1,23 @@
1
+ <source>
2
+ type gc_stat
3
+ emit_interval 1s
4
+ tag gc_stat
5
+ </source>
6
+
7
+ <match **>
8
+ @type copy
9
+ <store>
10
+ @type stdout
11
+ </store>
12
+ <store>
13
+ @type reemit
14
+ </store>
15
+ </match>
16
+
17
+ <filter **>
18
+ @type stdout
19
+ </filter>
20
+
21
+ <match **>
22
+ @type stdout
23
+ </match>
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = "fluent-plugin-reemit"
6
- gem.version = "0.3.1"
6
+ gem.version = "0.3.2"
7
7
  gem.authors = ["Naotoshi Seo"]
8
8
  gem.email = "sonots@gmail.com"
9
9
  gem.homepage = "https://github.com/sonots/fluent-plugin-reemit"
@@ -1,10 +1,19 @@
1
1
  require 'fluent/version'
2
- if Fluent::VERSION > '0.12'
3
- require 'fluent/event_router'
4
- end
5
2
 
6
3
  module Fluent
7
4
  class ReemitOutput < Output
5
+ major, minor, patch = Fluent::VERSION.split('.').map(&:to_i)
6
+ if major > 0 || (major == 0 && minor >= 14)
7
+ require_relative 'out_reemit/v14_event_router'
8
+ EventRouter = V14EventRouter
9
+ elsif major == 0 && minor >= 12
10
+ require_relative 'out_reemit/v12_event_router'
11
+ EventRouter = V12EventRouter
12
+ else
13
+ require_relative 'out_reemit/v10_event_router'
14
+ EventRouter = V10EventRouter
15
+ end
16
+
8
17
  Fluent::Plugin.register_output('reemit', self)
9
18
 
10
19
  # To support log_level option implemented by Fluentd v0.10.43
@@ -15,14 +24,7 @@ module Fluent
15
24
  def configure(conf)
16
25
  super
17
26
 
18
- major, minor, patch = Fluent::VERSION.split('.').map(&:to_i)
19
- if major > 0 || (major == 0 && minor >= 14)
20
- @router = V14EventRouter.new(self)
21
- elsif major == 0 && minor >= 12
22
- @router = V12EventRouter.new(self)
23
- else
24
- @router = V10EventRouter.new(self)
25
- end
27
+ @router = EventRouter.new(self)
26
28
  end
27
29
 
28
30
  def start
@@ -49,110 +51,5 @@ module Fluent
49
51
  false
50
52
  end
51
53
  end
52
-
53
- class V12EventRouter
54
- def initialize(reemit)
55
- @reemit = reemit
56
- @event_router = Engine.root_agent.event_router
57
- @chain = @event_router.instance_variable_get(:@chain) # only v0.12
58
- @emit_error_handler = @event_router.emit_error_handler
59
- @match_rules = @event_router.instance_variable_get(:@match_rules)
60
- @default_collector = @event_router.default_collector
61
- # @match_cache = @event_router.match_cache
62
- @match_cache = EventRouter::MatchCache.new # need to use a different cache
63
- end
64
-
65
- # copy from fluentd
66
- def emit_stream(tag, es)
67
- match(tag).emit(tag, es, @chain)
68
- rescue => e
69
- @emit_error_handler.handle_emits_error(tag, es, e)
70
- end
71
-
72
- # copy from fluentd
73
- def match(tag)
74
- collector = @match_cache.get(tag) {
75
- c = find(tag) || @default_collector
76
- }
77
- collector
78
- end
79
-
80
- def find(tag)
81
- # We want to reemit messages to the **next** `<match>`
82
- pipeline = nil
83
- found_reemit = false
84
- @match_rules.each_with_index { |rule, i|
85
- # if rule.match?(tag) # this is the original
86
- if rule.match?(tag)
87
- if found_reemit && !@reemit.included?(rule.collector)
88
- if rule.collector.is_a?(Filter)
89
- pipeline ||= EventRouter::Pipeline.new
90
- pipeline.add_filter(rule.collector)
91
- else
92
- if pipeline
93
- pipeline.set_output(rule.collector)
94
- else
95
- # Use Output directly when filter is not matched
96
- pipeline = rule.collector
97
- end
98
- return pipeline
99
- end
100
- elsif !found_reemit && @reemit.included?(rule.collector)
101
- found_reemit = true
102
- end
103
- end
104
- }
105
-
106
- if pipeline
107
- # filter is matched but no match
108
- pipeline.set_output(@default_collector)
109
- pipeline
110
- else
111
- nil
112
- end
113
- end
114
- end
115
-
116
- # Almost same as V12EventRouter but it must call #emit_events instead of #emit.
117
- class V14EventRouter < V12EventRouter
118
- # copy from fluentd
119
- def emit_stream(tag, es)
120
- match(tag).emit_events(tag, es)
121
- rescue => e
122
- @emit_error_handler.handle_emits_error(tag, es, e)
123
- end
124
- end
125
-
126
- class V10EventRouter
127
- def initialize(reemit)
128
- @reemit = reemit
129
- @matches = Engine.matches
130
- @match_cache = {}
131
- end
132
-
133
- def emit_stream(tag, es)
134
- target = @match_cache[tag]
135
- unless target
136
- target = match(tag) || Fluent::EngineClass::NoMatchMatch.new
137
- @match_cache[tag] = target
138
- end
139
- target.emit(tag, es)
140
- end
141
-
142
- def match(tag)
143
- # We want to reemit messages to the **next** `<match>`
144
- found_reemit = false
145
- @matches.find do |m|
146
- if m.match(tag)
147
- if found_reemit && !@reemit.included?(m.output)
148
- true
149
- elsif !found_reemit && @reemit.included?(m.output)
150
- found_reemit = true
151
- false
152
- end
153
- end
154
- end
155
- end
156
- end
157
54
  end
158
55
  end
@@ -0,0 +1,35 @@
1
+ module Fluent
2
+ class ReemitOutput < Output
3
+ class V10EventRouter
4
+ def initialize(reemit)
5
+ @reemit = reemit
6
+ @matches = Engine.matches
7
+ @match_cache = {}
8
+ end
9
+
10
+ def emit_stream(tag, es)
11
+ target = @match_cache[tag]
12
+ unless target
13
+ target = match(tag) || Fluent::EngineClass::NoMatchMatch.new
14
+ @match_cache[tag] = target
15
+ end
16
+ target.emit(tag, es)
17
+ end
18
+
19
+ def match(tag)
20
+ # We want to reemit messages to the **next** `<match>`
21
+ found_reemit = false
22
+ @matches.find do |m|
23
+ if m.match(tag)
24
+ if found_reemit && !@reemit.included?(m.output)
25
+ true
26
+ elsif !found_reemit && @reemit.included?(m.output)
27
+ found_reemit = true
28
+ false
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,73 @@
1
+ require 'fluent/filter'
2
+ require 'fluent/event_router'
3
+
4
+ module Fluent
5
+ class ReemitOutput < Output
6
+ class V12EventRouter
7
+ def filter_class
8
+ ::Fluent::Filter
9
+ end
10
+
11
+ def initialize(reemit)
12
+ @reemit = reemit
13
+ @event_router = Engine.root_agent.event_router
14
+ @chain = @event_router.instance_variable_get(:@chain) # only v0.12
15
+ @emit_error_handler = @event_router.emit_error_handler
16
+ @match_rules = @event_router.instance_variable_get(:@match_rules)
17
+ @default_collector = @event_router.default_collector
18
+ # @match_cache = @event_router.match_cache
19
+ @match_cache = ::Fluent::EventRouter::MatchCache.new # need to use a different cache
20
+ end
21
+
22
+ # copy from fluentd
23
+ def emit_stream(tag, es)
24
+ match(tag).emit(tag, es, @chain)
25
+ rescue => e
26
+ @emit_error_handler.handle_emits_error(tag, es, e)
27
+ end
28
+
29
+ # copy from fluentd
30
+ def match(tag)
31
+ collector = @match_cache.get(tag) {
32
+ c = find(tag) || @default_collector
33
+ }
34
+ collector
35
+ end
36
+
37
+ def find(tag)
38
+ # We want to reemit messages to the **next** `<match>`
39
+ pipeline = nil
40
+ found_reemit = false
41
+ @match_rules.each_with_index { |rule, i|
42
+ # if rule.match?(tag) # this is the original
43
+ if rule.match?(tag)
44
+ if found_reemit && !@reemit.included?(rule.collector)
45
+ if rule.collector.is_a?(filter_class)
46
+ pipeline ||= ::Fluent::EventRouter::Pipeline.new
47
+ pipeline.add_filter(rule.collector)
48
+ else
49
+ if pipeline
50
+ pipeline.set_output(rule.collector)
51
+ else
52
+ # Use Output directly when filter is not matched
53
+ pipeline = rule.collector
54
+ end
55
+ return pipeline
56
+ end
57
+ elsif !found_reemit && @reemit.included?(rule.collector)
58
+ found_reemit = true
59
+ end
60
+ end
61
+ }
62
+
63
+ if pipeline
64
+ # filter is matched but no match
65
+ pipeline.set_output(@default_collector)
66
+ pipeline
67
+ else
68
+ nil
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,21 @@
1
+ require_relative 'v12_event_router'
2
+
3
+ module Fluent
4
+ class ReemitOutput < Output
5
+ # Almost same as V12EventRouter but
6
+ # (1) it must call #emit_events instead of #emit
7
+ # (2) Filter class is Fluent::Plugin::Filter instead of Fluent::Filter
8
+ class V14EventRouter < V12EventRouter
9
+ def filter_class
10
+ ::Fluent::Plugin::Filter
11
+ end
12
+
13
+ # copy from fluentd
14
+ def emit_stream(tag, es)
15
+ match(tag).emit_events(tag, es)
16
+ rescue => e
17
+ @emit_error_handler.handle_emits_error(tag, es, e)
18
+ end
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-reemit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
@@ -112,8 +112,12 @@ files:
112
112
  - Rakefile
113
113
  - examples/multiple_reemit.conf
114
114
  - examples/reemit.conf
115
+ - examples/reemit_filter.conf
115
116
  - fluent-plugin-reemit.gemspec
116
117
  - lib/fluent/plugin/out_reemit.rb
118
+ - lib/fluent/plugin/out_reemit/v10_event_router.rb
119
+ - lib/fluent/plugin/out_reemit/v12_event_router.rb
120
+ - lib/fluent/plugin/out_reemit/v14_event_router.rb
117
121
  - spec/out_reemit_spec.rb
118
122
  - spec/spec_helper.rb
119
123
  homepage: https://github.com/sonots/fluent-plugin-reemit
@@ -136,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
140
  version: '0'
137
141
  requirements: []
138
142
  rubyforge_project:
139
- rubygems_version: 2.6.13
143
+ rubygems_version: 2.5.1
140
144
  signing_key:
141
145
  specification_version: 4
142
146
  summary: Fluentd plugin to re-emit messages avoiding infinity match loop