fluent-plugin-mackerel 0.0.1 → 0.0.2

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
- MTA0MzM4MTQ2MTk3OTM4ZTUxNzA3YTBiYmFjOGNiZmY2NjI1MDc4MQ==
4
+ NTY0NzJkZjgzMDMwNzNkNGY1MjdkYmQ5ZTNlNzA2ZTAwZjg2N2I3Nw==
5
5
  data.tar.gz: !binary |-
6
- NTE3NDRiNDM3MzQ5YTA4MGEzOTIwMmY1NTE1NGE5NzJhOGExNWJjYw==
6
+ MzAyNDI3MTdlODNlMzhhNGMwMzEyNmJhOTdkODdlYzY0ZDNiOTc0MQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YmQxN2IyZGY0OGEzODJmMzYzYTgyNzM1MzI3OGI1ZTBiNmRjMGQ4MTY4OGNm
10
- N2U0MzE4MjZmMjM2OTJmNzM3MDBiNTAyZDIwYzdiNzJlYzg2OGQzN2NiNTNk
11
- ZTZmYjEwMTI5Njk0ZGU3NGZhNmFkN2NhYzYyNGFiNmYzMzEzMDQ=
9
+ OWU4YzZlM2Q1Zjk5MzY5OGI2ZWVjODUzYWU0YjY3ZmU0M2Y4YjAzMDVkMjRk
10
+ Yjk5N2U1NzNlNzQwYWI1YjQyNmVmMGM3NzFkM2Q3NDQ3OTg1Y2E3ODYzZDdh
11
+ MjljZDg0MmU1YWUyNzhkNDJjMDQ2YTkxYmRjNmI0ZTI0YjM1YmY=
12
12
  data.tar.gz: !binary |-
13
- ODRhN2I4YzhjMmQxMmFjZWFjNTg4NjMzNmViNDQ0N2QwYTNhNTBkNjhkOWUw
14
- MmEwZjRiMTJjN2QwMDU4ZWYwYmM0NWQ4Y2Y3NjE4ZTQ0M2ZiM2Y2MGU4MTFl
15
- Yjg1NDc0MThkNzQxYzJiM2RjNjQ2YTZlOTI3ODdlOTY3YTEyY2E=
13
+ OTYwYjM0ZGUwMmRjMzRlMjNjYjg2ODIyMWIwMjc5ZWI0OGNlZTkwZmFjNWEx
14
+ MjYwZWZjZWRiNjE4Yzc0NTkyZmY0NjhjZjc3YTkyZjU5ODA3NTU1MTI5MmMz
15
+ YmM1NjFmODBkOGYwMzcwOTY1MWRhZTU5ZTdiNWQ3MTlkNzhiNGI=
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- [Fluentd](http://fluentd.org) plugin to send metrics to [mackerel](http://mackerel.io/).
5
+ [Fluentd](http://fluentd.org) plugin to send metrics to [mackerel.io](http://mackerel.io/).
6
6
 
7
7
  ## Installation
8
8
 
@@ -40,7 +40,9 @@ Then the sent metric data will look like this:
40
40
  "value": 100.0
41
41
  }
42
42
  ```
43
- As shown above, metric name will be a concatenation of metrics_prefix and out_keys values.
43
+ As shown above, metric name will be a concatenation of `metrics_prefix` and `out_keys` values.
44
+
45
+ `flush_interval` is not allowed to set less than 60 secs not to send API requests more than once in a minute.
44
46
 
45
47
  ## TODO
46
48
 
@@ -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.1"
7
+ spec.version = "0.0.2"
8
8
  spec.authors = ["tksmd"]
9
9
  spec.email = ["someda@isenshi.com"]
10
10
  spec.description = %q{fluent plugin to send metrics to mackerel.io}
@@ -8,8 +8,6 @@ module Fluent
8
8
  config_param :metrics_prefix, :string
9
9
  config_param :out_keys, :string
10
10
 
11
- config_param :flush_interval, :time, :default => 1
12
-
13
11
  attr_reader :mackerel
14
12
 
15
13
  # Define `log` method for v0.10.42 or earlier
@@ -27,6 +25,11 @@ module Fluent
27
25
  @mackerel = Mackerel.new(conf['api_key'])
28
26
  @out_keys = @out_keys.split(',')
29
27
 
28
+ if @flush_interval < 60
29
+ log.info("flush_interval less than 60s is not allowed and overwriteen to 60s")
30
+ @flush_interval = 60
31
+ end
32
+
30
33
  if @hostid.nil? and @hostid_path.nil?
31
34
  raise Fluent::ConfigError, "Either 'hostid' or 'hostid_path' must be specifed."
32
35
  end
@@ -63,12 +66,12 @@ module Fluent
63
66
  end
64
67
 
65
68
  begin
66
- @mackerel.post_metrics(metrics)
69
+ @mackerel.post_metrics(metrics) unless metrics.empty?
67
70
  rescue => e
68
71
  log.error("out_mackerel:", :error_class => e.class, :error => e.message)
69
72
  end
73
+ metrics.clear
70
74
  end
71
-
72
75
  end
73
76
 
74
77
  class Mackerel
@@ -85,6 +88,9 @@ module Fluent
85
88
  end
86
89
 
87
90
  def post_metrics(metrics)
91
+
92
+ wait_for_minute
93
+
88
94
  req = Net::HTTP::Post.new('/api/v0/tsdb', initheader = {
89
95
  'X-Api-Key' => @api_key,
90
96
  'Content-Type' =>'application/json',
@@ -102,6 +108,14 @@ module Fluent
102
108
  end
103
109
  end
104
110
 
111
+ def wait_for_minute
112
+ # limit request once per minute
113
+ wait_secs = @last_posted ? @last_posted + 60 - Time.now.to_i : 0
114
+ sleep wait_secs if wait_secs > 0
115
+ @last_posted = Time.now.to_i
116
+ wait_secs > 0
117
+ end
118
+
105
119
  end
106
120
 
107
121
  class MackerelError < RuntimeError; end
@@ -21,6 +21,15 @@ class MackerelOutputTest < Test::Unit::TestCase
21
21
  out_keys val1,val2,val3
22
22
  ]
23
23
 
24
+ CONFIG_SMALL_FLUSH_INTERVAL = %[
25
+ type mackerel
26
+ api_key 123456
27
+ hostid xyz
28
+ metrics_prefix service
29
+ out_keys val1,val2,val3
30
+ flush_interval 1s
31
+ ]
32
+
24
33
  def create_driver(conf = CONFIG, tag='test')
25
34
  Fluent::Test::BufferedOutputTestDriver.new(Fluent::MackerelOutput, tag).configure(conf)
26
35
  end
@@ -35,11 +44,15 @@ class MackerelOutputTest < Test::Unit::TestCase
35
44
  d = create_driver(CONFIG_NOHOST)
36
45
  }
37
46
 
47
+ d = create_driver(CONFIG_SMALL_FLUSH_INTERVAL)
48
+ assert_equal d.instance.instance_variable_get(:@flush_interval), 60
49
+
38
50
  d = create_driver()
39
51
  assert_equal d.instance.instance_variable_get(:@api_key), '123456'
40
52
  assert_equal d.instance.instance_variable_get(:@hostid), 'xyz'
41
53
  assert_equal d.instance.instance_variable_get(:@metrics_prefix), 'service'
42
54
  assert_equal d.instance.instance_variable_get(:@out_keys), ['val1','val2','val3']
55
+ assert_equal d.instance.instance_variable_get(:@flush_interval), 60
43
56
  end
44
57
 
45
58
  def test_write
@@ -60,5 +73,13 @@ class MackerelOutputTest < Test::Unit::TestCase
60
73
  d.run()
61
74
  end
62
75
 
76
+ def test_wait_for_minute
77
+ d = create_driver()
78
+ mackerel = d.instance.mackerel
79
+ assert_equal mackerel.wait_for_minute, false
80
+ assert_equal mackerel.wait_for_minute, true
81
+ sleep 60
82
+ assert_equal mackerel.wait_for_minute, false
83
+ end
63
84
 
64
85
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mackerel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - tksmd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-14 00:00:00.000000000 Z
11
+ date: 2014-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler