fluent-plugin-sql 2.2.0 → 2.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02d185dee05a4611437c046d0d279fb7299a874dd6c46a76d174a03c983b2f16
4
- data.tar.gz: 71708e3128e2ec604ccccaf4ca7aeeb13c20853f2cdf0f72bbf4264125706ea2
3
+ metadata.gz: faedf22555693658bbb43e81ed55ec147f00196e883b2f53fe42cb3617860440
4
+ data.tar.gz: df4fa7f20a2bc8e779b6ed1fc80f42b70bc2be1e2e990c0ac9c9916a2ec02570
5
5
  SHA512:
6
- metadata.gz: 94aff71abbd5fea54eca7b2d9534fe2615992586add9f2ced691770a21aae95e45c4276ed6b076c5505eca634d3ff82b1eb321a13959021791704fde88691533
7
- data.tar.gz: ad2d4fe75de3032775ef25c6d6c5062a43ec01fc715a9a4e59371022975ae421c9e957282da0c8777a159f873b04280f09bd9aa34e2dc3fd512ac54136599ed6
6
+ metadata.gz: e5176135b712ac70afb866fe5f5139ddbc49f76c0180e28ed8a5cb37be5b109d0639a2b62963c0586119f6b0f55c78eb59501cb459af2afae9c1ee9a57edba15
7
+ data.tar.gz: e6644d47e0115f3030d42e089dbce1e70e964dc6b3c549e6f69a8aad18962ad4592685224de28554a4be1e1e6bb4da6917e06f496ab981eea735983755c39464
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: 'github-actions'
4
+ directory: '/'
5
+ schedule:
6
+ interval: 'weekly'
@@ -0,0 +1,45 @@
1
+ name: Test with Ruby head
2
+ on:
3
+ schedule:
4
+ - cron: '11 23 * * 0'
5
+ workflow_dispatch:
6
+
7
+ jobs:
8
+ build:
9
+ runs-on: ${{ matrix.os }}
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ ruby: [ 'head' ]
14
+ postgres: [ '16', '15', '14', '13', '12' ]
15
+ os:
16
+ - ubuntu-latest
17
+ services:
18
+ postgres:
19
+ image: postgres:${{ matrix.postgres }}
20
+ ports:
21
+ - 5432:5432
22
+ env:
23
+ POSTGRES_USER: postgres
24
+ POSTGRES_PASSWORD: password
25
+ POSTGRES_DB: test
26
+ options: >-
27
+ --health-cmd pg_isready
28
+ --health-interval 10s
29
+ --health-timeout 5s
30
+ --health-retries 5
31
+ name: Ruby ${{ matrix.ruby }} with PostgreSQL ${{ matrix.postgres }} unit testing on ${{ matrix.os }}
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ - uses: ruby/setup-ruby@v1
35
+ with:
36
+ ruby-version: ${{ matrix.ruby }}
37
+ bundler-cache: true
38
+ - name: prepare database
39
+ env:
40
+ PGPASSWORD: password
41
+ run: |
42
+ psql -h localhost -p 5432 -U postgres -c "CREATE ROLE fluentd WITH LOGIN ENCRYPTED PASSWORD 'fluentd';"
43
+ psql -h localhost -p 5432 -U postgres -c "CREATE DATABASE fluentd_test OWNER fluentd;"
44
+ - name: unit testing
45
+ run: bundle exec rake test
@@ -1,41 +1,20 @@
1
- name: linux
1
+ name: Test
2
2
  on:
3
- - push
4
- - pull_request
3
+ push:
4
+ branches: [master]
5
+ pull_request:
6
+ branches: [master]
5
7
 
6
8
  jobs:
7
9
  build:
8
10
  runs-on: ${{ matrix.os }}
9
- continue-on-error: ${{ matrix.experimental }}
10
11
  strategy:
11
12
  fail-fast: false
12
13
  matrix:
13
- ruby: [ '2.5', '2.6', '2.7', '3.0' ]
14
- postgres: [ '9', '10', '11', '12', '13' ]
14
+ ruby: [ '3.3', '3.2', '3.1', '3.0', '2.7' ]
15
+ postgres: [ '16', '15', '14', '13', '12' ]
15
16
  os:
16
17
  - ubuntu-latest
17
- experimental: [false]
18
- include:
19
- - ruby: head
20
- postgres: '9'
21
- os: ubuntu-latest
22
- experimental: true
23
- - ruby: head
24
- postgres: '10'
25
- os: ubuntu-latest
26
- experimental: true
27
- - ruby: head
28
- postgres: '11'
29
- os: ubuntu-latest
30
- experimental: true
31
- - ruby: head
32
- postgres: '12'
33
- os: ubuntu-latest
34
- experimental: true
35
- - ruby: head
36
- postgres: '13'
37
- os: ubuntu-latest
38
- experimental: true
39
18
  services:
40
19
  postgres:
41
20
  image: postgres:${{ matrix.postgres }}
@@ -52,10 +31,11 @@ jobs:
52
31
  --health-retries 5
53
32
  name: Ruby ${{ matrix.ruby }} with PostgreSQL ${{ matrix.postgres }} unit testing on ${{ matrix.os }}
54
33
  steps:
55
- - uses: actions/checkout@v2
34
+ - uses: actions/checkout@v4
56
35
  - uses: ruby/setup-ruby@v1
57
36
  with:
58
37
  ruby-version: ${{ matrix.ruby }}
38
+ bundler-cache: true
59
39
  - name: prepare database
60
40
  env:
61
41
  PGPASSWORD: password
@@ -63,7 +43,4 @@ jobs:
63
43
  psql -h localhost -p 5432 -U postgres -c "CREATE ROLE fluentd WITH LOGIN ENCRYPTED PASSWORD 'fluentd';"
64
44
  psql -h localhost -p 5432 -U postgres -c "CREATE DATABASE fluentd_test OWNER fluentd;"
65
45
  - name: unit testing
66
- run: |
67
- gem install bundler rake
68
- bundle install --jobs 4 --retry 3
69
- bundle exec rake test
46
+ run: bundle exec rake test
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ Gemfile.lock
2
+ pkg/*
3
+ .vscode
4
+ .idea/
data/ChangeLog CHANGED
@@ -1,3 +1,11 @@
1
+ Release 2.3.1 - 2024/02/29
2
+
3
+  * in_sql: Fix incompatibility against Ruby 3.2
4
+
5
+ Release 2.3.0 - 2021/10/08
6
+
7
+  * in_sql: Make table time_format configurable
8
+
1
9
  Release 2.2.0 - 2021/04/20
2
10
 
3
11
   * Upgrade ActiveRecord to 6.1
data/README.md CHANGED
@@ -44,6 +44,7 @@ It stores last selected rows to a file (named *state\_file*) to not forget the l
44
44
  @type sql
45
45
 
46
46
  host rdb_host
47
+ port rdb_port
47
48
  database rdb_database
48
49
  adapter mysql2_or_postgresql_or_etc
49
50
  username myusername
@@ -68,6 +69,7 @@ It stores last selected rows to a file (named *state\_file*) to not forget the l
68
69
  tag table2 # optional
69
70
  update_column updated_at
70
71
  time_column updated_at # optional
72
+ time_format %Y-%m-%d %H:%M:%S.%6N # optional
71
73
  </table>
72
74
 
73
75
  # detects all tables instead of <table> sections
@@ -93,6 +95,7 @@ It stores last selected rows to a file (named *state\_file*) to not forget the l
93
95
  * **update_column**: see above description
94
96
  * **time_column** (optional): if this option is set, this plugin uses this column's value as the the event's time. Otherwise it uses current time.
95
97
  * **primary_key** (optional): if you want to get data from the table which doesn't have primary key like PostgreSQL's View, set this parameter.
98
+ * **time_format** (optional): if you want to specify the format of the date used in the query, useful when using alternative adapters which have restrictions on format
96
99
 
97
100
  ## Input: Limitation
98
101
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.0
1
+ 2.3.1
@@ -59,7 +59,7 @@ module Fluent::Plugin
59
59
  config_param :update_column, :string, default: nil
60
60
  config_param :time_column, :string, default: nil
61
61
  config_param :primary_key, :string, default: nil
62
-
62
+ config_param :time_format, :string, default: '%Y-%m-%d %H:%M:%S.%6N%z'
63
63
  attr_reader :log
64
64
 
65
65
  def configure(conf)
@@ -74,10 +74,13 @@ module Fluent::Plugin
74
74
  # creates a model for this table
75
75
  table_name = @table
76
76
  primary_key = @primary_key
77
+ time_format = @time_format
78
+
77
79
  @model = Class.new(base_model) do
78
80
  self.table_name = table_name
79
81
  self.inheritance_column = '_never_use_'
80
82
  self.primary_key = primary_key if primary_key
83
+ self.const_set(:TIME_FORMAT, time_format)
81
84
 
82
85
  #self.include_root_in_json = false
83
86
 
@@ -86,7 +89,7 @@ module Fluent::Plugin
86
89
  if v.respond_to?(:to_msgpack)
87
90
  v
88
91
  elsif v.is_a? Time
89
- v.strftime('%Y-%m-%d %H:%M:%S.%6N%z')
92
+ v.strftime(self.class::TIME_FORMAT)
90
93
  else
91
94
  v.to_s
92
95
  end
@@ -279,7 +282,7 @@ module Fluent::Plugin
279
282
  require 'yaml'
280
283
 
281
284
  @path = path
282
- if File.exists?(@path)
285
+ if File.exist?(@path)
283
286
  @data = YAML.load_file(@path)
284
287
  if @data == false || @data == []
285
288
  # this happens if an users created an empty file accidentally
data/test/helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require "test/unit"
2
2
  require "test/unit/rr"
3
- require "test/unit/notify"
3
+ require "test/unit/notify" unless ENV['CI']
4
4
  require "fluent/test"
5
5
  require "fluent/plugin/out_sql"
6
6
  require "fluent/plugin/in_sql"
@@ -0,0 +1,96 @@
1
+ require "helper"
2
+ require "fluent/test/driver/input"
3
+
4
+ class SqlInputStateFileTest < Test::Unit::TestCase
5
+ def setup
6
+ Fluent::Test.setup
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ CONFIG = %[
13
+ adapter postgresql
14
+ host localhost
15
+ port 5432
16
+ database fluentd_test
17
+
18
+ username fluentd
19
+ password fluentd
20
+
21
+ state_file /tmp/sql_state
22
+
23
+ schema_search_path public
24
+
25
+ tag_prefix db
26
+
27
+ <table>
28
+ table messages
29
+ tag logs
30
+ update_column updated_at
31
+ time_column updated_at
32
+ </table>
33
+ ]
34
+
35
+ def create_driver(conf = CONFIG)
36
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::SQLInput).configure(conf)
37
+ end
38
+
39
+ def test_configure
40
+ d = create_driver
41
+ expected = {
42
+ host: "localhost",
43
+ port: 5432,
44
+ adapter: "postgresql",
45
+ database: "fluentd_test",
46
+ username: "fluentd",
47
+ password: "fluentd",
48
+ schema_search_path: "public",
49
+ tag_prefix: "db"
50
+ }
51
+ actual = {
52
+ host: d.instance.host,
53
+ port: d.instance.port,
54
+ adapter: d.instance.adapter,
55
+ database: d.instance.database,
56
+ username: d.instance.username,
57
+ password: d.instance.password,
58
+ schema_search_path: d.instance.schema_search_path,
59
+ tag_prefix: d.instance.tag_prefix
60
+ }
61
+ assert_equal(expected, actual)
62
+ tables = d.instance.instance_variable_get(:@tables)
63
+ assert_equal(1, tables.size)
64
+ messages = tables.first
65
+ assert_equal("messages", messages.table)
66
+ assert_equal("logs", messages.tag)
67
+ end
68
+
69
+ def test_message
70
+ d = create_driver(CONFIG + "select_interval 1")
71
+ Message.create!(message: "message 1")
72
+ Message.create!(message: "message 2")
73
+ Message.create!(message: "message 3")
74
+
75
+ d.end_if do
76
+ d.record_count >= 3
77
+ end
78
+ d.run
79
+
80
+ assert_equal("db.logs", d.events[0][0])
81
+ expected = [
82
+ [d.events[0][1], "message 1"],
83
+ [d.events[1][1], "message 2"],
84
+ [d.events[2][1], "message 3"],
85
+ ]
86
+ actual = [
87
+ [Fluent::EventTime.parse(d.events[0][2]["updated_at"]), d.events[0][2]["message"]],
88
+ [Fluent::EventTime.parse(d.events[1][2]["updated_at"]), d.events[1][2]["message"]],
89
+ [Fluent::EventTime.parse(d.events[2][2]["updated_at"]), d.events[2][2]["message"]],
90
+ ]
91
+ assert_equal(expected, actual)
92
+ end
93
+
94
+ class Message < ActiveRecord::Base
95
+ end
96
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-20 00:00:00.000000000 Z
11
+ date: 2024-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -134,7 +134,10 @@ executables: []
134
134
  extensions: []
135
135
  extra_rdoc_files: []
136
136
  files:
137
+ - ".github/dependabot.yml"
138
+ - ".github/workflows/linux-ruby-head.yml"
137
139
  - ".github/workflows/linux.yml"
140
+ - ".gitignore"
138
141
  - ChangeLog
139
142
  - Gemfile
140
143
  - Gemfile.v0.12
@@ -148,6 +151,7 @@ files:
148
151
  - test/helper.rb
149
152
  - test/plugin/test_in_sql.rb
150
153
  - test/plugin/test_in_sql_with_custom_time.rb
154
+ - test/plugin/test_in_sql_with_state_file.rb
151
155
  - test/plugin/test_out_sql.rb
152
156
  homepage: https://github.com/fluent/fluent-plugin-sql
153
157
  licenses: