fluent-plugin-td 0.10.0 → 0.10.1

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.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ pkg/*
data/ChangeLog CHANGED
@@ -1,4 +1,10 @@
1
1
 
2
+ Release 0.10.1 - 2011/11/11
3
+
4
+ * Validate database name and table name on emit
5
+ * Include more information on error message
6
+
7
+
2
8
  Release 0.10.0 - 2011/10/16
3
9
 
4
10
  * Use buf_file by default
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/Rakefile CHANGED
@@ -1,58 +1,14 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'rake/clean'
4
1
 
5
- begin
6
- require 'jeweler'
7
- Jeweler::Tasks.new do |gemspec|
8
- gemspec.name = "fluent-plugin-td"
9
- gemspec.summary = "Treasure Data plugin for Fluent event collector"
10
- gemspec.author = "Sadayuki Furuhashi"
11
- #gemspec.email = "frsyuki@gmail.com"
12
- #gemspec.homepage = "http://fluent.github.com/"
13
- gemspec.has_rdoc = false
14
- gemspec.require_paths = ["lib"]
15
- gemspec.add_dependency "fluentd", "~> 0.10.0"
16
- gemspec.add_dependency "td-client", "~> 0.8.0"
17
- gemspec.test_files = Dir["test/**/*.rb"]
18
- gemspec.files = Dir["bin/**/*", "lib/**/*", "test/**/*.rb"] +
19
- %w[example.conf VERSION AUTHORS Rakefile fluent-plugin-td.gemspec]
20
- gemspec.executables = []
21
- end
22
- Jeweler::GemcutterTasks.new
23
- rescue LoadError
24
- puts "Jeweler not available. Install it with: gem install jeweler"
25
- end
2
+ require 'bundler'
3
+ Bundler::GemHelper.install_tasks
26
4
 
27
- Rake::TestTask.new(:test) do |t|
28
- t.test_files = Dir['test/*_test.rb']
29
- t.ruby_opts = ['-rubygems'] if defined? Gem
30
- t.ruby_opts << '-I.'
31
- end
32
-
33
- #VERSION_FILE = "lib/fluent/version.rb"
34
- #
35
- #file VERSION_FILE => ["VERSION"] do |t|
36
- # version = File.read("VERSION").strip
37
- # File.open(VERSION_FILE, "w") {|f|
38
- # f.write <<EOF
39
- #module Fluent
40
- #
41
- #VERSION = '#{version}'
42
- #
43
- #end
44
- #EOF
45
- # }
46
- #end
47
- #
48
- #task :default => [VERSION_FILE, :build]
5
+ require 'rake/testtask'
49
6
 
50
- Rake::TestTask.new(:test) do |t|
51
- t.libs << "test"
52
- t.test_files = Dir["test/*.rb"].sort
53
- t.verbose = true
54
- #t.warning = true
7
+ Rake::TestTask.new(:test) do |test|
8
+ test.libs << 'lib' << 'test'
9
+ test.test_files = FileList['test/*.rb']
10
+ test.verbose = true
55
11
  end
56
12
 
57
- task :default => [:build, :gemspec]
13
+ task :default => [:build]
58
14
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.0
1
+ 0.10.1
@@ -1,50 +1,21 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
+ $:.push File.expand_path('../lib', __FILE__)
5
3
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{fluent-plugin-td}
8
- s.version = "0.10.0"
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "fluent-plugin-td"
6
+ gem.description = "Treasure Data output plugin for Fluent event collector"
7
+ #gem.homepage = "http://fluentd.org/"
8
+ gem.summary = gem.description
9
+ gem.version = File.read("VERSION").strip
10
+ gem.authors = ["Sadayuki Furuhashi"]
11
+ #gem.email = "frsyuki@gmail.com"
12
+ gem.has_rdoc = false
13
+ #gem.platform = Gem::Platform::RUBY
14
+ gem.files = `git ls-files`.split("\n")
15
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ gem.require_paths = ['lib']
9
18
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Sadayuki Furuhashi"]
12
- s.date = %q{2011-10-16}
13
- s.extra_rdoc_files = [
14
- "ChangeLog",
15
- "README.rdoc"
16
- ]
17
- s.files = [
18
- "AUTHORS",
19
- "Rakefile",
20
- "VERSION",
21
- "example.conf",
22
- "fluent-plugin-td.gemspec",
23
- "lib/fluent/plugin/out_tdlog.rb",
24
- "test/out_tdlog.rb"
25
- ]
26
- s.rdoc_options = ["--charset=UTF-8"]
27
- s.require_paths = ["lib"]
28
- s.rubygems_version = %q{1.3.7}
29
- s.summary = %q{Treasure Data plugin for Fluent event collector}
30
- s.test_files = [
31
- "test/out_tdlog.rb"
32
- ]
33
-
34
- if s.respond_to? :specification_version then
35
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
36
- s.specification_version = 3
37
-
38
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
39
- s.add_runtime_dependency(%q<fluentd>, ["~> 0.10.0"])
40
- s.add_runtime_dependency(%q<td-client>, ["~> 0.8.0"])
41
- else
42
- s.add_dependency(%q<fluentd>, ["~> 0.10.0"])
43
- s.add_dependency(%q<td-client>, ["~> 0.8.0"])
44
- end
45
- else
46
- s.add_dependency(%q<fluentd>, ["~> 0.10.0"])
47
- s.add_dependency(%q<td-client>, ["~> 0.8.0"])
48
- end
19
+ gem.add_dependency "fluentd", "~> 0.10.0"
20
+ gem.add_dependency "td-client", "~> 0.8.4"
49
21
  end
50
-
@@ -67,11 +67,15 @@ class TreasureDataLogOutput < BufferedOutput
67
67
  if !database || !table
68
68
  raise ConfigError, "'database' and 'table' parameter are required on tdlog output"
69
69
  end
70
- if !validate_name(database)
71
- raise ConfigError, "Invalid database name #{database.inspect}: #{conf}"
70
+ begin
71
+ TreasureData::API.validate_database_name(database)
72
+ rescue
73
+ raise ConfigError, "Invalid database name #{database.inspect}: #{$!}: #{conf}"
72
74
  end
73
- if !validate_name(table)
74
- raise ConfigError, "Invalid table name #{table.inspect}: #{conf}"
75
+ begin
76
+ TreasureData::API.validate_table_name(table)
77
+ rescue
78
+ raise ConfigError, "Invalid table name #{table.inspect}: #{$!}: #{conf}"
75
79
  end
76
80
  @key = "#{database}.#{table}"
77
81
  end
@@ -90,10 +94,8 @@ class TreasureDataLogOutput < BufferedOutput
90
94
  key = @key
91
95
  else
92
96
  database, table = tag.split('.')[-2,2]
93
- if !validate_name(database) || !validate_name(table)
94
- $log.debug { "Invalid tag #{tag.inspect}" }
95
- return
96
- end
97
+ TreasureData::API.validate_database_name(database)
98
+ TreasureData::API.validate_table_name(table)
97
99
  key = "#{database}.#{table}"
98
100
  end
99
101
 
@@ -104,10 +106,6 @@ class TreasureDataLogOutput < BufferedOutput
104
106
  super(tag, es, chain, key)
105
107
  end
106
108
 
107
- def validate_name(name)
108
- true
109
- end
110
-
111
109
  def format_stream(tag, es)
112
110
  out = ''
113
111
  off = out.bytesize
@@ -132,10 +130,6 @@ class TreasureDataLogOutput < BufferedOutput
132
130
 
133
131
  def write(chunk)
134
132
  database, table = chunk.key.split('.',2)
135
- if !validate_name(database) || !validate_name(table)
136
- $log.error "Invalid key name #{chunk.key.inspect}"
137
- return
138
- end
139
133
 
140
134
  f = Tempfile.new("tdlog-", @tmpdir)
141
135
  w = Zlib::GzipWriter.new(f)
@@ -157,20 +151,28 @@ class TreasureDataLogOutput < BufferedOutput
157
151
  $log.trace { "uploading logs to Treasure Data database=#{database} table=#{table} (#{size}bytes)" }
158
152
 
159
153
  begin
160
- @client.import(database, table, "msgpack.gz", io, size)
161
- rescue TreasureData::NotFoundError
162
- unless @auto_create_table
163
- raise $!
164
- end
165
- $log.info "Creating table #{database}.#{table} on TreasureData"
166
154
  begin
167
- @client.create_log_table(database, table)
155
+ start = Time.now
156
+ @client.import(database, table, "msgpack.gz", io, size)
168
157
  rescue TreasureData::NotFoundError
169
- @client.create_database(database)
170
- @client.create_log_table(database, table)
158
+ unless @auto_create_table
159
+ raise $!
160
+ end
161
+ $log.info "Creating table #{database}.#{table} on TreasureData"
162
+ begin
163
+ @client.create_log_table(database, table)
164
+ rescue TreasureData::NotFoundError
165
+ @client.create_database(database)
166
+ @client.create_log_table(database, table)
167
+ end
168
+ io.pos = 0
169
+ retry
171
170
  end
