rorvswild 0.0.6 → 0.0.7
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/Gemfile +3 -0
- data/lib/rorvswild/version.rb +1 -1
- data/lib/rorvswild.rb +53 -2
- data/test/ror_vs_wild_test.rb +51 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a59fa9bea7794855a7efa8ba8421e6d9aa5cfd07
|
4
|
+
data.tar.gz: 2989fc278d1ad9c9ef1a3c308763154ee05b349e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0510261d172670aa8a3b4e9ec9536a5a84b010464560e4d2f268d6a43b3f1d2c86fa80c9e302da2f8999dec748007fbef31397a151113805e4c947d3371bcd4f
|
7
|
+
data.tar.gz: 3429bf64bc6895e0aff2258d3fa621d1ccd46c9cbc483d6fc15df67f5b68058177d983707662df1e629c9f44d53dec6770fb3305279fc8daa5f787c78b6039ff
|
data/Gemfile
CHANGED
data/lib/rorvswild/version.rb
CHANGED
data/lib/rorvswild.rb
CHANGED
@@ -2,9 +2,22 @@ require "rorvswild/version"
|
|
2
2
|
|
3
3
|
module RorVsWild
|
4
4
|
def self.new(*args)
|
5
|
+
warn "WARNING: RorVsWild.new is deprecated. Use RorVsWild::Client.new instead."
|
5
6
|
Client.new(*args) # Compatibility with 0.0.1
|
6
7
|
end
|
7
8
|
|
9
|
+
def self.register_default_client(client)
|
10
|
+
@default_client = client
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.default_client
|
14
|
+
@default_client
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.measure_job(code)
|
18
|
+
default_client ? default_client.measure_job(code) : eval(code)
|
19
|
+
end
|
20
|
+
|
8
21
|
class Client
|
9
22
|
def self.default_config
|
10
23
|
{
|
@@ -24,6 +37,7 @@ module RorVsWild
|
|
24
37
|
@api_key = config[:api_key]
|
25
38
|
@app_id = config[:app_id]
|
26
39
|
setup_callbacks
|
40
|
+
RorVsWild.register_default_client(self)
|
27
41
|
end
|
28
42
|
|
29
43
|
def setup_callbacks
|
@@ -32,8 +46,8 @@ module RorVsWild
|
|
32
46
|
ActiveSupport::Notifications.subscribe("process_action.action_controller", &method(:after_http_request))
|
33
47
|
ActiveSupport::Notifications.subscribe("start_processing.action_controller", &method(:before_http_request))
|
34
48
|
|
35
|
-
|
36
|
-
|
49
|
+
client = self
|
50
|
+
ActionController::Base.rescue_from(StandardError) { |exception| client.after_exception(exception, self) }
|
37
51
|
end
|
38
52
|
|
39
53
|
def before_http_request(name, start, finish, id, payload)
|
@@ -93,6 +107,33 @@ module RorVsWild
|
|
93
107
|
raise exception
|
94
108
|
end
|
95
109
|
|
110
|
+
def measure_job(code)
|
111
|
+
@queries = []
|
112
|
+
@job = {name: code}
|
113
|
+
started_at = Time.now
|
114
|
+
cpu_time_offset = cpu_time
|
115
|
+
eval(code)
|
116
|
+
rescue => exception
|
117
|
+
file, line = exception.backtrace.first.split(":")
|
118
|
+
job[:error] = {
|
119
|
+
line: line.to_i,
|
120
|
+
file: relative_path(file),
|
121
|
+
message: exception.message,
|
122
|
+
backtrace: exception.backtrace,
|
123
|
+
exception: exception.class.to_s,
|
124
|
+
}
|
125
|
+
raise
|
126
|
+
ensure
|
127
|
+
job[:runtime] = (Time.now - started_at) * 1000
|
128
|
+
job[:cpu_runtime] = cpu_time - cpu_time_offset
|
129
|
+
post_job
|
130
|
+
end
|
131
|
+
|
132
|
+
def cpu_time
|
133
|
+
time = Process.times
|
134
|
+
time.utime + time.stime + time.cutime + time.cstime
|
135
|
+
end
|
136
|
+
|
96
137
|
#######################
|
97
138
|
### Private methods ###
|
98
139
|
#######################
|
@@ -107,6 +148,10 @@ module RorVsWild
|
|
107
148
|
@views
|
108
149
|
end
|
109
150
|
|
151
|
+
def job
|
152
|
+
@job
|
153
|
+
end
|
154
|
+
|
110
155
|
def push_query(query)
|
111
156
|
if query[:sql] || query[:plan]
|
112
157
|
queries << query
|
@@ -140,6 +185,12 @@ module RorVsWild
|
|
140
185
|
log_error(exception)
|
141
186
|
end
|
142
187
|
|
188
|
+
def post_job
|
189
|
+
post("/jobs", job: job.merge(queries: slowest_queries))
|
190
|
+
rescue => exception
|
191
|
+
log_error(exception)
|
192
|
+
end
|
193
|
+
|
143
194
|
def extract_file_and_line_from_call_stack(stack)
|
144
195
|
return unless location = stack.find { |str| str.include?(Rails.root.to_s) }
|
145
196
|
file, line, method = location.split(":")
|
@@ -0,0 +1,51 @@
|
|
1
|
+
root_path = File.expand_path(File.dirname(File.dirname(__FILE__)))
|
2
|
+
$LOAD_PATH.unshift(root_path + "/lib")
|
3
|
+
|
4
|
+
require "rorvswild"
|
5
|
+
|
6
|
+
require "minitest/autorun"
|
7
|
+
require 'mocha/mini_test'
|
8
|
+
require "top_tests"
|
9
|
+
|
10
|
+
class RorVsWildTest < MiniTest::Unit::TestCase
|
11
|
+
include TopTests
|
12
|
+
|
13
|
+
def test_measure_job
|
14
|
+
client.expects(:post_job)
|
15
|
+
assert_equal(2, client.measure_job("1 + 1"))
|
16
|
+
assert_equal("1 + 1", client.send(:job)[:name])
|
17
|
+
assert(client.send(:job)[:runtime] > 0)
|
18
|
+
assert_equal(0, client.send(:job)[:cpu_runtime])
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_measure_job_when_raising
|
22
|
+
client.expects(:post_job)
|
23
|
+
assert_raises(RuntimeError) { client.measure_job("raise 'error'") }
|
24
|
+
assert_equal(("raise 'error'"), client.send(:job)[:name])
|
25
|
+
assert(client.send(:job)[:cpu_runtime])
|
26
|
+
assert(client.send(:job)[:runtime])
|
27
|
+
assert(client.send(:job)[:error])
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def client
|
33
|
+
if !@client
|
34
|
+
RorVsWild::Client.any_instance.stubs(:setup_callbacks)
|
35
|
+
@client ||= RorVsWild::Client.new({})
|
36
|
+
@client.stubs(:post_request)
|
37
|
+
@client.stubs(:post_task)
|
38
|
+
end
|
39
|
+
@client
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Simulate Rails.root
|
44
|
+
|
45
|
+
require "pathname"
|
46
|
+
|
47
|
+
module Rails
|
48
|
+
def self.root
|
49
|
+
Pathname.new("foo")
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rorvswild
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexis Bernard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -39,6 +39,7 @@ files:
|
|
39
39
|
- lib/rorvswild.rb
|
40
40
|
- lib/rorvswild/version.rb
|
41
41
|
- rorvswild.gemspec
|
42
|
+
- test/ror_vs_wild_test.rb
|
42
43
|
homepage: http://www.rorvswild.com
|
43
44
|
licenses:
|
44
45
|
- MIT
|
@@ -64,4 +65,5 @@ signing_key:
|
|
64
65
|
specification_version: 4
|
65
66
|
summary: Simple Ruby on Rails application monitoring for hardcore developers with
|
66
67
|
no time to waste.
|
67
|
-
test_files:
|
68
|
+
test_files:
|
69
|
+
- test/ror_vs_wild_test.rb
|