fluent-plugin-memcached 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 651f8d05d7f151858e82ef3cddb73774f8264fc8
4
- data.tar.gz: 1efca6647006033a4cfe2e68a8cdba7a706f0e79
3
+ metadata.gz: 687484353d1845d26e83e4317d0fb046afe7825a
4
+ data.tar.gz: 1ee6c8f8a305578685e56989ec85ae27472e0cd9
5
5
  SHA512:
6
- metadata.gz: 493e5d983298d05c75ec5feeb1f3358c8c974fc0db31242c372451c9e1d0d910b7fdab988001e6c163f53fa8a0b0b4fc35d45dec2ef9f3d9118a5a555dd0d6b8
7
- data.tar.gz: f026654c0c1a7926f22be40448f1d2d4315f4d277350fd798dbfee50b48160b3845a132fa8b8c779fe84bf15299e16216c64d2b206e26cde7f5f8900c1abd14f
6
+ metadata.gz: b711578a988b4e8e199cd921b4f84deaac9426c9a4537936393132237adc1676f746fe14c06f5787d11dc28e0231b794158328c5d68badfc144ae967d0ea1485
7
+ data.tar.gz: e312cca1312d2cd41e297544c5b5710f8eb83578697fe5f6fda995fbb24abe81f8401ab2e2cdc6a09c29344922d127250480904cd159e5171b7217de6260f1f4
data/README.md CHANGED
@@ -23,6 +23,18 @@ Default values would look like this:
23
23
  </match>
24
24
  ```
25
25
 
26
+ To save json, like this:
27
+
28
+ ```
29
+ <match dummy>
30
+ type memcached
31
+ host localhost
32
+ port 11211
33
+ value_format json
34
+ param_names param1,param2
35
+ </match>
36
+ ```
37
+
26
38
  ## Contributing
27
39
 
28
40
  Bug reports and pull requests are welcome.
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "fluent-plugin-memcached"
7
- gem.version = "0.0.4"
7
+ gem.version = "0.0.5"
8
8
  gem.authors = ["innossh"]
9
9
  gem.email = ["innossh@users.noreply.github.com"]
10
10
 
@@ -1,6 +1,14 @@
1
1
  class Fluent::MemcachedOutput < Fluent::BufferedOutput
2
2
  Fluent::Plugin.register_output('memcached', self)
3
- attr_reader :host, :port, :memcached
3
+
4
+ config_param :host, :string, :default => 'localhost'
5
+ config_param :port, :integer, :default => 11211
6
+
7
+ config_param :value_format, :string, :default => 'raw'
8
+ config_param :param_names, :string, :default => nil # nil doesn't allowed for json
9
+
10
+ attr_accessor :memcached
11
+ attr_accessor :formatter
4
12
 
5
13
  def initialize
6
14
  super
@@ -9,8 +17,10 @@ class Fluent::MemcachedOutput < Fluent::BufferedOutput
9
17
 
10
18
  def configure(conf)
11
19
  super
12
- @host = conf.has_key?('host') ? conf['host'] : 'localhost'
13
- @port = conf.has_key?('port') ? conf['port'].to_i : 11211
20
+ if @value_format == 'json' and @param_names.nil?
21
+ raise Fluent::ConfigError, "param_names MUST be specified in the case of json format"
22
+ end
23
+ @formatter = RecordValueFormatter.new(@value_format, @param_names)
14
24
  end
15
25
 
16
26
  def start
@@ -28,10 +38,36 @@ class Fluent::MemcachedOutput < Fluent::BufferedOutput
28
38
 
29
39
  def write(chunk)
30
40
  chunk.msgpack_each { |tag, time, record|
31
- key = record.values.first
32
- value = record.values.drop(1).join(' ')
33
- @memcached.set key, value
41
+ @memcached.set @formatter.key(record), @formatter.value(record)
34
42
  }
35
43
  end
36
44
 
45
+ class RecordValueFormatter
46
+ attr_reader :value_format
47
+ attr_reader :param_names
48
+
49
+ def initialize(value_format, param_names)
50
+ @value_format = value_format
51
+ @param_names = param_names
52
+ end
53
+
54
+ def key(record)
55
+ record.values.first
56
+ end
57
+
58
+ def value(record)
59
+ case @value_format
60
+ when 'json'
61
+ values = record.values.drop(1)
62
+ hash = {}
63
+ @param_names.split(/\s*,\s*/).each_with_index { |param_name, i|
64
+ hash[param_name] = (i > values.size - 1) ? nil : values[i]
65
+ }
66
+ hash.to_json
67
+ else
68
+ record.values.drop(1).join(' ')
69
+ end
70
+ end
71
+ end
72
+
37
73
  end
@@ -12,6 +12,13 @@ class MemcachedOutputTest < Test::Unit::TestCase
12
12
  port 11211
13
13
  ]
14
14
 
15
+ CONFIG_JSON = %[
16
+ host 127.0.0.1
17
+ port 11211
18
+ value_format json
19
+ param_names param1,param2
20
+ ]
21
+
15
22
  def create_driver(conf = CONFIG, tag='test')
16
23
  Fluent::Test::BufferedOutputTestDriver.new(Fluent::MemcachedOutput, tag).configure(conf)
17
24
  end
@@ -26,12 +33,27 @@ class MemcachedOutputTest < Test::Unit::TestCase
26
33
 
27
34
  assert_equal '127.0.0.1', d.instance.host
28
35
  assert_equal 11211, d.instance.port
36
+
37
+ d = create_driver(CONFIG_JSON)
38
+
39
+ assert_equal '127.0.0.1', d.instance.host
40
+ assert_equal 11211, d.instance.port
41
+ assert_equal 'json', d.instance.value_format
42
+ assert_equal 'param1,param2', d.instance.param_names
43
+
44
+ assert_raise(Fluent::ConfigError) {
45
+ create_driver %[
46
+ host 127.0.0.1
47
+ port 11211
48
+ value_format json
49
+ ]
50
+ }
29
51
  end
30
52
 
31
53
  def test_format
32
54
  d = create_driver
33
55
  time = Time.parse('2011-01-02 13:14:15 UTC').to_i
34
- record = { 'key' => 'key', 'value1' => 'value' }
56
+ record = {'key' => 'key', 'param1' => 'value'}
35
57
  d.emit(record, time)
36
58
  d.expect_format(['test', time, record].to_msgpack)
37
59
  d.run
@@ -40,8 +62,8 @@ class MemcachedOutputTest < Test::Unit::TestCase
40
62
  def test_write
41
63
  d = create_driver
42
64
  time = Time.parse('2011-01-02 13:14:15 UTC').to_i
43
- record1 = { 'key' => 'a', 'value1' => '1' }
44
- record2 = { 'key' => 'b', 'value1' => '2', 'value2' => '3' }
65
+ record1 = {'key' => 'a', 'param1' => '1'}
66
+ record2 = {'key' => 'b', 'param1' => '2', 'param2' => '3'}
45
67
  d.emit(record1, time)
46
68
  d.emit(record2, time)
47
69
  d.run
@@ -49,4 +71,20 @@ class MemcachedOutputTest < Test::Unit::TestCase
49
71
  assert_equal '1', d.instance.memcached.get('a')
50
72
  assert_equal '2 3', d.instance.memcached.get('b')
51
73
  end
74
+
75
+ def test_write_json
76
+ d = create_driver(CONFIG_JSON)
77
+ time = Time.parse('2011-01-02 13:14:15 UTC').to_i
78
+ record1 = {'key' => 'c', 'param1' => '4'}
79
+ record2 = {'key' => 'd', 'param1' => '5', 'param2' => '6'}
80
+ record1_value_json = {'param1' => '4', 'param2' => nil}.to_json
81
+ record2_value_json = {'param1' => '5', 'param2' => '6'}.to_json
82
+ d.emit(record1, time)
83
+ d.emit(record2, time)
84
+ d.run
85
+
86
+ assert_equal record1_value_json, d.instance.memcached.get('c')
87
+ assert_equal record2_value_json, d.instance.memcached.get('d')
88
+ end
89
+
52
90
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-memcached
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - innossh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-23 00:00:00.000000000 Z
11
+ date: 2015-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd