diff --git a/README.rdoc b/README.rdoc index cbac481..0a1718b 100644 --- a/README.rdoc +++ b/README.rdoc @@ -18,7 +18,8 @@ this sources folked 'fluent-plugin-redis'. (https://github.com/yuki24/fluent-plu timeout TIMEOUT(float, all , 5.0) key_prefix prefix_(string, all, '') key_suffix _suffix(string, all , '') - store_type zset(zset|set|list|string, all, zset) + store_type zset(zset|zincrby|set|list|string, all, zset) + increment_score zset(float, all, 1.0) key_name key(string, all, nil) score_name score(string, all , nil) value_name value(string, all, nill) diff --git a/lib/fluent/plugin/out_redisstore.rb b/lib/fluent/plugin/out_redisstore.rb index c9c87c0..3b6e897 100644 --- a/lib/fluent/plugin/out_redisstore.rb +++ b/lib/fluent/plugin/out_redisstore.rb @@ -23,6 +23,7 @@ def configure(conf) @key_name = conf['key_name'] @fixed_key_value = conf.has_key?('fixed_key_value') ? conf['fixed_key_value'] : nil @score_name = conf['score_name'] + @increment_score = conf.has_key?('increment_score') ? conf['increment_score'] : 1.0 @value_name = conf['value_name'] @key_expire = conf.has_key?('key_expire') ? conf['key_expire'].to_i : -1 @value_expire = conf.has_key?('value_expire') ? conf['value_expire'].to_i : -1 @@ -54,6 +55,8 @@ def write(chunk) (tag, record) = message if @store_type == 'zset' operation_for_zset(record) + elsif @store_type == 'zincrby' + operation_for_zincrby(record) elsif @store_type == 'set' operation_for_set(record) elsif @store_type == 'list' @@ -100,6 +103,25 @@ def operation_for_zset(record) end end + def operation_for_zincrby(record) + if @fixed_key_value + k = @fixed_key_value + else + k = traverse(record, @key_name).to_s + end + v = traverse(record, @value_name) + sk = @key_prefix + k + @key_suffix + + @redis.zincrby sk , @increment_score, v + if @key_expire > 0 + @redis.expire sk , @key_expire + end + if @value_length > 0 + script = generate_zremrangebyrank_script(sk, @value_length, @order) + @redis.eval script + end + end + def operation_for_set(record) if @fixed_key_value k = @fixed_key_value