statful-client 2.0.1 → 2.1.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 +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
|