ffwd-kairosdb 0.2.4 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e36ff45d69b3dc01b2c78f6f76600b2dacfce747
4
- data.tar.gz: d804e576bd3bb9df3e920f2118a5ee1c2c3d8dae
3
+ metadata.gz: c847b7694b20491e0e5cec03e920d9fd6ac66168
4
+ data.tar.gz: 1111fea050eb39e19862d215fec95e303ba822fa
5
5
  SHA512:
6
- metadata.gz: 5c99c2e8c6c4ce5a6727a97c30b07c760de601351d867a010a974cc0929010b30747dc32ace45936b2c9d07a84d11118326d3cea8fb79d3a789dac36b57554bf
7
- data.tar.gz: 9683d41400ab9e2bef1ccaa9194d012f5e91d39600266deda59d496a03ec4a26a152ef4c47ef0a561f2fab5f4afbc7e905a8eeb2ca1ac50c77ded6fdfc871352
6
+ metadata.gz: 7c8208441ea471b67df9561fea1d2ed88ef47e2fb7bdcd9e617539fe3d6bee0ee3c950e40cac68ba4e82f1edcc091d6a476c6395ec9e19161d681e6e6d717e3d
7
+ data.tar.gz: 27d981894adbc070241496b20ad4a81292d8ada16f70d30af967bc5e7bb54415957e91b486a267a59c2231842e61eba5ee172ff0ae699b19d2b4b27d9387a13c
@@ -0,0 +1,58 @@
1
+ # $LICENSE
2
+ # Copyright 2013-2014 Spotify AB. All rights reserved.
3
+ #
4
+ # The contents of this file are licensed under the Apache License, Version 2.0
5
+ # (the "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations under
14
+ # the License.
15
+
16
+ require 'json'
17
+
18
+ require_relative 'utils'
19
+
20
+ require 'ffwd/flushing_output_hook'
21
+
22
+ module FFWD::Plugin::KairosDB
23
+ class Hook < FFWD::FlushingOutputHook
24
+ HEADER = {
25
+ "Content-Type" => "application/json"
26
+ }
27
+
28
+ API_PATH = "/api/v1/series"
29
+
30
+ def initialize url
31
+ @c = nil
32
+ @url = url
33
+ end
34
+
35
+ def active?
36
+ not @c.nil?
37
+ end
38
+
39
+ def connect
40
+ @c = EM::HttpRequest.new(@url)
41
+ end
42
+
43
+ def close
44
+ @c.close
45
+ @c = nil
46
+ end
47
+
48
+ def send metrics
49
+ metrics = Utils.make_metrics(metrics)
50
+ metrics = JSON.dump(metrics)
51
+ @c.post(:path => API_PATH, :head => HEADER, :body => metrics)
52
+ end
53
+
54
+ def reporter_meta
55
+ {:component => :datadog}
56
+ end
57
+ end
58
+ end
@@ -16,7 +16,7 @@
16
16
  module FFWD
17
17
  module Plugin
18
18
  module KairosDB
19
- VERSION = "0.2.4"
19
+ VERSION = "0.3.0"
20
20
  end
21
21
  end
22
22
  end
@@ -19,8 +19,9 @@ require 'em-http'
19
19
  require 'ffwd/logging'
20
20
  require 'ffwd/plugin'
21
21
  require 'ffwd/reporter'
22
+ require 'ffwd/flushing_output'
22
23
 
23
- require_relative 'kairosdb/output'
24
+ require_relative 'kairosdb/hook'
24
25
 
25
26
  module FFWD::Plugin::KairosDB
26
27
  include FFWD::Plugin
@@ -32,21 +33,13 @@ module FFWD::Plugin::KairosDB
32
33
  DEFAULT_FLUSH_INTERVAL = 10
33
34
  DEFAULT_BUFFER_LIMIT = 100000
34
35
 
35
- class Setup
36
- def initialize log, opts
37
- @log = log
38
- @opts = opts
39
- end
40
-
41
- def connect core
42
- url = @opts[:url] || DEFAULT_URL
43
- flush_interval = @opts[:flush_interval] || DEFAULT_FLUSH_INTERVAL
44
- buffer_limit = @opts[:buffer_limit] || DEFAULT_BUFFER_LIMIT
45
- Output.new core, @log, url, flush_interval, buffer_limit
46
- end
47
- end
36
+ def self.setup_output config
37
+ config[:url] ||= DEFAULT_URL
38
+ config[:flush_interval] ||= DEFAULT_FLUSH_INTERVAL
39
+ config[:buffer_limit] ||= DEFAULT_BUFFER_LIMIT
40
+
41
+ hook = Hook.new(config[:url])
48
42
 
49
- def self.setup_output opts
50
- Setup.new log, opts
43
+ FFWD.flushing_output log, hook, config
51
44
  end
52
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffwd-kairosdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John-John Tedro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-12 00:00:00.000000000 Z
11
+ date: 2014-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.4
33
+ version: 0.3.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.4
40
+ version: 0.3.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - lib/ffwd/plugin/kairosdb.rb
77
- - lib/ffwd/plugin/kairosdb/output.rb
77
+ - lib/ffwd/plugin/kairosdb/hook.rb
78
78
  - lib/ffwd/plugin/kairosdb/utils.rb
79
79
  - lib/ffwd/plugin/kairosdb/version.rb
80
80
  homepage: https://github.com/spotify/ffwd
@@ -1,130 +0,0 @@
1
- # $LICENSE
2
- # Copyright 2013-2014 Spotify AB. All rights reserved.
3
- #
4
- # The contents of this file are licensed under the Apache License, Version 2.0
5
- # (the "License"); you may not use this file except in compliance with the
6
- # License. You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
- # License for the specific language governing permissions and limitations under
14
- # the License.
15
-
16
- require 'ffwd/reporter'
17
-
18
- require_relative 'utils'
19
-
20
- module FFWD::Plugin::KairosDB
21
- class Output
22
- include FFWD::Reporter
23
- setup_reporter :keys => [:dropped_metrics, :sent_metrics, :failed_metrics]
24
-
25
- attr_reader :log, :reporter_meta
26
-
27
- HEADER = {
28
- "Content-Type" => "application/json"
29
- }
30
-
31
- API_PATH = "/api/v1/datapoints"
32
-
33
- def initialize core, log, url, flush_interval, buffer_limit
34
- @log = log
35
- @url = url
36
- @flush_interval = flush_interval
37
- @buffer_limit = buffer_limit
38
- @reporter_meta = {:type => "kairosdb_out", :url => @url}
39
-
40
- @buffer = []
41
- @pending = nil
42
- @c = nil
43
-
44
- @sub = nil
45
-
46
- core.starting do
47
- log.info "Will send events to #{@url}"
48
-
49
- @c = EM::HttpRequest.new(@url)
50
-
51
- @sub = core.output.metric_subscribe do |metric|
52
- if @buffer.size >= @buffer_limit
53
- increment :dropped_metrics, 1
54
- next
55
- end
56
-
57
- @buffer << metric
58
- check_timer!
59
- end
60
- end
61
-
62
- core.stopping do
63
- # Close is buggy, don.
64
- #@c.close
65
-
66
- log.info "Closing connection to #{@url}"
67
-
68
- if @sub
69
- @sub.unsubscribe
70
- @sub = nil
71
- end
72
-
73
- if @timer
74
- @timer.cancel
75
- @timer = nil
76
- end
77
- end
78
- end
79
-
80
- def flush!
81
- if @timer
82
- @timer.cancel
83
- @timer = nil
84
- end
85
-
86
- if @pending
87
- log.info "Request already in progress, dropping metrics"
88
- increment :dropped_metrics, @buffer.size
89
- @buffer.clear
90
- return
91
- end
92
-
93
- unless @c
94
- log.error "Dropping metrics, no active connection available"
95
- increment :dropped_metrics, @buffer.size
96
- @buffer.clear
97
- return
98
- end
99
-
100
- buffer_size = @buffer.size
101
- metrics = Utils.make_metrics(@buffer)
102
- metrics = JSON.dump(metrics)
103
- @buffer.clear
104
-
105
- log.info "Sending #{buffer_size} metric(s) to #{@url}"
106
- @pending = @c.post(:path => API_PATH, :head => HEADER, :body => metrics)
107
-
108
- @pending.callback do
109
- increment :sent_metrics, buffer_size
110
- @pending = nil
111
- end
112
-
113
- @pending.errback do
114
- log.error "Failed to submit events: #{@pending.error}"
115
- increment :failed_metrics, buffer_size
116
- @pending = nil
117
- end
118
- end
119
-
120
- def check_timer!
121
- return if @timer
122
-
123
- log.debug "Setting timer to #{@flush_interval}s"
124
-
125
- @timer = EM::Timer.new(@flush_interval) do
126
- flush!
127
- end
128
- end
129
- end
130
- end