fluent-plugin-pghstore 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f54a1b343fc8ac9594d33367d1fa002037ae3cc
4
- data.tar.gz: 97ee47a8101b4e163c81f2cfe8eef14981f201b0
3
+ metadata.gz: b3e04d208d0f647303315742d3a6b682334d143d
4
+ data.tar.gz: 6b0891e377cb9d1289479c4f4c247ebc7bad4438
5
5
  SHA512:
6
- metadata.gz: 8173f766585f15570cf2f58b8de5ce08c72d9015e7d6d91123afbf230b7a77ad882a31ff602ab1c0006db9d79eb019e3aa4eddf7f2838375174b761b2a6ca92f
7
- data.tar.gz: d8f007ddc5e9b931b51465c149a394f44047b6cc9771334f985dfa9a5a9a6a0fa65c49690296cdfcfe772d8444c8cc84faf4f4590bd26e9968cff09d5960e932
6
+ metadata.gz: dca3130b73a82f1f2c23583641735af81bac2a4f3079a6f3c568062148a0d796d0732f1497f81694b2142f0c11cfdd0fc9aedd2deb56436602de2dd7417c2203
7
+ data.tar.gz: da3be89d0beff7901de981ac2983afe4134c34fc38f90cf48df4edbe9788c2d7737797614a901a191cd7e396a6367267984c18f4a696f964c2fc76dd1f11e076
@@ -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-pghstore"
6
- s.version = "0.2.6"
6
+ s.version = "0.2.7"
7
7
  s.authors = ["WAKAYAMA Shirou"]
8
8
  s.email = ["shirou.faw@gmail.com"]
9
9
  s.homepage = "https://github.com/shirou/fluent-plugin-pghstore"
@@ -21,8 +21,9 @@ Gem::Specification.new do |s|
21
21
  # specify any dependencies here; for example:
22
22
  s.add_development_dependency "rspec", "~> 3.2.0"
23
23
  # s.add_runtime_dependency "rest-client"
24
- s.add_development_dependency "fluentd", "~> 0.12.5"
24
+ s.add_development_dependency "fluentd", [">= 0.12.5", "< 2"]
25
25
  s.add_development_dependency "pg", "~> 0.18.1"
26
+ s.add_development_dependency "rake", ">= 11.0"
26
27
  s.add_development_dependency "test-unit", "~> 3.1.0"
27
28
  # s.add_runtime_dependency "fluentd", "~> 0.12.5"
28
29
  # s.add_runtime_dependency "pg", "~> 0.18.1"
@@ -13,6 +13,7 @@ class Fluent::PgHStoreOutput < Fluent::BufferedOutput
13
13
  def initialize
14
14
  super
15
15
  require 'pg'
16
+ @conn = nil
16
17
  end
17
18
 
18
19
  def start
@@ -28,7 +29,7 @@ class Fluent::PgHStoreOutput < Fluent::BufferedOutput
28
29
  conn.close()
29
30
  end
30
31
  end
31
-
32
+
32
33
  def format(tag, time, record)
33
34
  [tag, time, record].to_msgpack
34
35
  end
@@ -41,7 +42,7 @@ class Fluent::PgHStoreOutput < Fluent::BufferedOutput
41
42
  sql = generate_sql(conn, tag, time_str, record)
42
43
  begin
43
44
  conn.exec(sql)
44
- rescue PGError => e
45
+ rescue PGError => e
45
46
  $log.error "PGError: " + e.message # dropped if error
46
47
  end
47
48
  }
@@ -49,6 +50,18 @@ class Fluent::PgHStoreOutput < Fluent::BufferedOutput
49
50
  conn.close()
50
51
  end
51
52
 
53
+ # for tests.
54
+ def table_schema(tablename)
55
+ sql =<<"SQL"
56
+ CREATE TABLE #{tablename} (
57
+ tag TEXT[],
58
+ time TIMESTAMP WITH TIME ZONE,
59
+ record HSTORE
60
+ );
61
+ SQL
62
+ sql
63
+ end
64
+
52
65
  private
53
66
 
54
67
  def generate_sql(conn, tag, time, record)
@@ -105,13 +118,7 @@ SQL
105
118
  end
106
119
 
107
120
  def create_table(tablename)
108
- sql =<<"SQL"
109
- CREATE TABLE #{tablename} (
110
- tag TEXT[],
111
- time TIMESTAMP WITH TIME ZONE,
112
- record HSTORE
113
- );
114
- SQL
121
+ sql = table_schema(tablename)
115
122
 
116
123
  sql += @table_option if @table_option
117
124
 
@@ -119,7 +126,7 @@ SQL
119
126
  raise "Could not connect the database at create_table. abort." if conn == nil
120
127
 
121
128
  begin
122
- conn.exec(sql)
129
+ conn.exec(sql)
123
130
  rescue PGError => e
124
131
  $log.error "Error at create_table:" + e.message
125
132
  $log.error "SQL:" + sql
@@ -5,11 +5,17 @@ class PGHStoreOutputTest < Test::Unit::TestCase
5
5
  Fluent::Test.setup
6
6
  end
7
7
 
8
+ HOST = "localhost"
9
+ PORT = 5432
10
+ DATABASE = "postgres"
11
+ TABLE = "testtable"
12
+ USER = ENV["PSQL_USER"] || "testuser"
13
+ PASSWORD = ENV["PSQL_PASSWORD"] || "testpassword"
8
14
  CONFIG = %[
9
- database "testdb"
10
- table "testtable"
11
- user "testuser"
12
- password "testpassword"
15
+ database #{DATABASE}
16
+ table #{TABLE}
17
+ user #{USER}
18
+ password #{PASSWORD}
13
19
  ]
14
20
 
15
21
  def create_driver(conf = CONFIG, tag='test.input')
@@ -17,28 +23,90 @@ class PGHStoreOutputTest < Test::Unit::TestCase
17
23
  end
18
24
 
19
25
  def test_configure
26
+ d = create_driver
27
+
28
+ assert_equal DATABASE, d.instance.database
29
+ assert_equal HOST, d.instance.host
30
+ assert_equal PORT, d.instance.port
31
+ assert_equal USER, d.instance.user
32
+ assert_equal PASSWORD, d.instance.password
20
33
  end
21
34
 
22
35
  def test_format
23
36
  d = create_driver
37
+ with_connection(d) do |_conn|
24
38
 
25
- # time = Time.parse("2011-01-02 13:14:15 UTC").to_i
26
- # d.emit({"a"=>1}, time)
27
- # d.emit({"a"=>2}, time)
39
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
40
+ d.emit({"a"=>1}, time)
41
+ d.emit({"a"=>2}, time)
28
42
 
29
- # d.expect_format %[2011-01-02T13:14:15Z\ttest\t{"a":1}\n]
30
- # d.expect_format %[2011-01-02T13:14:15Z\ttest\t{"a":2}\n]
43
+ d.expect_format ['test.input', time, {"a"=>1}].to_msgpack
44
+ d.expect_format ['test.input', time, {"a"=>2}].to_msgpack
31
45
 
32
- # d.run
46
+ d.run
47
+ end
33
48
  end
34
49
 
35
50
  def test_write
36
51
  d = create_driver
52
+ with_connection(d) do |conn|
53
+ time = Time.parse("2011-01-02 13:14:15 UTC").to_i
54
+ d.emit({"a"=>1}, time)
55
+ d.emit({"a"=>2}, time)
56
+ d.run
57
+
58
+ wait_data(conn)
59
+
60
+ res = conn.exec("select * from #{TABLE}")[0]
61
+ assert_equal "{test,input}", res["tag"]
62
+ assert_equal Time.at(time), Time.parse(res["time"])
63
+ assert_equal "\"a\"=>\"1\"", res["record"]
64
+ end
65
+ end
66
+
67
+ def ensure_connection
68
+ conn = nil
69
+ assert_nothing_raised do
70
+ conn = PGconn.new(:dbname => DATABASE, :host => HOST, :port => PORT, :user => USER, :password => PASSWORD)
71
+ end
72
+ conn
73
+ end
37
74
 
38
- # time = Time.parse("2011-01-02 13:14:15 UTC").to_i
39
- # d.emit({"a"=>1}, time)
40
- # d.emit({"a"=>2}, time)
75
+ def with_connection(driver, &block)
76
+ conn = ensure_connection
77
+ register_hstore(conn) rescue nil # suppress Exception
78
+ create_test_table(driver, conn)
79
+ begin
80
+ block.call(conn)
81
+ ensure
82
+ drop_test_table(conn)
83
+ unregister_hstore(conn)
84
+ conn.close
85
+ end
86
+ end
41
87
 
88
+ def register_hstore(conn)
89
+ conn.exec("CREATE EXTENSION hstore;")
42
90
  end
43
91
 
92
+ def unregister_hstore(conn)
93
+ conn.exec("DROP EXTENSION hstore;")
94
+ end
95
+
96
+ def create_test_table(driver, conn)
97
+ conn.exec(driver.instance.table_schema("#{TABLE}"))
98
+ end
99
+
100
+ def drop_test_table(conn)
101
+ conn.exec("DROP TABLE #{TABLE}")
102
+ end
103
+
104
+ def wait_data(conn)
105
+ 10.times do
106
+ res = conn.exec "select count(*) from #{TABLE}"
107
+ return if res.getvalue(0,0).to_i > 0
108
+ sleep 0.2
109
+ end
110
+ raise "Inserting records have not been finished correctly"
111
+ end
44
112
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-pghstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - WAKAYAMA Shirou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-24 00:00:00.000000000 Z
11
+ date: 2017-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -28,16 +28,22 @@ dependencies:
28
28
  name: fluentd
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.12.5
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '2'
34
37
  type: :development
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: 0.12.5
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '2'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: pg
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +58,20 @@ dependencies:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
60
  version: 0.18.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '11.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '11.0'
55
75
  - !ruby/object:Gem::Dependency
56
76
  name: test-unit
57
77
  requirement: !ruby/object:Gem::Requirement