statful-client 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/client.rb +32 -6
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d4790086f7421d9a53045ba31a4da10bb8b2ca7
|
4
|
+
data.tar.gz: 67a6103ba572fb7380fa0e6f79357840462deea0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0319bdf271d17dffeda24fc1b1cdcd743d04e41e4e3a9a4978e31b2a6e8783caae7ac2ea2583b8fae223e44171e3042573e634724edd0f97148294d9430562cf
|
7
|
+
data.tar.gz: c7846b4405e5a3599a783ef07865c305ebd25d9fe7f74bc8df0178e8740058c4fa4f732fc1cab6d9138f7a5b1519a1e7675ac0e6b3d442863e3774c243572d1b
|
data/lib/client.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'socket'
|
2
2
|
require 'delegate'
|
3
3
|
require 'net/http'
|
4
|
+
require 'concurrent'
|
4
5
|
|
5
6
|
# Statful Client Instance
|
6
7
|
#
|
@@ -27,6 +28,7 @@ class StatfulClient
|
|
27
28
|
# @option config [Integer] :sample_rate Global sample rate (as a percentage), between: (1-100)
|
28
29
|
# @option config [String] :namespace Global default namespace
|
29
30
|
# @option config [Integer] :flush_size Buffer flush upper size limit
|
31
|
+
# @option config [Integer] :thread_pool_size Thread pool upper size limit
|
30
32
|
# @return [Object] The Statful client
|
31
33
|
def initialize(config = {})
|
32
34
|
user_config = MyHash[config].symbolize_keys
|
@@ -50,12 +52,16 @@ class StatfulClient
|
|
50
52
|
:tags => {},
|
51
53
|
:sample_rate => 100,
|
52
54
|
:namespace => 'application',
|
53
|
-
:flush_size => 5
|
55
|
+
:flush_size => 5,
|
56
|
+
:thread_pool_size => 5
|
54
57
|
}
|
55
58
|
|
56
59
|
@config = default_config.merge(user_config)
|
57
60
|
@logger = @config[:logger]
|
58
|
-
|
61
|
+
|
62
|
+
@buffer = MyQueue.new
|
63
|
+
@pool = Concurrent::FixedThreadPool.new(@config[:thread_pool_size])
|
64
|
+
|
59
65
|
@http = Net::HTTP.new(@config[:host], @config[:port])
|
60
66
|
@http.use_ssl = true # must enforce use of ssl, otherwise it will raise EOFError: end of file reached
|
61
67
|
|
@@ -230,7 +236,7 @@ class StatfulClient
|
|
230
236
|
# @private
|
231
237
|
def flush
|
232
238
|
unless @buffer.empty?
|
233
|
-
message = @buffer.join('\n')
|
239
|
+
message = @buffer.to_a.join('\n')
|
234
240
|
|
235
241
|
# Handle socket errors by just logging if we have a logger instantiated
|
236
242
|
# We could eventually save the buffer state but that would require us to manage the buffer size etc.
|
@@ -275,10 +281,18 @@ class StatfulClient
|
|
275
281
|
'Content-Type' => 'application/json',
|
276
282
|
'M-Api-Token' => @config[:token]
|
277
283
|
}
|
278
|
-
response = @http.send_request('PUT', '/tel/v2.0/metrics', message, headers)
|
279
284
|
|
280
|
-
|
281
|
-
|
285
|
+
@pool.post do
|
286
|
+
begin
|
287
|
+
response = @http.send_request('PUT', '/tel/v2.0/metrics', message, headers)
|
288
|
+
|
289
|
+
if response.code != '201'
|
290
|
+
@logger.debug("Failed to flush message via http with: #{response.code} - #{response.msg}") unless @logger.nil?
|
291
|
+
end
|
292
|
+
rescue StandardError => ex
|
293
|
+
@logger.debug("Statful: #{ex} on #{@config[:host]}:#{@config[:port]}") unless @logger.nil?
|
294
|
+
false
|
295
|
+
end
|
282
296
|
end
|
283
297
|
end
|
284
298
|
|
@@ -319,4 +333,16 @@ class StatfulClient
|
|
319
333
|
symbolize[self]
|
320
334
|
end
|
321
335
|
end
|
336
|
+
|
337
|
+
# Custom Queue implementation to add a to_a method
|
338
|
+
#
|
339
|
+
# @private
|
340
|
+
class MyQueue < Queue
|
341
|
+
# Transform Queue to Array
|
342
|
+
#
|
343
|
+
# @return [Array] queue as array
|
344
|
+
def to_a
|
345
|
+
[].tap { |array| array << pop until empty? }
|
346
|
+
end
|
347
|
+
end
|
322
348
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statful-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Fonseca
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: concurrent-ruby-ext
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|