fluent-plugin-pgjson 0.0.4 → 0.0.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a690b321412f2b0fe7dd2537e38c284b3d6753ee
4
+ data.tar.gz: abed844423a52e625fc1798231224df083b7e8ba
5
+ SHA512:
6
+ metadata.gz: 933ee51523a63e67430316e12b0c22119d51d1e20a659e6b909bfdd63e8e6852c38f56cf85f6737b7f436e4915570617db6bcba9dc3e44a88962b669410b2e8a
7
+ data.tar.gz: 9f9b7c82bcc74e005b03abe6e98b6e496821407a4adbc8a9314702cc090ac373b93ec7b03bd2195d88f17db8bbefe60c9c3edb1e997d18f66ab0eed0d3929df2
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Fluent::Plugin::PgJson
1
+ # Fluent::Plugin::PgJson, a plugin for [Fluentd](http://fluentd.org)
2
2
 
3
3
  Output Plugin for PostgreSQL Json Type.
4
4
 
@@ -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-pgjson"
6
- s.version = "0.0.4"
6
+ s.version = "0.0.5"
7
7
  s.authors = ["OKUNO Akihiro"]
8
8
  s.email = ["choplin.choplin@gmail.com"]
9
9
  s.homepage = "https://github.com/choplin/fluent-plugin-pgjson"
@@ -13,6 +13,7 @@ class PgJsonOutput < Fluent::BufferedOutput
13
13
  config_param :time_col , :string , :default => 'time'
14
14
  config_param :tag_col , :string , :default => 'tag'
15
15
  config_param :record_col , :string , :default => 'record'
16
+ config_param :messagepack, :bool , :default => false
16
17
 
17
18
  def initialize
18
19
  super
@@ -22,7 +23,6 @@ class PgJsonOutput < Fluent::BufferedOutput
22
23
 
23
24
  def configure(conf)
24
25
  super
25
- @stmt_name = 'insert'
26
26
  end
27
27
 
28
28
  def shutdown
@@ -40,56 +40,42 @@ class PgJsonOutput < Fluent::BufferedOutput
40
40
  def write(chunk)
41
41
  begin
42
42
  init_connection
43
- sql = build_sql(chunk)
44
- @conn.exec(sql)
45
- rescue
46
- begin
47
- @conn.close()
48
- rescue
43
+ @conn.exec("COPY #{@table} (#{@tag_col}, #{@time_col}, #{@record_col}) FROM STDIN WITH DELIMITER E'\\x01'")
44
+ chunk.msgpack_each do |tag, time, record|
45
+ @conn.put_copy_data "#{tag}\x01#{Time.at(time).to_s}\x01#{record_value(record)}\n"
49
46
  end
50
-
51
- @conn = nil
52
- raise
47
+ @conn.put_copy_end
48
+ rescue
49
+ @conn.close()
50
+ @conn = nil
51
+ raise "failed to send data to postgres: #$!"
53
52
  end
54
53
  end
55
54
 
56
55
  private
57
56
  def init_connection
58
57
  if @conn.nil?
59
- $log.debug "Connecting to PostgreSQL server #{@host}:#{@port}, database #{@database}..."
58
+ $log.debug "connecting to PostgreSQL server #{@host}:#{@port}, database #{@database}..."
60
59
 
61
60
  begin
62
61
  @conn = PGconn.new(:dbname => @database, :host => @host, :port => @port, :sslmode => @sslmode, :user => @user, :password => @password)
63
62
  @conn.setnonblocking(true)
64
63
  rescue
65
64
  if ! @conn.nil?
66
- begin
67
- @conn.close()
68
- rescue
69
- end
70
-
71
- @conn - nil
65
+ @conn.close()
66
+ @conn = nil
72
67
  end
73
-
74
- raise
68
+ raise "failed to initialize connection: #$!"
75
69
  end
76
70
  end
77
71
  end
78
72
 
79
- def build_sql(chunk)
80
- values = build_values(chunk)
81
- sql =<<"SQL"
82
- INSERT INTO #{@table} (#{@tag_col}, #{@time_col}, #{@record_col})
83
- VALUES #{values};
84
- SQL
85
- end
86
-
87
- def build_values(chunk)
88
- tmp = []
89
- chunk.msgpack_each do |tag, time, record|
90
- tmp << ("("+[tag, Time.at(time), record.to_json].map{|s| @conn.escape_literal(s.to_s)}.join(',')+")")
73
+ def record_value(record)
74
+ if @msgpack
75
+ "\\#{@conn.escape_bytea(record.to_msgpack)}"
76
+ else
77
+ record.to_json
91
78
  end
92
- tmp.join(',')
93
79
  end
94
80
  end
95
81
 
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-pgjson
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - OKUNO Akihiro
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-08-22 00:00:00.000000000 Z
11
+ date: 2014-11-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: fluentd
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: pg
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: ''
@@ -50,7 +45,7 @@ executables: []
50
45
  extensions: []
51
46
  extra_rdoc_files: []
52
47
  files:
53
- - .gitignore
48
+ - ".gitignore"
54
49
  - Gemfile
55
50
  - LICENSE
56
51
  - README.md
@@ -62,29 +57,27 @@ files:
62
57
  - test/plugin/test_out.rb
63
58
  homepage: https://github.com/choplin/fluent-plugin-pgjson
64
59
  licenses: []
60
+ metadata: {}
65
61
  post_install_message:
66
62
  rdoc_options: []
67
63
  require_paths:
68
64
  - lib
69
65
  required_ruby_version: !ruby/object:Gem::Requirement
70
- none: false
71
66
  requirements:
72
- - - ! '>='
67
+ - - ">="
73
68
  - !ruby/object:Gem::Version
74
69
  version: '0'
75
70
  required_rubygems_version: !ruby/object:Gem::Requirement
76
- none: false
77
71
  requirements:
78
- - - ! '>='
72
+ - - ">="
79
73
  - !ruby/object:Gem::Version
80
74
  version: '0'
81
75
  requirements: []
82
76
  rubyforge_project:
83
- rubygems_version: 1.8.23
77
+ rubygems_version: 2.2.2
84
78
  signing_key:
85
- specification_version: 3
79
+ specification_version: 4
86
80
  summary: ''
87
81
  test_files:
88
82
  - test/helper.rb
89
83
  - test/plugin/test_out.rb
90
- has_rdoc: