profit 0.1.3 → 0.1.4
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/profit/client.rb +29 -14
- data/lib/profit/version.rb +1 -1
- data/spec/lib/client_spec.rb +5 -3
- metadata +4 -4
data/lib/profit/client.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
module Profit
|
2
|
+
|
3
|
+
def self.client
|
4
|
+
@client ||= Client.new
|
5
|
+
end
|
6
|
+
|
2
7
|
class Client
|
3
8
|
|
4
|
-
attr_accessor :ctx, :
|
9
|
+
attr_accessor :ctx, :pending
|
5
10
|
|
6
|
-
def initialize(
|
7
|
-
@ctx
|
8
|
-
@
|
11
|
+
def initialize(options = {})
|
12
|
+
@ctx = options[:ctx] || ZMQ::Context.new
|
13
|
+
@server_address = options[:server_address] || "tcp://127.0.0.1:5556"
|
9
14
|
@pending = {}
|
10
15
|
end
|
11
16
|
|
@@ -17,24 +22,34 @@ module Profit
|
|
17
22
|
# TODO: wrap in a Mutex & make the key a combo of metric_type,
|
18
23
|
# pid, and/or thread object_id to make this thread safe and
|
19
24
|
# thread-robust.
|
20
|
-
@pending[metric_type] = { start_file: start_file,
|
21
|
-
|
22
|
-
|
25
|
+
@pending[key_for(metric_type)] = { start_file: start_file,
|
26
|
+
start_line: start_line,
|
27
|
+
start_time: now }
|
23
28
|
end
|
24
29
|
|
25
30
|
def stop(metric_type)
|
26
31
|
now = Time.now
|
27
|
-
metric = @pending.delete(metric_type)
|
32
|
+
metric = @pending.delete key_for(metric_type)
|
28
33
|
recorded_time = Time.now - metric[:start_time]
|
29
34
|
stop_file = caller[0][/(.+):(.+):/,1]
|
30
35
|
stop_line = caller[0][/(.+):(.+):/,2].to_i - 1
|
31
36
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
37
|
+
socket.send({ metric_type: metric_type,
|
38
|
+
recorded_time: recorded_time,
|
39
|
+
start_file: metric[:start_file],
|
40
|
+
start_line: metric[:start_line],
|
41
|
+
stop_file: stop_file,
|
42
|
+
stop_line: stop_line }.to_json)
|
43
|
+
end
|
44
|
+
|
45
|
+
def socket
|
46
|
+
Thread.current[:socket] ||= @ctx.connect(:PUSH, @server_address)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def key_for(metric_type)
|
52
|
+
"#{metric_type}:#{Thread.current.object_id}"
|
38
53
|
end
|
39
54
|
end
|
40
55
|
end
|
data/lib/profit/version.rb
CHANGED
data/spec/lib/client_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Profit::Client do
|
4
4
|
|
5
5
|
let!(:redis) { Redis.new(host: "127.0.0.1", port: 6379) }
|
6
|
-
let!(:client) { Profit::Client.new(server.ctx) }
|
6
|
+
let!(:client) { Profit::Client.new(ctx: server.ctx) }
|
7
7
|
let!(:server) { TestServer.server }
|
8
8
|
let!(:server_thread) { TestServer.server_thread }
|
9
9
|
|
@@ -60,7 +60,8 @@ describe Profit::Client do
|
|
60
60
|
client.start("some_foo_measurement")
|
61
61
|
now = Time.now
|
62
62
|
|
63
|
-
|
63
|
+
key = client.pending.keys.grep(/some_foo_measurement/).first
|
64
|
+
pending_metric = client.pending[key]
|
64
65
|
expect(pending_metric[:start_time].to_i).to be_within(1).of(now.to_i)
|
65
66
|
end
|
66
67
|
|
@@ -71,7 +72,8 @@ describe Profit::Client do
|
|
71
72
|
start_line = __LINE__
|
72
73
|
start_file = __FILE__
|
73
74
|
|
74
|
-
|
75
|
+
key = client.pending.keys.grep(/some_foo_measurement/).first
|
76
|
+
pending_metric = client.pending[key]
|
75
77
|
expect(pending_metric[:start_file]).to eq start_file
|
76
78
|
expect(pending_metric[:start_line]).to eq start_line
|
77
79
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: profit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
@@ -155,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
155
|
version: '0'
|
156
156
|
segments:
|
157
157
|
- 0
|
158
|
-
hash:
|
158
|
+
hash: 1282582636223262720
|
159
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
@@ -164,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
164
|
version: '0'
|
165
165
|
segments:
|
166
166
|
- 0
|
167
|
-
hash:
|
167
|
+
hash: 1282582636223262720
|
168
168
|
requirements: []
|
169
169
|
rubyforge_project:
|
170
170
|
rubygems_version: 1.8.23
|