fluent-plugin-map 0.0.3.1 → 0.0.4

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.
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "fluent-plugin-map"
6
- s.version = "0.0.3.1"
6
+ s.version = "0.0.4"
7
7
  s.authors = ["Kohei Tomita"]
8
8
  s.email = ["tommy.fmale@gmail.com"]
9
9
  s.homepage = "https://github.com/tomity/fluent-plugin-map"
@@ -9,6 +9,7 @@ module Fluent
9
9
  config_param :time, :string, :default => nil
10
10
  config_param :record, :string, :default => nil
11
11
  config_param :multi, :bool, :default => false
12
+ config_param :timeout, :time, :default => 1
12
13
 
13
14
  def configure(conf)
14
15
  super
@@ -27,16 +28,53 @@ module Fluent
27
28
 
28
29
  def emit(tag, es, chain)
29
30
  begin
30
- tuples = []
31
- es.each {|time, record|
31
+ tag_output_es = do_map(tag, es)
32
+ tag_output_es.each_pair do |tag, output_es|
33
+ Fluent::Engine::emit_stream(tag, output_es)
34
+ end
35
+ chain.next
36
+ tag_output_es
37
+ rescue SyntaxError => e
38
+ chain.next
39
+ $log.error "map command is syntax error: #{@map}"
40
+ e #for test
41
+ end
42
+ end
43
+
44
+ def do_map(tag, es)
45
+ tuples = if @multi
46
+ generate_tuples_multi(tag, es)
47
+ else
48
+ generate_tuples_single(tag, es)
49
+ end
50
+ tag_output_es = Hash.new{|h, key| h[key] = MultiEventStream::new}
51
+ tuples.each do |tag, time, record|
52
+ if time == nil || record == nil
53
+ raise SyntaxError.new
54
+ end
55
+ tag_output_es[tag].add(time, record)
56
+ $log.trace { [tag, time, record].inspect }
57
+ end
58
+ tag_output_es
59
+ end
60
+
61
+ def generate_tuples_multi(tag, es)
62
+ tuples = []
63
+ es.each {|time, record|
64
+ new_tuple = eval(@map)
65
+ tuples.concat new_tuple
66
+ }
67
+ tuples
68
+ end
69
+
70
+ def generate_tuples_single(tag, es)
71
+ tuples = []
72
+ es.each {|time, record|
73
+ timeout_block(tag, time, record){
32
74
  case @mode
33
75
  when "tuple"
34
76
  new_tuple = eval(@map)
35
- if @multi
36
- tuples.concat new_tuple
37
- else
38
- tuples << new_tuple
39
- end
77
+ tuples << new_tuple
40
78
  when "each"
41
79
  new_tag = eval(@tag)
42
80
  new_time = eval(@time)
@@ -44,19 +82,17 @@ module Fluent
44
82
  tuples << [new_tag, new_time, new_record]
45
83
  end
46
84
  }
47
- tuples.each do |tag, time, record|
48
- if time == nil or record == nil
49
- raise SyntaxError.new
50
- end
51
- $log.trace { [tag, time, record].inspect }
52
- Fluent::Engine::emit(tag, time, record)
53
- end
54
- chain.next
55
- tuples
56
- rescue SyntaxError => e
57
- chain.next
58
- $log.error "map command is syntax error: #{@map}"
59
- e #for test
85
+ }
86
+ tuples
87
+ end
88
+
89
+ def timeout_block(tag, time, record)
90
+ begin
91
+ Timeout.timeout(@timeout){
92
+ yield
93
+ }
94
+ rescue Timeout::Error
95
+ $log.error {"Timeout: #{Time.at(time)} #{tag} #{record.inspect}"}
60
96
  end
61
97
  end
62
98
  end
@@ -173,4 +173,22 @@ class MapOutputTest < Test::Unit::TestCase
173
173
  ], tag
174
174
  }
175
175
  end
176
+
177
+ def test_timeout
178
+ tag = 'tag'
179
+ time = Time.local(2012, 10, 10, 10, 10, 10)
180
+ record = {'code' => '300'}
181
+
182
+ d1 = create_driver %[
183
+ key "newtag"
184
+ time sleep 10
185
+ record record
186
+ timeout 1s
187
+ ], tag
188
+ d1.run do
189
+ d1.emit(record, time)
190
+ end
191
+ emits = d1.emits
192
+ assert_equal 0, emits.length
193
+ end
176
194
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-map
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.1
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-11 00:00:00.000000000Z
12
+ date: 2012-08-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70202612149300 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 0.9.2.2
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70202612149300
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.9.2.2
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: fluentd
27
- requirement: &70202612148700 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,7 +37,12 @@ dependencies:
32
37
  version: 0.10.24
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70202612148700
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.10.24
36
46
  description: ! 'fluent-plugin-map is the non-buffered plugin that can convert an event
37
47
  log to different event log(s). '
38
48
  email:
@@ -69,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
79
  version: '0'
70
80
  requirements: []
71
81
  rubyforge_project: fluent-plugin-map
72
- rubygems_version: 1.8.17
82
+ rubygems_version: 1.8.24
73
83
  signing_key:
74
84
  specification_version: 3
75
85
  summary: fluent-plugin-map is the non-buffered plugin that can convert an event log