fluent-plugin-redis-counter 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +3 -0
- data/VERSION +1 -1
- data/benchmark/performance_test.rb +99 -0
- data/fluent-plugin-redis-counter.gemspec +1 -1
- data/lib/fluent/plugin/out_redis_counter.rb +14 -6
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjI2ZDVjZjQ2ZjkyZGE4N2VlZDIxOTdhMGQzNWQ5MTUzYzUwYmIwYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MTEyN2U5MDlhZmQ0NmZlNjhiMDEzNmFhNmYwYzdhMjA5NDliMDEwNw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MmEwMjA0YTkxM2NhNWZiMWY5NmY1MzdjNTg0NDA3ZWI5YzQ3NTI5ZjhmNzQz
|
10
|
+
MGVkZDkxYmZlYjlhM2NjNDY4ZWMwNGE2MWFlODhkNjgzMThjYTliYWFlN2Vm
|
11
|
+
YmJmOGI2OGRmZGQ5ZmY5YzY4ZTlmYjVhMzIwY2UwNTRlYTYzMmE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGUyYTI3MjYxZWRmYWVlY2M5OWEzZTI0ODM0MzNlODk4MmI1MGQ2NjU2Mzdj
|
14
|
+
MTdiYWEyNjAyOTA2MWQwNzQ3NmQxNDhkY2RkOGJmYjc2ZTMzODAzNTk0M2Iz
|
15
|
+
NWJkMjY3ZWJiZmZmMjRhMTY4NDNmMjEwNzlhMGUyZDA2NTdjMGI=
|
data/CHANGELOG.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'fluent/test'
|
2
|
+
require 'benchmark'
|
3
|
+
|
4
|
+
if ENV["PROFILE"]
|
5
|
+
require 'ruby-prof'
|
6
|
+
end
|
7
|
+
|
8
|
+
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
|
9
|
+
require 'fluent/plugin/out_redis_counter'
|
10
|
+
|
11
|
+
module PerformanceTestApp
|
12
|
+
class Benchmarker
|
13
|
+
def initialize
|
14
|
+
Fluent::Test.setup
|
15
|
+
@fluent = Fluent::Test::BufferedOutputTestDriver.new(Fluent::RedisCounterOutput).configure(%[
|
16
|
+
host localhost
|
17
|
+
port 6379
|
18
|
+
db_number 1
|
19
|
+
<pattern>
|
20
|
+
match_status ^2[0-9]{2}$
|
21
|
+
count_key_format status-normal:item_id:%_{item_id}
|
22
|
+
count_value 1
|
23
|
+
</pattern>
|
24
|
+
])
|
25
|
+
end
|
26
|
+
|
27
|
+
def prepare
|
28
|
+
10_0000.times do
|
29
|
+
item_id = ( rand * 10_0000 ).to_i
|
30
|
+
@fluent.emit({ "status" => "200", "item_id" => item_id })
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def run
|
35
|
+
result = nil
|
36
|
+
profile = nil
|
37
|
+
Benchmark.bm do |x|
|
38
|
+
result = x.report {
|
39
|
+
if ENV["PROFILE"]
|
40
|
+
profile = RubyProf.profile do
|
41
|
+
@fluent.run
|
42
|
+
end
|
43
|
+
else
|
44
|
+
@fluent.run
|
45
|
+
end
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
if ENV["PROFILE"]
|
50
|
+
profile_printer = RubyProf::GraphPrinter.new(profile)
|
51
|
+
profile_printer.print(STDOUT, {})
|
52
|
+
end
|
53
|
+
$log.info("benchmark result: #{result}")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class MemoryWatcher
|
58
|
+
def initialize
|
59
|
+
end
|
60
|
+
|
61
|
+
def run(&block)
|
62
|
+
start_memory = get_memory(Process.pid)
|
63
|
+
pid = Process.fork do
|
64
|
+
block.call
|
65
|
+
end
|
66
|
+
@max_memory = 0
|
67
|
+
th = Thread.new do
|
68
|
+
begin
|
69
|
+
loop do
|
70
|
+
sleep(0.01)
|
71
|
+
msize = get_memory(pid)
|
72
|
+
if msize > @max_memory
|
73
|
+
@max_memory = msize
|
74
|
+
end
|
75
|
+
end
|
76
|
+
ensure
|
77
|
+
$log.info("start memory size:\t#{sprintf("%#10d", start_memory / 1024)}KB")
|
78
|
+
$log.info("max memory size:\t#{sprintf("%#10d", @max_memory / 1024)}KB")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
Process.waitall
|
82
|
+
th.kill
|
83
|
+
end
|
84
|
+
|
85
|
+
def get_memory(pid)
|
86
|
+
`ps -h -o rss= -p #{pid}`.to_i * 1024
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
if $0 == __FILE__
|
92
|
+
parent = PerformanceTestApp::MemoryWatcher.new
|
93
|
+
app = PerformanceTestApp::Benchmarker.new
|
94
|
+
parent.run do
|
95
|
+
app.prepare
|
96
|
+
app.run
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "fluent-plugin-redis-counter"
|
6
|
-
s.version = "0.3.
|
6
|
+
s.version = "0.3.1"
|
7
7
|
s.description = "fluent-plugin-redis-counter is a fluent plugin to count-up/down redis keys."
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Buntaro Okada"]
|
@@ -3,6 +3,8 @@ module Fluent
|
|
3
3
|
Fluent::Plugin.register_output('redis_counter', self)
|
4
4
|
attr_reader :host, :port, :db_number, :redis, :patterns
|
5
5
|
|
6
|
+
config_param :max_pipelining, :integer, :default => 1000
|
7
|
+
|
6
8
|
def initialize
|
7
9
|
super
|
8
10
|
require 'redis'
|
@@ -61,8 +63,12 @@ module Fluent
|
|
61
63
|
}
|
62
64
|
table.each_pair.select { |key, value|
|
63
65
|
value != 0
|
64
|
-
}.
|
65
|
-
@redis.
|
66
|
+
}.each_slice(@max_pipelining) { |items|
|
67
|
+
@redis.pipelined do
|
68
|
+
items.each do |key, value|
|
69
|
+
@redis.incrby(key, value)
|
70
|
+
end
|
71
|
+
end
|
66
72
|
}
|
67
73
|
end
|
68
74
|
|
@@ -75,10 +81,11 @@ module Fluent
|
|
75
81
|
@format = format
|
76
82
|
end
|
77
83
|
|
84
|
+
CUSTOM_KEY_EXPRESSION_RE = /(%_\{([^\}]+)\})/
|
85
|
+
|
78
86
|
def key(record)
|
79
|
-
@format.gsub(
|
80
|
-
|
81
|
-
record[key]
|
87
|
+
@format.gsub(CUSTOM_KEY_EXPRESSION_RE) do |s|
|
88
|
+
record[$2]
|
82
89
|
end
|
83
90
|
end
|
84
91
|
end
|
@@ -105,6 +112,7 @@ module Fluent
|
|
105
112
|
is_localtime = false
|
106
113
|
end
|
107
114
|
@count_key_format = [conf_element['count_key_format'], is_localtime]
|
115
|
+
@record_value_formatter = RecordValueFormatter.new(@count_key_format[0])
|
108
116
|
end
|
109
117
|
|
110
118
|
if conf_element.has_key?('count_value_key')
|
@@ -142,7 +150,7 @@ module Fluent
|
|
142
150
|
if @count_key_format == nil
|
143
151
|
@count_key
|
144
152
|
else
|
145
|
-
count_key =
|
153
|
+
count_key = @record_value_formatter.key(record)
|
146
154
|
formatter = TimeFormatter.new(count_key, @count_key_format[1])
|
147
155
|
formatter.format(time)
|
148
156
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-redis-counter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Buntaro Okada
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- VERSION
|
55
|
+
- benchmark/performance_test.rb
|
55
56
|
- fluent-plugin-redis-counter.gemspec
|
56
57
|
- lib/fluent/plugin/out_redis_counter.rb
|
57
58
|
- test/plugin/out_redis_counter.rb
|