rorvswild 1.0.0.pre.alpha3 → 1.0.0.pre.alpha4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ccd559dc4814ccc1d74e657002fd06ccc225661a
4
- data.tar.gz: 1e8d7dedad441f91a5cc48843817e69ee37c8076
3
+ metadata.gz: df4365fa8eb745004ea5aa2496714a0dbcadbd32
4
+ data.tar.gz: c6d978d8c149b2af076aa1bf6a2ffd43ae63fc2e
5
5
  SHA512:
6
- metadata.gz: bf8a26c1f4c83605ec4d07154daef9d848a9db27baad3d18e771051036d7abf57697683443809037065cd3a7d3e59b5b8a05efbdbe38adc7d9fc29152b997859
7
- data.tar.gz: e715af573d970f2899f7b66b38a58026aac32727465086590621feeac24d23b2a15ecb3449febb8847f2b0993711530f4e5a219e64d6cc421b498c442e8fa086
6
+ metadata.gz: 7fa70526436f2367dceb7c2f27262c59d0d779d5924357a5d0052d7a935ad463df4019b957dcb7784d608ddadcca0f85aa34fb664b4955553711d37a7fcdbd63
7
+ data.tar.gz: 7563b60608111f548d19b8704916a6f767e842f1feda942210d30c0cdb0e6f6b29bcffd54957d6927c15987fe542d206ddaf85d477d542128915e010661c4926
@@ -58,13 +58,14 @@ module RorVsWild
58
58
  end
59
59
 
60
60
  def measure_block(name, kind = "code".freeze, &block)
61
- data[:name] ? measure_section(name, kind, &block) : measure_job(name, &block)
61
+ data[:name] ? measure_section(name, kind: kind, &block) : measure_job(name, &block)
62
62
  end
63
63
 
64
- def measure_section(name, kind = "code", &block)
64
+ def measure_section(name, kind: "code", appendable_command: false, &block)
65
65
  return block.call unless data[:name]
66
66
  begin
67
67
  RorVsWild::Section.start do |section|
68
+ section.appendable_command = appendable_command
68
69
  section.command = name
69
70
  section.kind = kind
70
71
  end
@@ -159,7 +160,7 @@ module RorVsWild
159
160
  end
160
161
 
161
162
  def post_error(hash)
162
- post_async("/errors".freeze, error: hash)
163
+ client.post_async("/errors".freeze, error: hash)
163
164
  end
164
165
 
165
166
  def exception_to_hash(exception, extra_details = nil)
@@ -168,7 +169,7 @@ module RorVsWild
168
169
  line: line.to_i,
169
170
  file: relative_path(file),
170
171
  message: exception.message,
171
- backtrace: exception.backtrace,
172
+ backtrace: exception.backtrace || ["No backtrace"],
172
173
  exception: exception.class.to_s,
173
174
  extra_details: extra_details,
174
175
  }
@@ -15,8 +15,10 @@ module RorVsWild
15
15
  # Sometime Exception#backtrace_locations returns nil for an unknow reason. So we fallback to the old way.
16
16
  if exception.respond_to?(:backtrace_locations) && locations = exception.backtrace_locations
17
17
  extract_most_relevant_file_and_line(locations)
18
+ elsif backtrace = exception.backtrace
19
+ extract_most_relevant_file_and_line_from_array_of_strings(backtrace)
18
20
  else
19
- extract_most_relevant_file_and_line_from_array_of_strings(exception.backtrace)
21
+ ["No backtrace".freeze, 1]
20
22
  end
21
23
  end
22
24
 
@@ -13,10 +13,12 @@ module RorVsWild
13
13
  end
14
14
 
15
15
  IGNORED_QUERIES = %w[EXPLAIN SCHEMA].freeze
16
+ APPENDABLE_QUERIES = ["BEGIN", "COMMIT"].freeze
16
17
 
17
18
  def start(name, id, payload)
18
19
  return if IGNORED_QUERIES.include?(payload[:name])
19
20
  RorVsWild::Section.start do |section|
21
+ section.appendable_command = APPENDABLE_QUERIES.include?(payload[:sql])
20
22
  section.command = payload[:sql]
21
23
  section.kind = "sql".freeze
22
24
  end
@@ -15,7 +15,7 @@ module RorVsWild
15
15
  return request_without_rorvswild(req, body, &block) if request_called_twice?
16
16
  scheme = use_ssl? ? HTTPS : HTTP
17
17
  url = "#{req.method} #{scheme}://#{address}#{req.path}"
18
- RorVsWild.agent.measure_section(url, HTTP) do
18
+ RorVsWild.agent.measure_section(url, kind: HTTP) do
19
19
  request_without_rorvswild(req, body, &block)
20
20
  end
21
21
  end
@@ -9,7 +9,8 @@ module RorVsWild
9
9
 
10
10
  def process(commands, &block)
11
11
  string = RorVsWild::Plugin::Redis.commands_to_string(commands)
12
- RorVsWild.agent.measure_section(string, "redis".freeze) do
12
+ appendable = RorVsWild::Plugin::Redis.appendable_commands?(commands)
13
+ RorVsWild.agent.measure_section(string, appendable_command: appendable, kind: "redis".freeze) do
13
14
  process_without_rorvswild(commands, &block)
14
15
  end
15
16
  end
@@ -17,7 +18,13 @@ module RorVsWild
17
18
  end
18
19
 
19
20
  def self.commands_to_string(commands)
20
- commands.map { |c| c[0] == :auth ? "auth *****" : c.join(" ".freeze) }.join("\n".freeze)
21
+ commands.map { |c| c[0] == :auth ? "auth *****".freeze : c.join(" ".freeze) }.join("\n".freeze)
22
+ end
23
+
24
+ APPENDABLE_COMMANDS = [:auth, :select]
25
+
26
+ def self.appendable_commands?(commands)
27
+ commands.size == 1 && APPENDABLE_COMMANDS.include?(commands.first.first)
21
28
  end
22
29
  end
23
30
  end
@@ -1,7 +1,7 @@
1
1
  module RorVsWild
2
2
  class Section
3
3
  attr_reader :started_at
4
- attr_accessor :kind, :file, :line, :calls, :command, :children_runtime, :total_runtime
4
+ attr_accessor :kind, :file, :line, :calls, :command, :children_runtime, :total_runtime, :appendable_command
5
5
 
6
6
  def self.start(&block)
7
7
  section = Section.new
@@ -34,17 +34,25 @@ module RorVsWild
34
34
  location = RorVsWild.agent.find_most_relevant_location(caller_locations)
35
35
  @file = RorVsWild.agent.relative_path(location.path)
36
36
  @line = location.lineno
37
+ @appendable_command = false
37
38
  end
38
39
 
39
40
  def sibling?(section)
40
41
  kind == section.kind && line == section.line && file == section.file
41
42
  end
42
43
 
44
+ MAX_COMMAND_HISTORY = 5
45
+
43
46
  def merge(section)
44
47
  self.calls += section.calls
45
48
  self.total_runtime += section.total_runtime
46
49
  self.children_runtime += section.children_runtime
47
- self.command ||= section.command
50
+ if section
51
+ self.command << "\n".freeze + section.command if appendable_command
52
+ else
53
+ self.command = section.command
54
+ end
55
+ self.appendable_command = appendable_command && section.appendable_command
48
56
  end
49
57
 
50
58
  def self_runtime
@@ -1,3 +1,3 @@
1
1
  module RorVsWild
2
- VERSION = "1.0.0-alpha3".freeze
2
+ VERSION = "1.0.0-alpha4".freeze
3
3
  end
@@ -6,10 +6,11 @@ class RorVsWild::Plugin::RedisTest < Minitest::Test
6
6
  include RorVsWildAgentHelper
7
7
 
8
8
  def test_callback
9
- agent.measure_code("::Redis.new.get('foo')")
9
+ url = "redis://localhost:6379/1"
10
+ agent.measure_code("::Redis.new(url: '#{url}').get('foo')")
10
11
  assert_equal(1, agent.data[:sections].size)
11
12
  assert_equal("redis", agent.data[:sections][0].kind)
12
- assert_equal("get foo", agent.data[:sections][0].command)
13
+ assert_equal("select 1\nget foo", agent.data[:sections][0].command)
13
14
  end
14
15
 
15
16
  def test_callback_when_pipelined
@@ -27,4 +28,10 @@ class RorVsWild::Plugin::RedisTest < Minitest::Test
27
28
  def test_commands_to_string_hide_auth_password
28
29
  assert_equal("auth *****", RorVsWild::Plugin::Redis.commands_to_string([[:auth, "SECRET"]]))
29
30
  end
31
+
32
+ def test_appendable_commands?
33
+ assert(RorVsWild::Plugin::Redis.appendable_commands?([[:select, 1]]))
34
+ assert(RorVsWild::Plugin::Redis.appendable_commands?([[:auth, "SECRET"]]))
35
+ refute(RorVsWild::Plugin::Redis.appendable_commands?([[:get, "KEY"]]))
36
+ end
30
37
  end
@@ -134,6 +134,10 @@ class RorVsWildTest < Minitest::Test
134
134
  assert_equal(["#{ENV["GEM_HOME"]}/lib/sql.rb", "1"], agent.extract_most_relevant_file_and_line_from_array_of_strings(locations))
135
135
  end
136
136
 
137
+ def test_extract_most_relevant_file_and_line_from_exception_when_exception_has_no_backtrace
138
+ assert_equal(["No backtrace", 1], agent.extract_most_relevant_file_and_line_from_exception(StandardError.new))
139
+ end
140
+
137
141
  private
138
142
 
139
143
  def agent
data/test/section_test.rb CHANGED
@@ -21,6 +21,12 @@ class RorVsWild::SectionTest < Minitest::Test
21
21
  assert_equal(3, section1.calls)
22
22
  assert_equal(3, section1.total_runtime)
23
23
  assert_equal(3, section1.children_runtime)
24
+ assert_equal("command1", section1.command)
25
+ end
26
+
27
+ def test_merge_with_appendable_command
28
+ section3.merge(section1)
29
+ assert_equal("command3\ncommand1", section3.command)
24
30
  end
25
31
 
26
32
  def section1
@@ -32,6 +38,7 @@ class RorVsWild::SectionTest < Minitest::Test
32
38
  s.calls = 1
33
39
  s.total_runtime = 1
34
40
  s.children_runtime = 1
41
+ s.command = "command1"
35
42
  @section1 = s
36
43
  end
37
44
  @section1
@@ -46,8 +53,25 @@ class RorVsWild::SectionTest < Minitest::Test
46
53
  s.calls = 2
47
54
  s.total_runtime = 2
48
55
  s.children_runtime = 2
56
+ s.command = "command2"
49
57
  @section2 = s
50
58
  end
51
59
  @section2
52
60
  end
61
+
62
+ def section3
63
+ unless @section3
64
+ s = RorVsWild::Section.new
65
+ s.kind = "test"
66
+ s.file = "file"
67
+ s.line = 3
68
+ s.calls = 0
69
+ s.total_runtime = 3
70
+ s.children_runtime = 3
71
+ s.command = "command3"
72
+ s.appendable_command = true
73
+ @section3 = s
74
+ end
75
+ @section3
76
+ end
53
77
  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: 1.0.0.pre.alpha3
4
+ version: 1.0.0.pre.alpha4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Bernard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-24 00:00:00.000000000 Z
11
+ date: 2017-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler