hg-api 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 +4 -4
- data/README.md +16 -2
- data/lib/hg_api/client.rb +37 -10
- data/lib/hg_api/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4d586a9dc6008c4b2850fb6222040b334fdd3c1
|
4
|
+
data.tar.gz: 0191a6b0e33a137be05b4044275297099bfd6ecc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffb639122d85d49bbcefa9216d4325eb6c627e2a9000d99cba14a2fb3247179597c2ea2ae3c2c720d9b34aaf9dccd50fba520820a485f9f94209c7d07435164c
|
7
|
+
data.tar.gz: c2e75bdfb457a5408c53109030f6da6c6a0232595ca8646bd4e6c570ef98365738295cf68c5fb2513dd1478ef74a1a206d44dc55235e720d9319e8c6c89c0dd9
|
data/README.md
CHANGED
@@ -24,7 +24,7 @@ client.metric("signup", 1)
|
|
24
24
|
client.metric("load", 100, via: :tcp)
|
25
25
|
```
|
26
26
|
|
27
|
-
Default transport is
|
27
|
+
Default transport is UDP, it can be changed by passing options hash while
|
28
28
|
constructing client:
|
29
29
|
|
30
30
|
```ruby
|
@@ -34,7 +34,21 @@ client.metric("this.metric.send.over.http", 5)
|
|
34
34
|
|
35
35
|
Supported transports: udp, tcp, http.
|
36
36
|
|
37
|
-
API KEY must be present as environmental variable HOSTED_GRAPHITE_API_KEY
|
37
|
+
API KEY must be present as environmental variable `HOSTED_GRAPHITE_API_KEY`.
|
38
|
+
|
39
|
+
Host and port for UDP also can be configured via env vars, `HOSTED_GRAPHITE_HOST`
|
40
|
+
and `HOSTED_GRAPHITE_PORT` respectively, as well as URI for HTTP - `HOSTED_GRAPHITE_PORT`.
|
41
|
+
|
42
|
+
Default settings are `carbon.hostedgraphite.com` host and `2003` port, http uri `https://hostedgraphite.com/api/v1/sink`.
|
43
|
+
|
44
|
+
Also you can pass prefix, which will be added to each key:
|
45
|
+
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
client = HGAPI.new(prefix: ["apps", "yourappname"])
|
49
|
+
# or:
|
50
|
+
client = HGAPI.new(prefix: "apps.yourappname")
|
51
|
+
```
|
38
52
|
|
39
53
|
## Contributing
|
40
54
|
|
data/lib/hg_api/client.rb
CHANGED
@@ -8,19 +8,38 @@ module HGAPI
|
|
8
8
|
HOST = 'carbon.hostedgraphite.com'
|
9
9
|
PORT = 2003
|
10
10
|
|
11
|
+
attr_reader :disabled, :settings
|
12
|
+
|
11
13
|
def initialize(options = {})
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@disabled = @api_key.nil?
|
14
|
+
@settings = build_settings(options)
|
15
|
+
@disabled = @settings[:api_key].nil?
|
15
16
|
end
|
16
17
|
|
17
18
|
def metric(key, value, options = {})
|
18
19
|
return if @disabled
|
19
|
-
send_metric(key, value, check_transport!(options[:via]) ||
|
20
|
+
send_metric(key, value, check_transport!(options[:via]) || settings[:default_transport])
|
21
|
+
end
|
22
|
+
|
23
|
+
def time(key, options = {})
|
24
|
+
start = Time.now
|
25
|
+
result = yield
|
26
|
+
metric(key, ((Time.now - start) * 1000).round, options)
|
27
|
+
result
|
20
28
|
end
|
21
29
|
|
22
30
|
private
|
23
31
|
|
32
|
+
def build_settings(options)
|
33
|
+
{
|
34
|
+
:api_key => ENV["HOSTED_GRAPHITE_API_KEY"],
|
35
|
+
:host => ENV["HOSTED_GRAPHITE_HOST"] || HOST,
|
36
|
+
:port => ENV["HOSTED_GRAPHITE_PORT"] || PORT,
|
37
|
+
:http_uri => ENV["HOSTED_GRAPHITE_HTTP_URI"] || HTTP_URI,
|
38
|
+
:default_transport => check_transport!(options[:via]) || :udp,
|
39
|
+
:prefix => options[:prefix]
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
24
43
|
def check_transport!(transport)
|
25
44
|
if transport && !SUPPORTED_TRANSPORTS.include?(transport.to_sym)
|
26
45
|
raise "#{transport} is unsupported transport"
|
@@ -34,26 +53,34 @@ module HGAPI
|
|
34
53
|
|
35
54
|
def send_metric_udp(key, value)
|
36
55
|
sock = UDPSocket.new
|
37
|
-
sock.send "#{@api_key}.#{key} #{value}\n", 0,
|
56
|
+
sock.send "#{@settings[:api_key]}.#{prefix}#{key} #{value}\n", 0, @settings[:host], @settings[:port]
|
38
57
|
sock.close
|
39
58
|
end
|
40
59
|
|
41
60
|
def send_metric_tcp(key, value)
|
42
|
-
conn = TCPSocket.new
|
43
|
-
conn.puts "#{@api_key}.#{key} #{value}\n"
|
61
|
+
conn = TCPSocket.new @settings[:host], @settings[:port]
|
62
|
+
conn.puts "#{@settings[:api_key]}.#{prefix}#{key} #{value}\n"
|
44
63
|
conn.close
|
45
64
|
end
|
46
65
|
|
47
66
|
def send_metric_http(key, value)
|
48
|
-
uri = URI(
|
67
|
+
uri = URI(@settings[:http_uri])
|
49
68
|
|
50
69
|
req = Net::HTTP::Post.new(uri.request_uri)
|
51
|
-
req.basic_auth @api_key, nil
|
52
|
-
req.body = "#{key} #{value}"
|
70
|
+
req.basic_auth @settings[:api_key], nil
|
71
|
+
req.body = "#{prefix}#{key} #{value}"
|
53
72
|
|
54
73
|
res = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
55
74
|
http.request(req)
|
56
75
|
end
|
57
76
|
end
|
77
|
+
|
78
|
+
def prefix
|
79
|
+
@prefix ||= if settings[:prefix] && !settings[:prefix].empty?
|
80
|
+
Array(settings[:prefix]).join('.') << '.'
|
81
|
+
else
|
82
|
+
""
|
83
|
+
end
|
84
|
+
end
|
58
85
|
end
|
59
86
|
end
|
data/lib/hg_api/version.rb
CHANGED