fluent-plugin-redis 0.3.0 → 0.3.5

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
- SHA1:
3
- metadata.gz: 76ed9616d363f33920c8a1dd8e4e5596f2a35902
4
- data.tar.gz: 5784039d3c0b6f7ee7d4c7e28a054d54faf91220
2
+ SHA256:
3
+ metadata.gz: f4d9ddd2edc9aeb9d4c68c945677d964ee4c25bbfc308ec658b1098186adb175
4
+ data.tar.gz: 9a39e25338b0036b237bb08e5cfc033984bd1fc33d7ba39661e44a2b692a9ee2
5
5
  SHA512:
6
- metadata.gz: c31c34bbd4d1f441b463a256fbee00a34bee3886fbf24619ad7940685e16965db707864831a372195f63476bd6956e4294d26dde7dea6cc4a549f0dcfdee8951
7
- data.tar.gz: e76f25044068976638e066fd2dfc55622cb02bdfb2a1fff5048cd1d8909c8ade7e1250fe942d00d414720d47fc7332fcbc2da28618974a4e0b9ffe600fa3c5c1
6
+ metadata.gz: c66ca67dd12946c06f1a23479522a65ac5eef9f0b8b0b162380eb8eb5f12f19fe4dec0a209b0154ce73226e293ee1c089d32801adef8d72cd1dfd9daa9dcd94e
7
+ data.tar.gz: 159d112866122d37e233b37baa1aaea78371c350494ec816454e574c38f0701e1e0f797fd4a1eb288584f2826aab613bed41b6646d9d5ffa589f9a2a9286d8a0
@@ -0,0 +1,19 @@
1
+ #### Problem
2
+
3
+ ...
4
+
5
+ #### Steps to replicate
6
+
7
+ Provide example config and message
8
+
9
+ #### Expected Behavior
10
+
11
+ ...
12
+
13
+ #### Your environment
14
+
15
+ * OS version
16
+ * paste result of ``fluentd --version`` or ``td-agent --version``
17
+ * plugin version
18
+ * paste boot log of fluentd or td-agent
19
+ * paste result of ``fluent-gem list``, ``td-agent-gem list`` or your Gemfile.lock
@@ -0,0 +1,31 @@
1
+ name: Testing on Ubuntu
2
+ on:
3
+ - push
4
+ - pull_request
5
+ jobs:
6
+ build:
7
+ runs-on: ${{ matrix.os }}
8
+ services:
9
+ redis:
10
+ image: redis
11
+ ports:
12
+ - 6379:6379
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ ruby: [ '2.5', '2.6', '2.7', '3.0' ]
17
+ os:
18
+ - ubuntu-latest
19
+ name: Ruby ${{ matrix.ruby }} unit testing on ${{ matrix.os }}
20
+ steps:
21
+ - uses: actions/checkout@v2
22
+ - uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby }}
25
+ - name: unit testing
26
+ env:
27
+ CI: true
28
+ run: |
29
+ gem install bundler rake
30
+ bundle install --jobs 4 --retry 3
31
+ bundle exec rake test
@@ -1,3 +1,20 @@
1
+ ## 0.3.5
2
+ * Confirm Ruby 3.0 ready
3
+
4
+ ## 0.3.4
5
+ * Pass chunk directly into builtin placeholders
6
+
7
+ ## 0.3.3
8
+ * Add multi workers environment considaration
9
+
10
+ ## 0.3.2
11
+ * Add TTL support
12
+
13
+ ## 0.3.1
14
+
15
+ * Use public msgpack APIs instead of its internal APIs
16
+ * Remove needless rescue block
17
+
1
18
  ## 0.3.0
2
19
 
3
20
  * Migrate v0.14 API based plugin
@@ -38,4 +55,3 @@
38
55
  ## 0.0.1
39
56
 
40
57
  * This initial plugin is released.
41
-
@@ -1,18 +1,18 @@
1
- = Redis output plugin for Fluent
1
+ # Redis output plugin for Fluent
2
2
 
3
3
  fluent-plugin-redis is a fluent plugin to output to redis.
4
4
 
5
- == Requirements
5
+ ## Requirements
6
6
 
