fluent-plugin-dedup 0.2.0 → 0.3.0

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
  SHA1:
3
- metadata.gz: 504ed27a9800ed32acf1e4c2872520394d935ee4
4
- data.tar.gz: 3c48385579ce83f21be03e5d6052f3a1bdf59b55
3
+ metadata.gz: a92bdeb92dfea752942d7e900ccfc3f3533b8413
4
+ data.tar.gz: bbf4d1075267b6aea71581d81575a49d6f8a7a21
5
5
  SHA512:
6
- metadata.gz: 35f86e880c21e1b40015d95c1684e2d9117e324fda2781a49fc233dd0dbed6b02894792e049226053a5cabf814a589207ef31a7353ccd5aca34d3bde4def4b9e
7
- data.tar.gz: 95726e9ef89719c7cc382748b03842e0eee6872ea6e8693486de26f3202bd173ae35bcac879a8fcb0e89ecc2a940cbcc7df7d45284ea9850fb94a77cb18f17a5
6
+ metadata.gz: eb8019884f0c506f9bb7a2d10ef5ac1a91db01537c59aa863c219a5eccb65ddf7c80596bef349433c8e9278f3aeab42b139444e10d4d9447f78accd4a8048fa2
7
+ data.tar.gz: 13074c5f076328e3a3993655db17c8083140c98640825da49e6721362f20084bfead1389920071de924ebf910b39dfa702069c85bdfb39fd1029456ff020e62e
@@ -1,3 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
+ - 2.1.2
data/README.md CHANGED
@@ -21,6 +21,8 @@ It's useful when the output of a command executed by `in_exec` only returns the
21
21
  type dedup
22
22
  key unique_id # required
23
23
  file /tmp/dedup_state.json # optional. If set, saves the state to the file.
24
+ cache_per_tag 10 # optional. If set, recent logs up to this number is cached.
25
+ cache_ttl 600 # optional. If set, cache entries is expired in this TTL.
24
26
  </match>
25
27
 
26
28
  <match dedup.some.thing>
@@ -31,6 +33,10 @@ All logs that are processed by this plugin will have tag prefix `dedup`.
31
33
 
32
34
  If the optional `file` parameter is set, it dumps the state during shutdown and loads on start, so that it can still dedup after reload.
33
35
 
36
+ If the optional `cache_per_tag` is set, it caches N recently appeared logs (only caches `unique_id` in this example) and compared to new logs.
37
+
38
+ If the optional `cache_ttl` is set, it evicts cache entries in a specific amount of time.
39
+
34
40
  ## Testing
35
41
 
36
42
  bundle install
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  Gem::Specification.new do |spec|
3
3
  spec.name = "fluent-plugin-dedup"
4
- spec.version = "0.2.0"
4
+ spec.version = "0.3.0"
5
5
  spec.authors = ["edvakf"]
6
6
  spec.email = ["taka.atsushi@gmail.com"]
7
7
  spec.summary = %q{fluentd plugin for removing duplicate logs}
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.add_development_dependency "bundler", "~> 1.6"
18
18
  spec.add_development_dependency "rake"
19
19
  spec.add_development_dependency "test-unit", "~> 3.0"
20
+ spec.add_development_dependency "timecop"
20
21
 
21
22
  spec.add_runtime_dependency "fluentd"
22
23
  spec.add_runtime_dependency "lru_redux"
@@ -7,6 +7,7 @@ class Fluent::DedupOutput < Fluent::Output
7
7
  config_param :key, :string, :default => nil
8
8
  config_param :file, :string, :default => nil
9
9
  config_param :cache_per_tag, :size, :default => 1
10
+ config_param :cache_ttl, :integer, :default => 0
10
11
 
11
12
  # Define `log` method for v0.10.42 or earlier
12
13
  unless method_defined?(:log)
@@ -18,8 +19,6 @@ class Fluent::DedupOutput < Fluent::Output
18
19
  unless conf.include?('key')
19
20
  raise Fluent::ConfigError, "config parameter `key` is required"
20
21
  end
21
- @key = conf['key']
22
- @file = conf['file']
23
22
  @states = {}
24
23
  end
25
24
 
@@ -84,6 +83,10 @@ class Fluent::DedupOutput < Fluent::Output
84
83
  end
85
84
 
86
85
  def new_lru
87
- LruRedux::ThreadSafeCache.new(@cache_per_tag)
86
+ if 0 < @cache_ttl
87
+ LruRedux::TTL::ThreadSafeCache.new(@cache_per_tag, @cache_ttl)
88
+ else
89
+ LruRedux::ThreadSafeCache.new(@cache_per_tag)
90
+ end
88
91
  end
89
92
  end
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'timecop'
2
3
 
3
4
  class DedupOutputTest < Test::Unit::TestCase
4
5
  def setup
@@ -110,4 +111,38 @@ class DedupOutputTest < Test::Unit::TestCase
110
111
  assert_equal '2', d.emits[1][2]['unique_id']
111
112
  end
112
113
  end
114
+
115
+ sub_test_case '`cache_ttl` parameter is present' do
116
+ setup do
117
+ Timecop.freeze(Time.now)
118
+ end
119
+
120
+ teardown do
121
+ Timecop.return
122
+ end
123
+
124
+ test "a record identical to most recent N records is suppressed with TTL option" do
125
+ config = %[
126
+ key unique_id
127
+ cache_per_tag 2
128
+ cache_ttl 60
129
+ ]
130
+
131
+ d = create_driver(config)
132
+ d.run do
133
+ d.emit({'unique_id' => '1'}, Time.now)
134
+ d.emit({'unique_id' => '1'}, Time.now) # dup
135
+ Timecop.freeze(Time.now + 59)
136
+ d.emit({'unique_id' => '1'}, Time.now) # dup
137
+ Timecop.freeze(Time.now + 1) # expires cache
138
+ d.emit({'unique_id' => '1'}, Time.now)
139
+ Timecop.freeze(Time.now + 1)
140
+ d.emit({'unique_id' => '1'}, Time.now) # dup
141
+ end
142
+
143
+ assert_equal 2, d.emits.length
144
+ assert_equal '1', d.emits[0][2]['unique_id']
145
+ assert_equal '1', d.emits[1][2]['unique_id']
146
+ end
147
+ end
113
148
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-dedup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - edvakf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-07 00:00:00.000000000 Z
11
+ date: 2015-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: timecop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: fluentd
57
71
  requirement: !ruby/object:Gem::Requirement