fluent-plugin-graphite 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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb2b5a48b74f901c54c21c8fb7c0bf4492358fbf
4
- data.tar.gz: 1049ff77493b983e5e9fff69c9acee314399f211
3
+ metadata.gz: 02cf8a6679ad334eb0e532d8777b74dee55f2182
4
+ data.tar.gz: 3d832195d3b3b51aac2aae953898e709146e2779
5
5
  SHA512:
6
- metadata.gz: 7523d45cc02152cc0508fa2b4b2b7aa9a0d63f7012bf9d49c9c7c76f9e135cb1d9cb0ebe04c89db734505c132cff1f21b04209fca31f901d76695354c8f799de
7
- data.tar.gz: e780bb5924d6bc48f0607c491fc01285519e501d9d683db27b251fb359a13973b0e299e6482b723765176e68c45ffc3fd9f17867cc473adbbf36f03990dbe618
6
+ metadata.gz: f29680eb0e6c9b510aacc5e98f4a86c12748a1afc0b87b2cb2534252bc350a5543a9bcb49dd86535bff0615d41d472b982ae6f29033036777fac1011db39fbb5
7
+ data.tar.gz: 5801fe77f4c62e6e16de13e575c42864403df0535cbc56b11c782fb31afa148a5799886731948d76e7dac073330d6cc6f3048ba2268bb3a4ec326a52b4bed392
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = 'fluent-plugin-graphite'
6
- gem.version = '0.0.6'
6
+ gem.version = '0.0.7'
7
7
  gem.authors = ['Satoshi SUZUKI']
8
8
  gem.email = 'studio3104.com@gmail.com'
9
9
  gem.homepage = 'https://github.com/studio3104/fluent-plugin-graphite'
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
21
21
  gem.add_runtime_dependency 'fluent-mixin-rewrite-tag-name'
22
22
  gem.add_runtime_dependency 'graphite-api'
23
23
  gem.add_development_dependency 'rake'
24
+ gem.add_development_dependency 'test-unit', '~> 3.2.0'
24
25
  end
@@ -24,7 +24,7 @@ class Fluent::GraphiteOutput < Fluent::Output
24
24
 
25
25
  def start
26
26
  super
27
- @client = GraphiteAPI.new(graphite: "#{@host}:#{@port}")
27
+ connect_client!
28
28
  end
29
29
 
30
30
  def configure(conf)
@@ -47,6 +47,8 @@ class Fluent::GraphiteOutput < Fluent::Output
47
47
  if @name_key_pattern
48
48
  @name_key_pattern = Regexp.new(@name_key_pattern)
49
49
  end
50
+ # How many times to retry the call if timeout raised
51
+ @max_retries ||= 3
50
52
  end
51
53
 
52
54
  def emit(tag, es, chain)
@@ -64,9 +66,9 @@ class Fluent::GraphiteOutput < Fluent::Output
64
66
 
65
67
  def format_metrics(tag, record)
66
68
  filtered_record = if @name_keys
67
- record.select { |k,v| @name_keys.include?(k) }
69
+ record.select { |k,v| @name_keys.include?(k.to_s) }
68
70
  else # defined @name_key_pattern
69
- record.select { |k,v| @name_key_pattern.match(k) }
71
+ record.select { |k,v| @name_key_pattern.match(k.to_s) }
70
72
  end
71
73
 
72
74
  return nil if filtered_record.empty?
@@ -75,9 +77,9 @@ class Fluent::GraphiteOutput < Fluent::Output
75
77
  tag = tag.sub(/\.$/, '') # may include a dot at the end of the emit_tag fluent-mixin-rewrite-tag-name returns. remove it.
76
78
  filtered_record.each do |k, v|
77
79
  key = case @tag_for
78
- when 'ignore' then k
79
- when 'prefix' then tag + '.' + k
80
- when 'suffix' then k + '.' + tag
80
+ when 'ignore' then k.to_s
81
+ when 'prefix' then "#{tag}.#{k}"
82
+ when 'suffix' then "#{k}.#{tag}"
81
83
  end
82
84
 
83
85
  key = key.gsub(/(\s|\/)+/, '_') # cope with in the case of containing symbols or spaces in the key of the record like in_dstat.
@@ -87,10 +89,27 @@ class Fluent::GraphiteOutput < Fluent::Output
87
89
  end
88
90
 
89
91
  def post(metrics, time)
92
+ trial ||= 1
90
93
  @client.metrics(metrics, time)
94
+ rescue Errno::ETIMEDOUT
95
+ # after long periods with nothing emitted, the connection will be closed and result in timeout
96
+ if trial <= @max_retries
97
+ log.warn "out_graphite: connection timeout to #{@host}:#{@port}. Reconnecting... "
98
+ trial += 1
99
+ connect_client!
100
+ retry
101
+ else
102
+ log.error "out_graphite: ERROR: connection timeout to #{@host}:#{@port}. Exceeded max_retries #{@max_retries}"
103
+ end
91
104
  rescue Errno::ECONNREFUSED
92
105
  log.warn "out_graphite: connection refused by #{@host}:#{@port}"
93
106
  rescue SocketError => se
94
107
  log.warn "out_graphite: socket error by #{@host}:#{@port} :#{se}"
108
+ rescue StandardError => e
109
+ log.error "out_graphite: ERROR: #{e}"
110
+ end
111
+
112
+ def connect_client!
113
+ @client = GraphiteAPI.new(graphite: "#{@host}:#{@port}")
95
114
  end
96
115
  end
@@ -83,7 +83,7 @@ class GraphiteOutputTest < Test::Unit::TestCase
83
83
  assert_raise(Fluent::ConfigError) { d = create_driver(CONFIG_SPECIFY_BOTH_NAME_KEYS_AND_NAME_KEY_PATTERN) }
84
84
  end
85
85
 
86
- def test_format_metrics
86
+ def test_format_metrics_strings
87
87
  record = {
88
88
  'hostname' => 'localhost.localdomain',
89
89
  'dstat.total cpu usage.usr' => '0.0',
@@ -94,6 +94,24 @@ class GraphiteOutputTest < Test::Unit::TestCase
94
94
  'dstat.total cpu usage.siq' => '0.0'
95
95
  }
96
96
 
97
+ run_format_metrics_assertions(record)
98
+ end
99
+
100
+ def test_format_metrics_symbols
101
+ record = {
102
+ :'hostname' => 'localhost.localdomain',
103
+ :'dstat.total cpu usage.usr' => '0.0',
104
+ :'dstat.total cpu usage.sys' => '0.0',
105
+ :'dstat.total cpu usage.idl' => '100.0',
106
+ :'dstat.total cpu usage.wai' => '0.0',
107
+ :'dstat.total cpu usage.hiq' => '0.0',
108
+ :'dstat.total cpu usage.siq' => '0.0'
109
+ }
110
+
111
+ run_format_metrics_assertions(record)
112
+ end
113
+
114
+ def run_format_metrics_assertions(record)
97
115
  d = create_driver
98
116
  m1 = d.instance.format_metrics('test.', record)
99
117
  assert_equal m1, { 'test.dstat.total_cpu_usage.usr' => 0.0, 'test.dstat.total_cpu_usage.sys' => 0.0, 'test.dstat.total_cpu_usage.idl' => 100.0, 'test.dstat.total_cpu_usage.wai' => 0.0, 'test.dstat.total_cpu_usage.hiq' => 0.0, 'test.dstat.total_cpu_usage.siq' => 0.0 }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-graphite
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
  - Satoshi SUZUKI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-14 00:00:00.000000000 Z
11
+ date: 2017-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.2.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.2.0
69
83
  description: fluentd output plugin to send metrics to graphite
70
84
  email: studio3104.com@gmail.com
71
85
  executables: []
@@ -102,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
116
  version: '0'
103
117
  requirements: []
104
118
  rubyforge_project:
105
- rubygems_version: 2.2.2
119
+ rubygems_version: 2.5.1
106
120
  signing_key:
107
121
  specification_version: 4
108
122
  summary: fluentd output plugin to send metrics to graphite