172
- io.pos = 0
173
- retry
171
+ rescue => e
172
+ elapsed = Time.now - start
173
+ ne = RuntimeError.new("Failed to upload to TreasureData: #{$!} (#{size} bytes; #{elapsed} seconds)")
174
+ ne.set_backtrace(e.backtrace)
175
+ raise ne
174
176
  end
175
177
  end
176
178
 
data/test/out_tdlog.rb CHANGED
@@ -33,5 +33,22 @@ class TreasureDataLogOutputTest < Test::Unit::TestCase
33
33
  d.emit({"a"=>2}, time)
34
34
  d.run
35
35
  end
36
+
37
+ def test_invalid_name
38
+ d = create_driver
39
+ d.instance.start
40
+
41
+ es = Fluent::OneEventStream.new(Time.now.to_i, {})
42
+ chain = Fluent::NullOutputChain.instance
43
+ assert_raise(RuntimeError) do
44
+ d.instance.emit("test.invalid-name", es, chain)
45
+ end
46
+ assert_raise(RuntimeError) do
47
+ d.instance.emit("empty", es, chain)
48
+ end
49
+ assert_raise(RuntimeError) do
50
+ d.instance.emit("", es, chain)
51
+ end
52
+ end
36
53
  end
37
54
 
metadata CHANGED
@@ -1,107 +1,84 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-td
3
- version: !ruby/object:Gem::Version
4
- hash: 55
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 10
9
- - 0
10
- version: 0.10.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.1
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Sadayuki Furuhashi
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-10-16 00:00:00 +09:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-10 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: fluentd
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70114372869080 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
18
+ requirements:
27
19
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 55
30
- segments:
31
- - 0
32
- - 10
33
- - 0
20
+ - !ruby/object:Gem::Version
34
21
  version: 0.10.0
35
22
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: td-client
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70114372869080
25
+ - !ruby/object:Gem::Dependency
26
+ name: td-client
27
+ requirement: &70114372868600 !ruby/object:Gem::Requirement
41
28
  none: false
42
- requirements:
29
+ requirements:
43
30
  - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 63
46
- segments:
47
- - 0
48
- - 8
49
- - 0
50
- version: 0.8.0
31
+ - !ruby/object:Gem::Version
32
+ version: 0.8.4
51
33
  type: :runtime
52
- version_requirements: *id002
53
- description:
34
+ prerelease: false
35
+ version_requirements: *70114372868600
36
+ description: Treasure Data output plugin for Fluent event collector
54
37
  email:
55
38
  executables: []
56
-
57
39
  extensions: []
58
-
59
- extra_rdoc_files:
40
+ extra_rdoc_files: []
41
+ files:
42
+ - .gitignore
43
+ - AUTHORS
60
44
  - ChangeLog
45
+ - Gemfile
61
46
  - README.rdoc
62
- files:
63
- - AUTHORS
64
47
  - Rakefile
65
48
  - VERSION
66
49
  - example.conf
67
50
  - fluent-plugin-td.gemspec
68
51
  - lib/fluent/plugin/out_tdlog.rb
69
52
  - test/out_tdlog.rb
70
- - ChangeLog
71
- - README.rdoc
72
- has_rdoc: true
73
53
  homepage:
74
54
  licenses: []
75
-
76
55
  post_install_message:
77
- rdoc_options:
78
- - --charset=UTF-8
79
- require_paths:
56
+ rdoc_options: []
57
+ require_paths:
80
58
  - lib
81
- required_ruby_version: !ruby/object:Gem::Requirement
59
+ required_ruby_version: !ruby/object:Gem::Requirement
82
60
  none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 3
87
- segments:
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ segments:
88
66
  - 0
89
- version: "0"
90
- required_rubygems_version: !ruby/object:Gem::Requirement
67
+ hash: -747294659517590458
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
69
  none: false
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- hash: 3
96
- segments:
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ segments:
97
75
  - 0
98
- version: "0"
76
+ hash: -747294659517590458
99
77
  requirements: []
100
-
101
78
  rubyforge_project:
102
- rubygems_version: 1.3.7
79
+ rubygems_version: 1.8.10
103
80
  signing_key:
104
81
  specification_version: 3
105
- summary: Treasure Data plugin for Fluent event collector
106
- test_files:
82
+ summary: Treasure Data output plugin for Fluent event collector
83
+ test_files:
107
84
  - test/out_tdlog.rb