leela_client 0.0.5 → 1.0.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.
- data/lib/leela_client.rb +0 -2
- data/lib/leela_client/api.rb +2 -3
- data/lib/leela_client/metrics.rb +7 -2
- data/lib/leela_client/transport.rb +64 -4
- data/lib/leela_client/version.rb +4 -1
- metadata +7 -7
data/lib/leela_client.rb
CHANGED
data/lib/leela_client/api.rb
CHANGED
@@ -24,11 +24,10 @@ module LeelaClient
|
|
24
24
|
|
25
25
|
def transport(servers)
|
26
26
|
servers = servers.map do |addr|
|
27
|
-
|
28
|
-
[Resolv.getaddress(host), (port || 6968).to_i]
|
27
|
+
[Resolv.getaddress(addr), addr]
|
29
28
|
end
|
30
29
|
|
31
|
-
|
30
|
+
Transport.new(MD5Ring.from_list(servers))
|
32
31
|
end
|
33
32
|
end
|
34
33
|
end
|
data/lib/leela_client/metrics.rb
CHANGED
@@ -23,7 +23,7 @@ module LeelaClient
|
|
23
23
|
|
24
24
|
def serialize
|
25
25
|
size = @key.size
|
26
|
-
|
26
|
+
time = @timestamp.to_f.to_s
|
27
27
|
if (@value.integer?)
|
28
28
|
value = @value.to_f.to_s
|
29
29
|
elsif (@value.nan?)
|
@@ -36,7 +36,12 @@ module LeelaClient
|
|
36
36
|
value = @value.to_s
|
37
37
|
end
|
38
38
|
|
39
|
-
"#{@type} #{size}|#{@key} #{value} #{
|
39
|
+
"#{@type} #{size}|#{@key} #{value} #{time};"
|
40
|
+
end
|
41
|
+
|
42
|
+
def serialize_json
|
43
|
+
time = @timestamp.to_f.to_s
|
44
|
+
{:name => @key, :type => @type, :value => @value, :timestamp => time}
|
40
45
|
end
|
41
46
|
|
42
47
|
def size
|
@@ -14,12 +14,70 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
+
require "cgi"
|
18
|
+
require "net/http"
|
19
|
+
require "json"
|
20
|
+
|
17
21
|
module LeelaClient
|
18
|
-
|
19
|
-
|
22
|
+
|
23
|
+
class Transport
|
20
24
|
|
21
25
|
def initialize(ring)
|
22
26
|
@ring = ring
|
27
|
+
end
|
28
|
+
|
29
|
+
def send(metrics, opts={:method => :udp})
|
30
|
+
if (opts[:method] == :http)
|
31
|
+
HTTPTransport.new(@ring, opts).send(metrics)
|
32
|
+
elsif (opts[:method] == :udp)
|
33
|
+
UDPTransport.new(@ring, opts).send(metrics)
|
34
|
+
else
|
35
|
+
raise(RuntimeError.new "unknown method: #{opts[:method]}")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class HTTPTransport
|
41
|
+
|
42
|
+
def initialize(ring, opts)
|
43
|
+
@ring = ring
|
44
|
+
@opts = opts
|
45
|
+
end
|
46
|
+
|
47
|
+
def send(metrics)
|
48
|
+
sent = 0
|
49
|
+
proto = @opts[:ssl] ? "https" : "http"
|
50
|
+
port = @opts[:port] || (opts[:ssl] ? 443 : 80)
|
51
|
+
LeelaClient::LoadBalancer.group(@ring, metrics).each do |addr, ms|
|
52
|
+
ms.each do |m|
|
53
|
+
uri = URI("#{proto}://#{addr[1]}:#{port}/v1/" + ::CGI::escape(m.key))
|
54
|
+
res = ::Net::HTTP.start(addr[1],
|
55
|
+
uri.port,
|
56
|
+
:use_ssl => uri.scheme == "https",
|
57
|
+
:open_timeout => @opts[:timeout] || 5,
|
58
|
+
:read_timeout => @opts[:timeout] || 5,
|
59
|
+
:ssl_timeout => @opts[:timeout] || 5) do |http|
|
60
|
+
req = ::Net::HTTP::Post.new(uri.path)
|
61
|
+
req.body = ::JSON::dump(m.serialize_json)
|
62
|
+
req.content_type = "application/json"
|
63
|
+
http.request(req)
|
64
|
+
end
|
65
|
+
if (res.code.to_i == 201)
|
66
|
+
sent += 1
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
return(sent)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class UDPTransport
|
75
|
+
MAXPAYLOAD = 1472
|
76
|
+
DEFAULT_PORT = 6968
|
77
|
+
|
78
|
+
def initialize(ring, opts)
|
79
|
+
@ring = ring
|
80
|
+
@opts = opts
|
23
81
|
@sock = UDPSocket.new
|
24
82
|
end
|
25
83
|
|
@@ -28,12 +86,14 @@ module LeelaClient
|
|
28
86
|
end
|
29
87
|
|
30
88
|
def send(metrics)
|
89
|
+
sent = 0
|
31
90
|
LeelaClient::LoadBalancer.group_limit(@ring, metrics, MAXPAYLOAD).each do |addr, mms|
|
32
91
|
mms.each do |ms|
|
33
|
-
|
34
|
-
|
92
|
+
@sock.send(serialize_list(ms), 0, addr[0], @opts[:port] || DEFAULT_PORT)
|
93
|
+
sent += ms.size # yeah, hopefully!
|
35
94
|
end
|
36
95
|
end
|
96
|
+
return(sent)
|
37
97
|
end
|
38
98
|
end
|
39
99
|
end
|
data/lib/leela_client/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leela_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: A client for leela server
|
16
16
|
email:
|
@@ -20,13 +20,13 @@ executables: []
|
|
20
20
|
extensions: []
|
21
21
|
extra_rdoc_files: []
|
22
22
|
files:
|
23
|
+
- ./lib/leela_client.rb
|
24
|
+
- ./lib/leela_client/metrics.rb
|
25
|
+
- ./lib/leela_client/ring.rb
|
26
|
+
- ./lib/leela_client/api.rb
|
23
27
|
- ./lib/leela_client/version.rb
|
24
28
|
- ./lib/leela_client/transport.rb
|
25
|
-
- ./lib/leela_client/api.rb
|
26
|
-
- ./lib/leela_client/ring.rb
|
27
29
|
- ./lib/leela_client/lb.rb
|
28
|
-
- ./lib/leela_client/metrics.rb
|
29
|
-
- ./lib/leela_client.rb
|
30
30
|
homepage: https://github.com/locaweb/leela-client
|
31
31
|
licenses: []
|
32
32
|
post_install_message:
|
@@ -47,7 +47,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
47
|
version: '0'
|
48
48
|
requirements: []
|
49
49
|
rubyforge_project:
|
50
|
-
rubygems_version: 1.8.
|
50
|
+
rubygems_version: 1.8.24
|
51
51
|
signing_key:
|
52
52
|
specification_version: 3
|
53
53
|
summary: A client for leela server
|