fluent-plugin-redis-counter 0.1.1 → 0.2.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.
- data/CHANGELOG.md +3 -0
- data/README.md +13 -1
- data/VERSION +1 -1
- data/fluent-plugin-redis-counter.gemspec +2 -2
- data/lib/fluent/plugin/out_redis_counter.rb +20 -4
- data/test/plugin/out_redis_counter.rb +16 -4
- metadata +3 -3
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -35,7 +35,19 @@ fluent-plugin-redis-counter is hosted by [RubyGems.org](https://rubygems.org/).
|
|
35
35
|
<pattern>
|
36
36
|
match_status ^2[0-9][0-9]$
|
37
37
|
count_key_format foo-statux2xx-%d
|
38
|
-
localtime
|
38
|
+
localtime # time-zone(default: localtime, it can be "utc" or "localtime")
|
39
|
+
</pattern>
|
40
|
+
|
41
|
+
# you can also use values from the matched JSON record in the key name, by using the
|
42
|
+
# syntax foo%_{key1}-%_{key2}, where key1 and key2 are keys in the JSON record that
|
43
|
+
# was received by fluentd.
|
44
|
+
# for example, "customer:%_{customer_id}:status2xx" will be formatted to
|
45
|
+
# "customer:123:status2xx" if the JSON record contains a key named "customer_id"
|
46
|
+
# with value 123, like so: {"status": 200, "customer_id": 123 ... }.
|
47
|
+
# these can be combined with the time formatting options in the previous example.
|
48
|
+
<pattern>
|
49
|
+
match_status ^2[0-9][0-9]$
|
50
|
+
count_key_format customer:%_{customer_id}:status2xx-%Y-%m-%d
|
39
51
|
</pattern>
|
40
52
|
</match>
|
41
53
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -3,11 +3,11 @@ $:.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.
|
6
|
+
s.version = "0.2.0"
|
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"]
|
10
|
-
s.date = %q{
|
10
|
+
s.date = %q{2013-02-19}
|
11
11
|
s.email = "kbinani.bt@gmail.com"
|
12
12
|
s.homepage = "https://github.com/kbinani/fluent-plugin-redis-counter"
|
13
13
|
s.summary = "Redis counter plugin for fluent"
|
@@ -52,7 +52,7 @@ module Fluent
|
|
52
52
|
@patterns.select { |pattern|
|
53
53
|
pattern.is_match?(record)
|
54
54
|
}.each{ |pattern|
|
55
|
-
table[pattern.get_count_key(time)] += pattern.count_value
|
55
|
+
table[pattern.get_count_key(time, record)] += pattern.count_value
|
56
56
|
}
|
57
57
|
}
|
58
58
|
rescue EOFError
|
@@ -69,6 +69,20 @@ module Fluent
|
|
69
69
|
class RedisCounterException < Exception
|
70
70
|
end
|
71
71
|
|
72
|
+
class RecordValueFormatter
|
73
|
+
attr_reader :format
|
74
|
+
def initialize(format)
|
75
|
+
@format = format
|
76
|
+
end
|
77
|
+
|
78
|
+
def key(record)
|
79
|
+
@format.gsub(/(%_\{[^\}]+\})/) do |s|
|
80
|
+
key = s.match(/\{([^\}]+)\}/)[1]
|
81
|
+
record[key]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
72
86
|
class Pattern
|
73
87
|
attr_reader :matches, :count_value
|
74
88
|
|
@@ -90,7 +104,7 @@ module Fluent
|
|
90
104
|
if conf_element.has_key?('utc')
|
91
105
|
is_localtime = false
|
92
106
|
end
|
93
|
-
@count_key_format =
|
107
|
+
@count_key_format = [conf_element['count_key_format'], is_localtime]
|
94
108
|
end
|
95
109
|
|
96
110
|
@count_value = 1
|
@@ -120,11 +134,13 @@ module Fluent
|
|
120
134
|
return true
|
121
135
|
end
|
122
136
|
|
123
|
-
def get_count_key(time)
|
137
|
+
def get_count_key(time, record)
|
124
138
|
if @count_key_format == nil
|
125
139
|
@count_key
|
126
140
|
else
|
127
|
-
@count_key_format.
|
141
|
+
count_key = RecordValueFormatter.new(@count_key_format[0]).key(record)
|
142
|
+
formatter = TimeFormatter.new(count_key, @count_key_format[1])
|
143
|
+
formatter.format(time)
|
128
144
|
end
|
129
145
|
end
|
130
146
|
end
|
@@ -54,11 +54,11 @@ class RedisCounterTest < Test::Unit::TestCase
|
|
54
54
|
assert_equal 2, driver.instance.patterns[0].matches.size
|
55
55
|
assert_equal Regexp.new('^2[0-9]{2}$'), driver.instance.patterns[0].matches['status']
|
56
56
|
assert_equal Regexp.new('^https'), driver.instance.patterns[0].matches['url']
|
57
|
-
assert_equal 'status-normal', driver.instance.patterns[0].get_count_key(Time.now.to_i)
|
57
|
+
assert_equal 'status-normal', driver.instance.patterns[0].get_count_key(Time.now.to_i, {})
|
58
58
|
assert_equal 1, driver.instance.patterns[0].count_value
|
59
59
|
|
60
60
|
assert_equal 0, driver.instance.patterns[1].matches.size
|
61
|
-
assert_equal 'foo', driver.instance.patterns[1].get_count_key(Time.now.to_i)
|
61
|
+
assert_equal 'foo', driver.instance.patterns[1].get_count_key(Time.now.to_i, {})
|
62
62
|
assert_equal 2, driver.instance.patterns[1].count_value
|
63
63
|
end
|
64
64
|
|
@@ -97,7 +97,7 @@ class RedisCounterTest < Test::Unit::TestCase
|
|
97
97
|
</pattern>
|
98
98
|
]
|
99
99
|
time = Time.parse('2011-06-21 03:12:01 UTC').to_i
|
100
|
-
assert_equal 'foo-2011-06-21-03-12-01', driver.instance.patterns[0].get_count_key(time)
|
100
|
+
assert_equal 'foo-2011-06-21-03-12-01', driver.instance.patterns[0].get_count_key(time, {})
|
101
101
|
end
|
102
102
|
|
103
103
|
def test_configure_count_key_format_localtime
|
@@ -108,7 +108,7 @@ class RedisCounterTest < Test::Unit::TestCase
|
|
108
108
|
</pattern>
|
109
109
|
]
|
110
110
|
local_time = Time.parse('2012-06-21 03:12:00').to_i
|
111
|
-
assert_equal 'foo-2012-06-21-03-12-00', driver.instance.patterns[0].get_count_key(local_time)
|
111
|
+
assert_equal 'foo-2012-06-21-03-12-00', driver.instance.patterns[0].get_count_key(local_time, {})
|
112
112
|
end
|
113
113
|
|
114
114
|
def test_configure_duplicated_timezone
|
@@ -126,6 +126,18 @@ class RedisCounterTest < Test::Unit::TestCase
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
+
def test_configure_count_key_format_with_record_value_formatter
|
130
|
+
driver = create_driver %[
|
131
|
+
<pattern>
|
132
|
+
count_key_format %_{prefix}-foo-%Y-%m-%_{type}-%_{customer_id}
|
133
|
+
localtime
|
134
|
+
</pattern>
|
135
|
+
]
|
136
|
+
local_time = Time.parse('2012-06-21 03:12:00').to_i
|
137
|
+
record = {'prefix' => 'pre', 'type' => 'bar', 'customer_id' => 321}
|
138
|
+
assert_equal 'pre-foo-2012-06-bar-321', driver.instance.patterns[0].get_count_key(local_time, record)
|
139
|
+
end
|
140
|
+
|
129
141
|
def test_configure_invalid_count_value
|
130
142
|
begin
|
131
143
|
create_driver %[
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|
@@ -80,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
80
|
version: '0'
|
81
81
|
requirements: []
|
82
82
|
rubyforge_project:
|
83
|
-
rubygems_version: 1.8.
|
83
|
+
rubygems_version: 1.8.25
|
84
84
|
signing_key:
|
85
85
|
specification_version: 3
|
86
86
|
summary: Redis counter plugin for fluent
|