instrumental_agent 0.12.3 → 0.12.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/CHANGELOG.md +3 -0
- data/README.md +1 -1
- data/lib/instrumental/agent.rb +16 -1
- data/lib/instrumental/version.rb +1 -1
- data/spec/agent_spec.rb +2 -2
- metadata +116 -115
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -93,7 +93,7 @@ The default message sent is "USER deployed COMMIT_HASH". If you need to customiz
|
|
93
93
|
|
94
94
|
## Tracking metrics in Resque jobs (and Resque-like scenarios)
|
95
95
|
|
96
|
-
If you plan on tracking metrics in Resque jobs, you will need to explicitly cleanup after the agent when the jobs are finished. You can accomplish this by adding `after_perform` and `on_failure` hooks to your Resque jobs. See the Resque [hooks documentation](https://github.com/
|
96
|
+
If you plan on tracking metrics in Resque jobs, you will need to explicitly cleanup after the agent when the jobs are finished. You can accomplish this by adding `after_perform` and `on_failure` hooks to your Resque jobs. See the Resque [hooks documentation](https://github.com/resque/resque/blob/master/docs/HOOKS.md) for more information.
|
97
97
|
|
98
98
|
You're required to do this because Resque calls `exit!` when a worker has finished processing, which bypasses Ruby's `at_exit` hooks. The Instrumental Agent installs an `at_exit` hook to flush any pending metrics to the servers, but this hook is bypassed by the `exit!` call; any other code you rely that uses `exit!` should call `I.cleanup` to ensure any pending metrics are correctly sent to the server before exiting the process.
|
99
99
|
|
data/lib/instrumental/agent.rb
CHANGED
@@ -238,6 +238,16 @@ module Instrumental
|
|
238
238
|
logger.error "Exception occurred: #{e.message}\n#{e.backtrace.join("\n")}"
|
239
239
|
end
|
240
240
|
|
241
|
+
def ipv4_address_for_host(host, port)
|
242
|
+
addresses = Socket.getaddrinfo(host, port, 'AF_INET')
|
243
|
+
if (result = addresses.first)
|
244
|
+
_, _, _, address, _ = result
|
245
|
+
address
|
246
|
+
else
|
247
|
+
raise Exception.new("Couldn't get address information for host #{host}")
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
241
251
|
def send_command(cmd, *args)
|
242
252
|
cmd = "%s %s\n" % [cmd, args.collect { |a| a.to_s }.join(" ")]
|
243
253
|
if enabled?
|
@@ -312,11 +322,16 @@ module Instrumental
|
|
312
322
|
end
|
313
323
|
end
|
314
324
|
|
325
|
+
|
326
|
+
|
315
327
|
def run_worker_loop
|
316
328
|
command_and_args = nil
|
317
329
|
command_options = nil
|
318
330
|
logger.info "connecting to collector"
|
319
|
-
@socket =
|
331
|
+
@socket = Socket.new(Socket::PF_INET, Socket::SOCK_STREAM, 0)
|
332
|
+
with_timeout(CONNECT_TIMEOUT) do
|
333
|
+
@socket.connect Socket.pack_sockaddr_in(port, ipv4_address_for_host(host, port))
|
334
|
+
end
|
320
335
|
logger.info "connected to collector at #{host}:#{port}"
|
321
336
|
send_with_reply_timeout "hello version #{Instrumental::VERSION} hostname #{Socket.gethostname} pid #{Process.pid}"
|
322
337
|
send_with_reply_timeout "authenticate #{@api_key}"
|
data/lib/instrumental/version.rb
CHANGED
data/spec/agent_spec.rb
CHANGED
@@ -383,7 +383,7 @@ describe Instrumental::Agent, "connection problems" do
|
|
383
383
|
it "should not wait longer than EXIT_FLUSH_TIMEOUT seconds to exit a process" do
|
384
384
|
@server = TestServer.new
|
385
385
|
@agent = Instrumental::Agent.new('test_token', :collector => @server.host_and_port, :synchronous => false)
|
386
|
-
|
386
|
+
Socket.stub!(:new) { |*args| sleep(5) && StringIO.new }
|
387
387
|
with_constants('Instrumental::Agent::EXIT_FLUSH_TIMEOUT' => 3) do
|
388
388
|
if (pid = fork { @agent.increment('foo', 1) })
|
389
389
|
tm = Time.now.to_f
|
@@ -398,7 +398,7 @@ describe Instrumental::Agent, "connection problems" do
|
|
398
398
|
it "should not wait to exit a process if there are no commands queued" do
|
399
399
|
@server = TestServer.new
|
400
400
|
@agent = Instrumental::Agent.new('test_token', :collector => @server.host_and_port, :synchronous => false)
|
401
|
-
|
401
|
+
Socket.stub!(:new) { |*args| sleep(5) && StringIO.new }
|
402
402
|
with_constants('Instrumental::Agent::EXIT_FLUSH_TIMEOUT' => 3) do
|
403
403
|
if (pid = fork { @agent.increment('foo', 1); @agent.queue.clear })
|
404
404
|
tm = Time.now.to_f
|
metadata
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: instrumental_agent
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 39
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 12
|
9
|
+
- 4
|
10
|
+
version: 0.12.4
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Elijah Miller
|
9
14
|
- Christopher Zelenak
|
10
15
|
- Kristopher Chambers
|
@@ -12,127 +17,119 @@ authors:
|
|
12
17
|
autorequire:
|
13
18
|
bindir: bin
|
14
19
|
cert_chain: []
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
|
21
|
+
date: 2013-09-19 00:00:00 -04:00
|
22
|
+
default_executable:
|
23
|
+
dependencies:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
26
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 3
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
version: "0"
|
25
34
|
type: :development
|
35
|
+
name: rake
|
36
|
+
version_requirements: *id001
|
26
37
|
prerelease: false
|
27
|
-
|
28
|
-
|
29
|
-
requirements:
|
30
|
-
- - ! '>='
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '0'
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: rspec
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
40
|
none: false
|
37
|
-
requirements:
|
41
|
+
requirements:
|
38
42
|
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 2
|
47
|
+
- 0
|
48
|
+
version: "2.0"
|
41
49
|
type: :development
|
50
|
+
name: rspec
|
51
|
+
version_requirements: *id002
|
42
52
|
prerelease: false
|
43
|
-
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
44
55
|
none: false
|
45
|
-
requirements:
|
46
|
-
- -
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
none: false
|
53
|
-
requirements:
|
54
|
-
- - ! '>='
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '0'
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
57
63
|
type: :development
|
64
|
+
name: fuubar
|
65
|
+
version_requirements: *id003
|
58
66
|
prerelease: false
|
59
|
-
|
60
|
-
|
61
|
-
requirements:
|
62
|
-
- - ! '>='
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: '0'
|
65
|
-
- !ruby/object:Gem::Dependency
|
66
|
-
name: guard
|
67
|
-
requirement: !ruby/object:Gem::Requirement
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
69
|
none: false
|
69
|
-
requirements:
|
70
|
-
- -
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
73
77
|
type: :development
|
78
|
+
name: guard
|
79
|
+
version_requirements: *id004
|
74
80
|
prerelease: false
|
75
|
-
|
76
|
-
|
77
|
-
requirements:
|
78
|
-
- - ! '>='
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '0'
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: guard-rspec
|
83
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
83
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
hash: 3
|
88
|
+
segments:
|
89
|
+
- 0
|
90
|
+
version: "0"
|
89
91
|
type: :development
|
92
|
+
name: guard-rspec
|
93
|
+
version_requirements: *id005
|
90
94
|
prerelease: false
|
91
|
-
|
92
|
-
|
93
|
-
requirements:
|
94
|
-
- - ! '>='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: growl
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
100
97
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
105
105
|
type: :development
|
106
|
+
name: growl
|
107
|
+
version_requirements: *id006
|
106
108
|
prerelease: false
|
107
|
-
|
108
|
-
|
109
|
-
requirements:
|
110
|
-
- - ! '>='
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: '0'
|
113
|
-
- !ruby/object:Gem::Dependency
|
114
|
-
name: rb-fsevent
|
115
|
-
requirement: !ruby/object:Gem::Requirement
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
116
111
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
hash: 3
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
version: "0"
|
121
119
|
type: :development
|
120
|
+
name: rb-fsevent
|
121
|
+
version_requirements: *id007
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: !ruby/object:Gem::Requirement
|
124
|
-
none: false
|
125
|
-
requirements:
|
126
|
-
- - ! '>='
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
version: '0'
|
129
123
|
description: Track anything.
|
130
|
-
email:
|
124
|
+
email:
|
131
125
|
- support@instrumentalapp.com
|
132
126
|
executables: []
|
127
|
+
|
133
128
|
extensions: []
|
129
|
+
|
134
130
|
extra_rdoc_files: []
|
135
|
-
|
131
|
+
|
132
|
+
files:
|
136
133
|
- .gitignore
|
137
134
|
- .rspec
|
138
135
|
- .travis.yml
|
@@ -151,37 +148,41 @@ files:
|
|
151
148
|
- spec/agent_spec.rb
|
152
149
|
- spec/spec_helper.rb
|
153
150
|
- spec/test_server.rb
|
151
|
+
has_rdoc: true
|
154
152
|
homepage: http://github.com/fastestforward/instrumental_agent
|
155
153
|
licenses: []
|
154
|
+
|
156
155
|
post_install_message:
|
157
156
|
rdoc_options: []
|
158
|
-
|
157
|
+
|
158
|
+
require_paths:
|
159
159
|
- lib
|
160
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
161
|
none: false
|
162
|
-
requirements:
|
163
|
-
- -
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
|
166
|
-
segments:
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
hash: 3
|
166
|
+
segments:
|
167
167
|
- 0
|
168
|
-
|
169
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
version: "0"
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
170
|
none: false
|
171
|
-
requirements:
|
172
|
-
- -
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
|
175
|
-
segments:
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
hash: 3
|
175
|
+
segments:
|
176
176
|
- 0
|
177
|
-
|
177
|
+
version: "0"
|
178
178
|
requirements: []
|
179
|
+
|
179
180
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.
|
181
|
+
rubygems_version: 1.6.2
|
181
182
|
signing_key:
|
182
183
|
specification_version: 3
|
183
184
|
summary: Agent for reporting data to instrumentalapp.com
|
184
|
-
test_files:
|
185
|
+
test_files:
|
185
186
|
- spec/agent_spec.rb
|
186
187
|
- spec/spec_helper.rb
|
187
188
|
- spec/test_server.rb
|