pirate_metrics_agent 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +14 -1
- data/lib/pirate_metrics/agent.rb +11 -10
- data/lib/pirate_metrics/version.rb +1 -1
- data/spec/agent_spec.rb +7 -2
- metadata +105 -148
data/README.md
CHANGED
@@ -21,7 +21,20 @@ You'll probably want something like the above, only enabling the agent in produ
|
|
21
21
|
Now you can begin to use Pirate Metrics to track your application.
|
22
22
|
|
23
23
|
```sh
|
24
|
-
|
24
|
+
# new user acquisition
|
25
|
+
PM.acquisition({ :email => 'joe@example.com'})
|
26
|
+
|
27
|
+
# joe activates
|
28
|
+
PM.activation({ :email => 'joe@example.com'})
|
29
|
+
|
30
|
+
# joe uses your product many times
|
31
|
+
PM.retention({ :email => 'joe@example.com'})
|
32
|
+
|
33
|
+
# joe gets someone else to sign up
|
34
|
+
PM.referral({ :customer_email => 'joe@example.com', :referree_email => 'bob@bigmoney.example.com'})
|
35
|
+
|
36
|
+
# joe pays
|
37
|
+
PM.revenue({ :email => 'joe@example.com', :amount_in_cents => 100})
|
25
38
|
```
|
26
39
|
|
27
40
|
**Note**: For your app's safety, the agent is meant to isolate your app from any problems our service might suffer. If it is unable to connect to the service, it will discard data after reaching a low memory threshold.
|
data/lib/pirate_metrics/agent.rb
CHANGED
@@ -132,19 +132,18 @@ module PirateMetrics
|
|
132
132
|
if running?
|
133
133
|
logger.info "Cleaning up agent, queue size: #{@queue.size}, thread running: #{@thread.alive?}"
|
134
134
|
@allow_reconnect = false
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
logger.error "Timed out PirateMetrics Agent, exiting"
|
144
|
-
end
|
135
|
+
queue_metric('exit')
|
136
|
+
begin
|
137
|
+
with_timeout(EXIT_FLUSH_TIMEOUT) { @thread.join }
|
138
|
+
rescue Timeout::Error
|
139
|
+
if @queue.size > 0
|
140
|
+
logger.error "Timed out working agent thread on exit, dropping #{@queue.size} metrics"
|
141
|
+
else
|
142
|
+
logger.error "Timed out PirateMetrics Agent, exiting"
|
145
143
|
end
|
146
144
|
end
|
147
145
|
end
|
146
|
+
@thread = nil
|
148
147
|
end
|
149
148
|
|
150
149
|
private
|
@@ -203,6 +202,7 @@ module PirateMetrics
|
|
203
202
|
@failures = 0
|
204
203
|
logger.info "Starting thread"
|
205
204
|
@thread = Thread.new do
|
205
|
+
sleep 0 #yield back before processing anything
|
206
206
|
run_worker_loop
|
207
207
|
end
|
208
208
|
end
|
@@ -230,6 +230,7 @@ module PirateMetrics
|
|
230
230
|
else
|
231
231
|
logger.debug "Sending: #{metric} -> #{payload.inspect}"
|
232
232
|
result = @piratemetrics.post("/api/v1/#{metric}s", { :api_key => @api_key, :data => payload})
|
233
|
+
logger.debug "Sent returned with status code #{result.status}"
|
233
234
|
end
|
234
235
|
metric = payload = options = nil
|
235
236
|
rescue Exception => err
|
data/spec/agent_spec.rb
CHANGED
@@ -401,9 +401,14 @@ describe PirateMetrics::Agent, "connection problems" do
|
|
401
401
|
it "should send commands in a process that bypasses at_exit when using #cleanup" do
|
402
402
|
@server = TestServer.new
|
403
403
|
@agent = @server.fresh_agent
|
404
|
-
if pid = fork
|
404
|
+
if pid = fork do
|
405
|
+
@agent.acquisition({ :email => "test1@example.com"})
|
406
|
+
@agent.acquisition({ :email => "test2@example.com"})
|
407
|
+
@agent.cleanup
|
408
|
+
exit!
|
409
|
+
end
|
405
410
|
Process.wait(pid)
|
406
|
-
@server.acquisitions.size.should ==
|
411
|
+
@server.acquisitions.size.should == 2
|
407
412
|
end
|
408
413
|
end
|
409
414
|
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: pirate_metrics_agent
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.1
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.1.2
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Elijah Miller
|
9
9
|
- Christopher Zelenak
|
10
10
|
- Kristopher Chambers
|
@@ -13,175 +13,129 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
|
17
|
+
date: 2012-12-19 00:00:00 Z
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
19
20
|
name: faraday
|
20
|
-
requirement: !ruby/object:Gem::Requirement
|
21
|
-
none: false
|
22
|
-
requirements:
|
23
|
-
- - ~>
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
version: '0.8'
|
26
|
-
type: :runtime
|
27
21
|
prerelease: false
|
28
|
-
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
29
23
|
none: false
|
30
|
-
requirements:
|
24
|
+
requirements:
|
31
25
|
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: "0.8"
|
28
|
+
type: :runtime
|
29
|
+
version_requirements: *id001
|
30
|
+
- !ruby/object:Gem::Dependency
|
35
31
|
name: rake
|
36
|
-
requirement: !ruby/object:Gem::Requirement
|
37
|
-
none: false
|
38
|
-
requirements:
|
39
|
-
- - ! '>='
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
|
-
type: :development
|
43
32
|
prerelease: false
|
44
|
-
|
45
|
-
none: false
|
46
|
-
requirements:
|
47
|
-
- - ! '>='
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '0'
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: rack
|
52
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
53
34
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: "0"
|
58
39
|
type: :development
|
40
|
+
version_requirements: *id002
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rack
|
59
43
|
prerelease: false
|
60
|
-
|
44
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
61
45
|
none: false
|
62
|
-
requirements:
|
63
|
-
- -
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version:
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: rspec
|
68
|
-
requirement: !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
|
-
requirements:
|
71
|
-
- - ~>
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '2.0'
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
74
50
|
type: :development
|
51
|
+
version_requirements: *id003
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: rspec
|
75
54
|
prerelease: false
|
76
|
-
|
55
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
77
56
|
none: false
|
78
|
-
requirements:
|
57
|
+
requirements:
|
79
58
|
- - ~>
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version:
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: fuubar
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
|
-
requirements:
|
87
|
-
- - ! '>='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "2.0"
|
90
61
|
type: :development
|
62
|
+
version_requirements: *id004
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: fuubar
|
91
65
|
prerelease: false
|
92
|
-
|
66
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
93
67
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version:
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: pry
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
|
-
requirements:
|
103
|
-
- - ~>
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: '0.9'
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
106
72
|
type: :development
|
73
|
+
version_requirements: *id005
|
74
|
+
- !ruby/object:Gem::Dependency
|
75
|
+
name: pry
|
107
76
|
prerelease: false
|
108
|
-
|
77
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
109
78
|
none: false
|
110
|
-
requirements:
|
79
|
+
requirements:
|
111
80
|
- - ~>
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version:
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
|
-
name: guard
|
116
|
-
requirement: !ruby/object:Gem::Requirement
|
117
|
-
none: false
|
118
|
-
requirements:
|
119
|
-
- - ! '>='
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version: '0'
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: "0.9"
|
122
83
|
type: :development
|
84
|
+
version_requirements: *id006
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: guard
|
123
87
|
prerelease: false
|
124
|
-
|
125
|
-
none: false
|
126
|
-
requirements:
|
127
|
-
- - ! '>='
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: '0'
|
130
|
-
- !ruby/object:Gem::Dependency
|
131
|
-
name: guard-rspec
|
132
|
-
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
133
89
|
none: false
|
134
|
-
requirements:
|
135
|
-
- -
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version:
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: "0"
|
138
94
|
type: :development
|
95
|
+
version_requirements: *id007
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: guard-rspec
|
139
98
|
prerelease: false
|
140
|
-
|
141
|
-
none: false
|
142
|
-
requirements:
|
143
|
-
- - ! '>='
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
- !ruby/object:Gem::Dependency
|
147
|
-
name: growl
|
148
|
-
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
149
100
|
none: false
|
150
|
-
requirements:
|
151
|
-
- -
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version:
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: "0"
|
154
105
|
type: :development
|
106
|
+
version_requirements: *id008
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: growl
|
155
109
|
prerelease: false
|
156
|
-
|
110
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
157
111
|
none: false
|
158
|
-
requirements:
|
159
|
-
- -
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
version:
|
162
|
-
- !ruby/object:Gem::Dependency
|
163
|
-
name: rb-fsevent
|
164
|
-
requirement: !ruby/object:Gem::Requirement
|
165
|
-
none: false
|
166
|
-
requirements:
|
167
|
-
- - ! '>='
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version: '0'
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: "0"
|
170
116
|
type: :development
|
117
|
+
version_requirements: *id009
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: rb-fsevent
|
171
120
|
prerelease: false
|
172
|
-
|
121
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
173
122
|
none: false
|
174
|
-
requirements:
|
175
|
-
- -
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
version:
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: "0"
|
127
|
+
type: :development
|
128
|
+
version_requirements: *id010
|
178
129
|
description: Get to know your customers.
|
179
|
-
email:
|
130
|
+
email:
|
180
131
|
- support@piratemetrics.com
|
181
132
|
executables: []
|
133
|
+
|
182
134
|
extensions: []
|
135
|
+
|
183
136
|
extra_rdoc_files: []
|
184
|
-
|
137
|
+
|
138
|
+
files:
|
185
139
|
- .gitignore
|
186
140
|
- .rspec
|
187
141
|
- CHANGELOG.md
|
@@ -200,29 +154,32 @@ files:
|
|
200
154
|
- spec/test_server.rb
|
201
155
|
homepage: http://github.com/expectedbehavior/pirate_metrics_agent
|
202
156
|
licenses: []
|
157
|
+
|
203
158
|
post_install_message:
|
204
159
|
rdoc_options: []
|
205
|
-
|
160
|
+
|
161
|
+
require_paths:
|
206
162
|
- lib
|
207
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
208
164
|
none: false
|
209
|
-
requirements:
|
210
|
-
- -
|
211
|
-
- !ruby/object:Gem::Version
|
212
|
-
version:
|
213
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: "0"
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
214
170
|
none: false
|
215
|
-
requirements:
|
216
|
-
- -
|
217
|
-
- !ruby/object:Gem::Version
|
218
|
-
version:
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: "0"
|
219
175
|
requirements: []
|
176
|
+
|
220
177
|
rubyforge_project:
|
221
|
-
rubygems_version: 1.8.
|
178
|
+
rubygems_version: 1.8.17
|
222
179
|
signing_key:
|
223
180
|
specification_version: 3
|
224
181
|
summary: Agent for reporting data to piratemetrics.com
|
225
|
-
test_files:
|
182
|
+
test_files:
|
226
183
|
- spec/agent_spec.rb
|
227
184
|
- spec/spec_helper.rb
|
228
185
|
- spec/test_server.rb
|