7
- |fluent-plugin-redis| fluentd | ruby |
8
- |-------------------|------------------|--------|
9
- | >= 0.3.0 | >= 0.14.8 | >= 2.1 |
10
- | == 0.2.3 | ~> 0.12.0 * | >= 1.9 |
11
- | < 0.2.3 | >= 0.10.0, < 2 * | >= 1.9 |
7
+ |fluent-plugin-redis| fluentd | ruby |
8
+ |-------------------|------------------|--------|
9
+ | >= 0.3.0 | >= 0.14.8 | >= 2.1 |
10
+ | == 0.2.3 | ~> 0.12.0 * | >= 1.9 |
11
+ | < 0.2.3 | >= 0.10.0, < 2 * | >= 1.9 |
12
12
 
13
- * May not support all future fluentd features
13
+ * May not support all future fluentd features
14
14
 
15
- == Installation
15
+ ## Installation
16
16
 
17
17
  What you have to do is only installing like this:
18
18
 
@@ -20,7 +20,7 @@ What you have to do is only installing like this:
20
20
 
21
21
  Then fluent automatically loads the plugin installed.
22
22
 
23
- == Configuration
23
+ ## Configuration
24
24
 
25
25
  <match redis.**>
26
26
  @type redis
@@ -40,17 +40,30 @@ Then fluent automatically loads the plugin installed.
40
40
  # strftime_format "%s"
41
41
  # Allow insert key duplicate. It will work as update values.
42
42
  # allow_duplicate_key true
43
+ # ttl 300 # If 0 or negative value is set, ttl is not set in each key.
43
44
  </match>
44
45
 
46
+ ### With multi workers
45
47
 
46
- === Notice
48
+ fluent-plugin-redis can handle <em>multi workers</em>.
49
+ This feature can be enabled with the following configuration:
50
+
51
+ <system>
52
+ workers n # where n >= 2.
53
+ </system>
54
+
55
+ ### Notice
47
56
 
48
57
  <em>insert_key_prefix</em>, <em>strftime_format</em>, and <em>allow_duplicate_key</em> are newly added config parameters.
49
58
 
50
59
  They can use v0.3.0 or later. To use this parameters, users must update Fluentd to v0.14 or later and this plugin to v0.3.0 or later.
51
60
 
52
- == Contributing to fluent-plugin-redis
53
-
61
+ <em>multi workers</em> are newly introduced feature in Fluentd v0.14.
62
+
63
+ It can use this feature in this plugin in v0.3.3 or later.
64
+
65
+ ## Contributing to fluent-plugin-redis
66
+
54
67
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
55
68
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
56
69
  * Fork the project
@@ -59,8 +72,10 @@ They can use v0.3.0 or later. To use this parameters, users must update Fluentd
59
72
  * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
60
73
  * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
61
74
 
75
+ ## Copyright
76
+
77
+ Copyright (c) 2011- Yuki Nishijima
62
78
 
63
- == Copyright
79
+ ## License
64
80
 
65
- Copyright:: Copyright (c) 2011- Yuki Nishijima
66
- License:: Apache License, Version 2.0
81
+ Apache License, Version 2.0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.1
@@ -3,12 +3,12 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "fluent-plugin-redis"
6
- s.version = "0.3.0"
6
+ s.version = "0.3.5"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Yuki Nishijima", "Hiroshi Hatake", "Kenji Okimoto"]
9
- s.date = %q{2016-12-06}
9
+ s.date = %q{2019-02-26}
10
10
  s.email = ["mail@yukinishijima.net", "fluent@clear-code.com"]
11
- s.homepage = "http://github.com/yuki24/fluent-plugin-redis"
11
+ s.homepage = "https://github.com/fluent-plugins-nursery/fluent-plugin-redis"
12
12
  s.summary = "Redis output plugin for Fluent"
13
13
 
14
14
  s.files = `git ls-files`.split("\n")
@@ -16,10 +16,11 @@ Gem::Specification.new do |s|
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
17
  s.require_paths = ["lib"]
18
18
 
19
- s.add_dependency %q<fluentd>, [">= 0.14.8", "< 2"]
19
+ s.add_dependency %q<fluentd>, [">= 0.14.22", "< 2"]
20
20
  s.add_dependency %q<redis>, ["~> 3.3.0"]
21
21
  s.add_development_dependency %q<rake>, [">= 11.3.0"]
22
22
  s.add_development_dependency %q<bundler>
23
- s.add_development_dependency %q<test-unit>, ["~> 3.1.0"]
23
+ s.add_development_dependency %q<test-unit>, ["~> 3.3.9"]
24
24
  s.add_development_dependency %q<appraisal>, ["~> 2.1.0"]
25
+ s.add_development_dependency %q<webrick>
25
26
  end
@@ -1,17 +1,15 @@
1
1
  require 'redis'
2
2
  require 'msgpack'
3
- require 'fluent/msgpack_factory'
4
3
  require 'fluent/plugin/output'
5
4
 
6
5
  module Fluent::Plugin
7
6
  class RedisOutput < Output
8
- include Fluent::MessagePackFactory::Mixin
9
-
10
7
  Fluent::Plugin.register_output('redis', self)
11
8
 
12
9
  helpers :compat_parameters, :inject
13
10
 
14
11
  DEFAULT_BUFFER_TYPE = "memory"
12
+ DEFAULT_TTL_VALUE = -1
15
13
 
16
14
  attr_reader :redis
17
15
 
@@ -22,6 +20,7 @@ module Fluent::Plugin
22
20
  config_param :insert_key_prefix, :string, default: "${tag}"
23
21
  config_param :strftime_format, :string, default: "%s"
24
22
  config_param :allow_duplicate_key, :bool, default: false
23
+ config_param :ttl, :integer, default: DEFAULT_TTL_VALUE
25
24
 
26
25
  config_section :buffer do
27
26
  config_set_default :@type, DEFAULT_BUFFER_TYPE
@@ -31,6 +30,7 @@ module Fluent::Plugin
31
30
 
32
31
  def configure(conf)
33
32
  compat_parameters_convert(conf, :buffer, :inject)
33
+ @running_multi_workers = system_config.workers > 1
34
34
  super
35
35
 
36
36
  if conf.has_key?('namespace')
@@ -38,6 +38,7 @@ module Fluent::Plugin
38
38
  end
39
39
  raise Fluent::ConfigError, "'tag' in chunk_keys is required." if not @chunk_key_tag
40
40
  raise Fluent::ConfigError, "'time' in chunk_keys is required." if not @chunk_key_time
41
+ @unpacker = Fluent::Engine.msgpack_factory.unpacker
41
42
  end
42
43
 
43
44
  def start
@@ -68,23 +69,32 @@ module Fluent::Plugin
68
69
  true
69
70
  end
70
71
 
72
+ def multi_workers_ready?
73
+ true
74
+ end
75
+
71
76
  def write(chunk)
