fluent-plugin-mackerel 0.0.6 → 0.0.7

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzRhYWRlZGQ3YmJjMDZjZTk5YjgzMjIwY2I2YTllOTZkZDdlMjZhOQ==
4
+ YjlkYmU3MGQ1YTUzNDdmZWYwMDlkMTkwNDk2MGNlY2Y1YjJjNDViMQ==
5
5
  data.tar.gz: !binary |-
6
- NDgyMmQ2MWQwOTY3MmRmM2MwMGM2ODdmYzM5OTNiOTI3YzI0YjdlNw==
6
+ MWY0MDkyMWY3YTg0ODgyNTI1ZTFjMzE2Yjc3YTVhNzhiNGUyMzk5NQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YjVkNGZkM2RhNmQxYzUzYzQ2OTk0ZmRmZTdiNzkzYTNiOTAwMGNmNDQ0MDVl
10
- ODQzZDI1YTI1MDEyODQ2NDQ3MDc4ZDU2YjMyMDIxYTc2Zjk3NzMzZmFmNGI5
11
- ZWY0M2I3MzYzNzczYzMyMjQ0NDRjYTExOTFhYTQ4OThmMGZiNDc=
9
+ Y2M3MjQ3NDIyNjQxZjFlNjRhMDAyNjViYzI1NmRmMmU5NzdhODBkYzUxN2M5
10
+ YTBhZTY4MDc4MjhmY2Y2YWM0NWQxZGQyNmU4MGQzOGRhMGMxNzliMTkxOGE4
11
+ MzQ1N2YzNmNkOWI0NTUzMzVmMDI5ZWRkMWUwNzliNDY2NGI4NzM=
12
12
  data.tar.gz: !binary |-
13
- ZThiMDZmNzczMzU4ZmFiNTU4Y2VhNGU2YmQzNjdiNDA1OWE5MzA4MDJiM2Qx
14
- YWNiOWQ5OGJiNjg2MTY2ZTMzNmEwNWQ2YTg5ZGQyNmUzYmU4ZmU1MjdjZWI0
15
- ZWJjMDZmMzEyOTU3OTc2Yjc5ZDI1NzRiNzAxMGNlNDY3ZWFjZTg=
13
+ MzBjZjYxOThmNjhlNzY5NmFjOWNkOTdmYzg0NTY0ZTFiYWI3N2EzZTg2YmVi
14
+ MDNkYTJjY2IwY2U5NWUyNTk3ZjZhZDIwNTgzZjA3MzJmNGQxMzhhMThjMWUy
15
+ MzIxMzE0YmFkY2VjZjhhODYxNTZiOGYyMmEwODg2MDBhMGJhNTk=
data/README.md CHANGED
@@ -44,6 +44,17 @@ Then the sent metric data will look like this:
44
44
  ```
45
45
  As shown above, `${out_key}` will be replaced with out_key like "2xx_count" when sending metrics.
46
46
 
47
+ You can use `out_key_pattern` instead of `out_keys`. Input records whose key matches the pattern set to `out_key_pattern` will be sent. Either `out_keys` or `out_key_pattern` is required.
48
+
49
+ ```
50
+ <match ...>
51
+ type mackerel
52
+ api_key 123456
53
+ service yourservice
54
+ metrics_name http_status.${out_key}
55
+ out_key_pattern [2-5]xx_count
56
+ ```
57
+
47
58
  You can use `${[n]}` for `mackerel_name` where `n` represents any decimal number including negative value,
48
59
 
49
60
  ```
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-mackerel"
7
- spec.version = "0.0.6"
7
+ spec.version = "0.0.7"
8
8
  spec.authors = ["tksmd","hatz48"]
9
9
  spec.email = ["someda@isenshi.com"]
10
10
  spec.description = %q{fluent plugin to send metrics to mackerel.io}
@@ -9,7 +9,8 @@ module Fluent
9
9
  config_param :hostid_path, :string, :default => nil
10
10
  config_param :service, :string, :default => nil
11
11
  config_param :metrics_name, :string, :default => nil
12
- config_param :out_keys, :string
12
+ config_param :out_keys, :string, :default => nil
13
+ config_param :out_key_pattern, :string, :default => nil
13
14
  config_param :origin, :string, :default => nil
14
15
 
15
16
  attr_reader :mackerel
@@ -27,7 +28,16 @@ module Fluent
27
28
  super
28
29
 
29
30
  @mackerel = Mackerel::Client.new(:mackerel_api_key => conf['api_key'], :mackerel_origin => conf['origin'])
30
- @out_keys = @out_keys.split(',')
31
+
32
+ if @out_keys
33
+ @out_keys = @out_keys.split(',')
34
+ end
35
+ if @out_key_pattern
36
+ @out_key_pattern = Regexp.new(@out_key_pattern)
37
+ end
38
+ if @out_keys.nil? and @out_key_pattern.nil?
39
+ raise Fluent::ConfigError, "Either 'out_keys' or 'out_key_pattern' must be specifed."
40
+ end
31
41
 
32
42
  if @flush_interval < 60
33
43
  log.info("flush_interval less than 60s is not allowed and overwritten to 60s")
@@ -89,10 +99,14 @@ module Fluent
89
99
  chunk.msgpack_each do |(tag,time,record)|
90
100
 
91
101
  tokens = tag.split('.')
92
- out_keys.map do |key|
93
102
 
94
- next unless record.has_key?(key)
103
+ if @out_keys
104
+ out_keys = @out_keys.select{|key| record.has_key?(key)}
105
+ else # @out_key_pattern
106
+ out_keys = record.keys.select{|key| @out_key_pattern.match(key)}
107
+ end
95
108
 
109
+ out_keys.map do |key|
96
110
  name = @name_processor.nil? ? key :
97
111
  @name_processor.map{ |p| p.call(:out_key => key, :tokens => tokens) }.join('.')
98
112
 
@@ -46,6 +46,21 @@ class MackerelOutputTest < Test::Unit::TestCase
46
46
  origin example.domain
47
47
  ]
48
48
 
49
+ CONFIG_NO_OUT_KEYS = %[
50
+ type mackerel
51
+ api_key 123456
52
+ hostid xyz
53
+ metrics_name service.${out_key}
54
+ ]
55
+
56
+ CONFIG_OUT_KEY_PATTERN = %[
57
+ type mackerel
58
+ api_key 123456
59
+ hostid xyz
60
+ metrics_name service.${out_key}
61
+ out_key_pattern ^val[0-9]$
62
+ ]
63
+
49
64
  def create_driver(conf = CONFIG, tag='test')
50
65
  Fluent::Test::BufferedOutputTestDriver.new(Fluent::MackerelOutput, tag).configure(conf)
51
66
  end
@@ -64,6 +79,10 @@ class MackerelOutputTest < Test::Unit::TestCase
64
79
  d = create_driver(CONFIG_BLANK_METRICS)
65
80
  }
66
81
 
82
+ assert_raise(Fluent::ConfigError) {
83
+ d = create_driver(CONFIG_NO_OUT_KEYS)
84
+ }
85
+
67
86
  d = create_driver(CONFIG_SMALL_FLUSH_INTERVAL)
68
87
  assert_equal d.instance.instance_variable_get(:@flush_interval), 60
69
88
 
@@ -76,6 +95,10 @@ class MackerelOutputTest < Test::Unit::TestCase
76
95
  assert_equal d.instance.instance_variable_get(:@metrics_name), 'service.${out_key}'
77
96
  assert_equal d.instance.instance_variable_get(:@out_keys), ['val1','val2','val3']
78
97
  assert_equal d.instance.instance_variable_get(:@flush_interval), 60
98
+
99
+ d = create_driver(CONFIG_OUT_KEY_PATTERN)
100
+ assert_match d.instance.instance_variable_get(:@out_key_pattern), "val1"
101
+ assert_no_match d.instance.instance_variable_get(:@out_key_pattern), "foo"
79
102
  end
80
103
 
81
104
  def test_write
@@ -99,4 +122,17 @@ class MackerelOutputTest < Test::Unit::TestCase
99
122
  d.run()
100
123
  end
101
124
 
125
+ def test_write_pattern
126
+ d = create_driver(CONFIG_OUT_KEY_PATTERN)
127
+ mock(d.instance.mackerel).post_metrics([
128
+ {"hostId"=>"xyz", "value"=>1.0, "time"=>1399997498, "name"=>"custom.service.val1"},
129
+ {"hostId"=>"xyz", "value"=>2.0, "time"=>1399997498, "name"=>"custom.service.val2"},
130
+ ])
131
+
132
+ ENV["TZ"]="Asia/Tokyo"
133
+ t = Time.strptime('2014-05-14 01:11:38', '%Y-%m-%d %T')
134
+ d.emit({'val1' => 1, 'val2' => 2, 'foo' => 3}, t)
135
+ d.run()
136
+ end
137
+
102
138
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mackerel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - tksmd
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-12 00:00:00.000000000 Z
12
+ date: 2014-09-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mackerel-client