72
- tag, time = expand_placeholders(chunk.metadata)
77
+ tag, time = expand_placeholders(chunk)
73
78
  @redis.pipelined {
74
79
  unless @allow_duplicate_key
75
- chunk.open { |io|
76
- begin
77
- msgpack_unpacker(io).each.with_index { |record, index|
78
- identifier = [tag, time].join(".")
79
- @redis.mapped_hmset "#{identifier}.#{index}", record[2]
80
- }
81
- rescue EOFError
82
- # EOFError always occured when reached end of chunk.
80
+ stream = chunk.to_msgpack_stream
81
+ @unpacker.feed_each(stream).with_index { |record, index|
82
+ identifier = if @running_multi_workers
83
+ [tag, time, fluentd_worker_id].join(".")
84
+ else
85
+ [tag, time].join(".")
86
+ end
87
+ @redis.multi do
88
+ @redis.mapped_hmset "#{identifier}.#{index}", record[2]
89
+ @redis.expire "#{identifier}.#{index}", @ttl if @ttl > 0
83
90
  end
84
91
  }
85
92
  else
86
93
  chunk.each do |_tag, _time, record|
87
- @redis.mapped_hmset "#{tag}", record
94
+ @redis.multi do
95
+ @redis.mapped_hmset "#{tag}", record
96
+ @redis.expire "#{tag}", @ttl if @ttl > 0
97
+ end
88
98
  end
89
99
  end
90
100
  }
@@ -92,9 +102,9 @@ module Fluent::Plugin
92
102
 
93
103
  private
94
104
 
95
- def expand_placeholders(metadata)
96
- tag = extract_placeholders(@insert_key_prefix, metadata)
97
- time = extract_placeholders(@strftime_format, metadata)
105
+ def expand_placeholders(chunk)
106
+ tag = extract_placeholders(@insert_key_prefix, chunk)
107
+ time = extract_placeholders(@strftime_format, chunk)
98
108
  return tag, time
99
109
  end
100
110
  end
@@ -36,6 +36,7 @@ class FileOutputTest < Test::Unit::TestCase
36
36
  assert_equal '${tag}', @d.instance.insert_key_prefix
37
37
  assert_equal '%s', @d.instance.strftime_format
38
38
  assert_false @d.instance.allow_duplicate_key
39
+ assert_equal Fluent::Plugin::RedisOutput::DEFAULT_TTL_VALUE, @d.instance.ttl
39
40
  end
40
41
 
41
42
  def test_configure_with_password
@@ -116,8 +117,25 @@ class FileOutputTest < Test::Unit::TestCase
116
117
  d.feed(time, {"a"=>3})
117
118
  end
118
119
 
119
- assert_equal "2", d.instance.redis.hget("insert.test.#{time}.0", "a")
120
- assert_equal "3", d.instance.redis.hget("insert.test.#{time}.1", "a")
120
+ assert_equal "2", d.instance.redis.hget("test.#{time}.0", "a")
121
+ assert_equal "3", d.instance.redis.hget("test.#{time}.1", "a")
122
+ end
123
+
124
+ def test_write_with_ttl
125
+ ttl = 2
126
+ d = create_driver CONFIG + %[
127
+ ttl #{ttl}
128
+ allow_duplicate_key true
129
+ ]
130
+ time = event_time("2011-01-02 13:14:00 UTC")
131
+ d.run(default_tag: 'ttl.insert.test') do
132
+ d.feed(time, {"a"=>2})
133
+ end
134
+
135
+ assert_in_delta 2.0, d.instance.redis.ttl("ttl.insert.test"), 1.0
136
+
137
+ sleep ttl+1
138
+ assert_equal -2, d.instance.redis.ttl("ttl.insert.test")
121
139
  end
122
140
 
123
141
  def test_write_with_custom_strftime_format
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuki Nishijima
8
8
  - Hiroshi Hatake
9
9
  - Kenji Okimoto
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-12-06 00:00:00.000000000 Z
13
+ date: 2019-02-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: fluentd
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 0.14.8
21
+ version: 0.14.22
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
24
  version: '2'
@@ -28,7 +28,7 @@ dependencies:
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: 0.14.8
31
+ version: 0.14.22
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '2'
@@ -80,14 +80,14 @@ dependencies:
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: 3.1.0
83
+ version: 3.3.9
84
84
  type: :development
85
85
  prerelease: false
86
86
  version_requirements: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 3.1.0
90
+ version: 3.3.9
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: appraisal
93
93
  requirement: !ruby/object:Gem::Requirement
@@ -102,7 +102,21 @@ dependencies:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
104
  version: 2.1.0
105
- description:
105
+ - !ruby/object:Gem::Dependency
106
+ name: webrick
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ description:
106
120
  email:
107
121
  - mail@yukinishijima.net
108
122
  - fluent@clear-code.com
@@ -110,11 +124,12 @@ executables: []
110
124
  extensions: []
111
125
  extra_rdoc_files: []
112
126
  files:
127
+ - ".github/ISSUE_TEMPLATE.md"
128
+ - ".github/workflows/linux.yml"
113
129
  - ".gitignore"
114
- - ".travis.yml"
115
130
  - CHANGELOG.md
116
131
  - Gemfile
117
- - README.rdoc
132
+ - README.md
118
133
  - Rakefile
119
134
  - VERSION
120
135
  - fluent-plugin-redis.gemspec
@@ -123,10 +138,10 @@ files:
123
138
  - gemfiles/fluentd_v0.14.gemfile
124
139
  - lib/fluent/plugin/out_redis.rb
125
140
  - test/plugin/test_out_redis.rb
126
- homepage: http://github.com/yuki24/fluent-plugin-redis
141
+ homepage: https://github.com/fluent-plugins-nursery/fluent-plugin-redis
127
142
  licenses: []
128
143
  metadata: {}
129
- post_install_message:
144
+ post_install_message:
130
145
  rdoc_options: []
131
146
  require_paths:
132
147
  - lib
@@ -141,9 +156,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
156
  - !ruby/object:Gem::Version
142
157
  version: '0'
143
158
  requirements: []
144
- rubyforge_project:
145
- rubygems_version: 2.5.1
146
- signing_key:
159
+ rubygems_version: 3.1.2
160
+ signing_key:
147
161
  specification_version: 4
148
162
  summary: Redis output plugin for Fluent
149
163
  test_files:
@@ -1,12 +0,0 @@
1
- language: ruby
2
- services:
3
- - redis-server
4
- rvm:
5
- - 2.1
6
- - 2.2
7
- - 2.3.3
8
- gemfile:
9
- - gemfiles/fluentd_v0.14.gemfile
10
- - Gemfile
11
- before_install:
12
- - gem update bundler