skylight 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/ext/extconf.rb +15 -0
- data/ext/libskylight.yml +4 -4
- data/lib/skylight/config.rb +23 -3
- data/lib/skylight/core.rb +2 -6
- data/lib/skylight/native.rb +3 -0
- data/lib/skylight/normalizers/active_record/sql.rb +4 -4
- data/lib/skylight/normalizers/moped/query.rb +11 -15
- data/lib/skylight/probes/excon/middleware.rb +3 -2
- data/lib/skylight/probes/mongo.rb +159 -0
- data/lib/skylight/probes/mongoid.rb +21 -0
- data/lib/skylight/probes/moped.rb +31 -0
- data/lib/skylight/railtie.rb +3 -3
- data/lib/skylight/trace.rb +7 -6
- data/lib/skylight/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a889a7a09786acddcdf866faaf84ed4862909f4
|
4
|
+
data.tar.gz: 5e2f48fcfcea4166894f19422b435eb82d809856
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59381efc987947df3b1a8bff022beb0a61288c02b41124b861ea3923db126a4b38fb74100ad67b8efac86b694843fa7c70545bef02be511c9b1892d265a998fa
|
7
|
+
data.tar.gz: 7c433c0b9b74b350955aa27641b3ae1ac6d1a2ddd8d018f71f94302078d04e1a000c697b8f339663d8af12d2417df4b973c5f786386cb14a426865eaa9b9ea95
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 0.9.4 (November 23, 2015)
|
2
|
+
|
3
|
+
* [FEATURE] Added instrumentation for official Mongo Ruby Driver (utilized by Mongoid 5+). Add 'mongo' to probes list to enable.
|
4
|
+
* [BUGFIX] SQL lexer now handles indentifiers beginning with underscores.
|
5
|
+
* [BUGFIX] Excon instrumentation now works correctly.
|
6
|
+
* [BUGFIX] Graceful handling of native agent failures on old OS X versions.
|
7
|
+
* [IMPROVEMENT] Freeze some more strings for (likely very minor) performance improvements.
|
8
|
+
* [IMPROVEMENT] Better error messages when sockdir is an NFS mount.
|
9
|
+
* [IMPROVEMENT] On OS X, ensure that Xcode license has been approved before trying to build native agent.
|
10
|
+
|
1
11
|
## 0.9.3 (November 17, 2015)
|
2
12
|
|
3
13
|
* [BUGFIX] Update SQL lexer to handle more common queries
|
data/ext/extconf.rb
CHANGED
@@ -46,6 +46,21 @@ def fail(msg, type=:error)
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
# Check that Xcode license has been approved
|
50
|
+
# Based on Homebrew's implementation
|
51
|
+
# https://github.com/Homebrew/homebrew/blob/03708b016755847facc4f19a43ee9f7a44141ed7/Library/Homebrew/cmd/doctor.rb#L1183
|
52
|
+
if Platform::OS == 'darwin'
|
53
|
+
# If the user installs Xcode-only, they have to approve the
|
54
|
+
# license or no "xc*" tool will work.
|
55
|
+
if `/usr/bin/xcrun clang 2>&1` =~ /license/ && !$?.success?
|
56
|
+
fail <<-EOS
|
57
|
+
You have not agreed to the Xcode license and so we are unable to build the native agent.
|
58
|
+
To resolve this, you can agree to the license by opening Xcode.app or running:
|
59
|
+
sudo xcodebuild -license
|
60
|
+
EOS
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
49
64
|
#
|
50
65
|
# === Setup paths
|
51
66
|
#
|
data/ext/libskylight.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
---
|
2
|
-
version: "0.7.0-
|
2
|
+
version: "0.7.0-ffe066b"
|
3
3
|
checksums:
|
4
|
-
x86-linux: "
|
5
|
-
x86_64-linux: "
|
6
|
-
x86_64-darwin: "
|
4
|
+
x86-linux: "311cf34d25383d1a0c7f4611919ac78e49cbd2e227532ea9aa2b308212e9fca9"
|
5
|
+
x86_64-linux: "9d4969487f16e0f1d2ed6410dc4ea408e28ec4ea157c1a56c93b0bf596600461"
|
6
|
+
x86_64-darwin: "4e40e9a08efa8953ed1afca07c684385fa374833a057136057bf36ef41cce55e"
|
data/lib/skylight/config.rb
CHANGED
@@ -39,6 +39,7 @@ module Skylight
|
|
39
39
|
|
40
40
|
# == Instrumenter ==
|
41
41
|
"IGNORED_ENDPOINT" => :'ignored_endpoint',
|
42
|
+
"IGNORED_ENDPOINTS" => :'ignored_endpoints',
|
42
43
|
"SQL_MODE" => :'sql_mode',
|
43
44
|
|
44
45
|
# == Skylight Remote ==
|
@@ -268,6 +269,8 @@ module Skylight
|
|
268
269
|
end
|
269
270
|
end
|
270
271
|
|
272
|
+
# FIXME: Why not set the sockdir_path and pidfile_path explicitly?
|
273
|
+
# That way we don't have to keep this in sync with the Rust repo.
|
271
274
|
sockdir_path = self[:'daemon.sockdir_path'] || File.expand_path('.')
|
272
275
|
pidfile_path = self[:'daemon.pidfile_path'] || File.expand_path('skylight.pid', sockdir_path)
|
273
276
|
|
@@ -283,11 +286,11 @@ module Skylight
|
|
283
286
|
FileUtils.mkdir_p sockdir_path
|
284
287
|
|
285
288
|
if File.exist?(pidfile)
|
286
|
-
|
289
|
+
unless FileTest.writable?(pidfile)
|
287
290
|
raise ConfigError, "File `#{pidfile}` not writable. Please set daemon.pidfile_path or daemon.sockdir_path in your config to a writable path"
|
288
291
|
end
|
289
292
|
else
|
290
|
-
|
293
|
+
unless FileTest.writable?(pidfile_root)
|
291
294
|
raise ConfigError, "Directory `#{pidfile_root}` not writable. Please set daemon.pidfile_path or daemon.sockdir_path in your config to a writable path"
|
292
295
|
end
|
293
296
|
end
|
@@ -295,6 +298,10 @@ module Skylight
|
|
295
298
|
unless FileTest.writable?(sockdir_path)
|
296
299
|
raise ConfigError, "Directory `#{sockdir_path}` not writable. Please set daemon.sockdir_path in your config to a writable path"
|
297
300
|
end
|
301
|
+
|
302
|
+
if check_nfs(pidfile)
|
303
|
+
raise ConfigError, "Directory `#{sockdir_path}` is an NFS mount and will not allow sockets. Please set daemon.sockdir_path in your config to a non-NFS path."
|
304
|
+
end
|
298
305
|
end
|
299
306
|
|
300
307
|
def key?(key)
|
@@ -420,8 +427,16 @@ authentication: #{self[:authentication]}
|
|
420
427
|
def ignored_endpoints
|
421
428
|
@ignored_endpoints ||=
|
422
429
|
begin
|
430
|
+
ignored_endpoints = get(:'ignored_endpoints')
|
431
|
+
|
432
|
+
# If, for some odd reason you have a comma in your endpoint name, use the
|
433
|
+
# YML config instead.
|
434
|
+
if ignored_endpoints.is_a?(String)
|
435
|
+
ignored_endpoints = ignored_endpoints.split(/\s*,\s*/)
|
436
|
+
end
|
437
|
+
|
423
438
|
val = Array(get(:'ignored_endpoint'))
|
424
|
-
val.concat(Array(
|
439
|
+
val.concat(Array(ignored_endpoints))
|
425
440
|
val
|
426
441
|
end
|
427
442
|
end
|
@@ -470,6 +485,11 @@ authentication: #{self[:authentication]}
|
|
470
485
|
|
471
486
|
private
|
472
487
|
|
488
|
+
def check_nfs(path)
|
489
|
+
# Should work on most *nix, though not on OS X
|
490
|
+
`stat -f -L -c %T #{path} 2>&1`.strip == 'nfs'
|
491
|
+
end
|
492
|
+
|
473
493
|
def load_logger
|
474
494
|
unless l = @logger
|
475
495
|
out = get(:'log_file')
|
data/lib/skylight/core.rb
CHANGED
@@ -86,7 +86,7 @@ module Skylight
|
|
86
86
|
end
|
87
87
|
|
88
88
|
# Instrument
|
89
|
-
def self.instrument(opts = DEFAULT_OPTIONS)
|
89
|
+
def self.instrument(opts = DEFAULT_OPTIONS, &block)
|
90
90
|
unless inst = Instrumenter.instance
|
91
91
|
return yield if block_given?
|
92
92
|
return
|
@@ -105,11 +105,7 @@ module Skylight
|
|
105
105
|
desc = nil
|
106
106
|
end
|
107
107
|
|
108
|
-
|
109
|
-
inst.instrument(category, title, desc) { yield }
|
110
|
-
else
|
111
|
-
inst.instrument(category, title, desc)
|
112
|
-
end
|
108
|
+
inst.instrument(category, title, desc, &block)
|
113
109
|
end
|
114
110
|
|
115
111
|
# Temporarily disable
|
data/lib/skylight/native.rb
CHANGED
@@ -32,6 +32,9 @@ module Skylight
|
|
32
32
|
raise LoadError, "Cannot find native extensions in #{libskylight_path}"
|
33
33
|
end
|
34
34
|
end
|
35
|
+
rescue RuntimeError => e
|
36
|
+
# Old versions of OS X can have dlerrors, just treat it like a missing native
|
37
|
+
raise if skylight_required || e.message !~ /dlerror/
|
35
38
|
rescue LoadError => e
|
36
39
|
raise if skylight_required
|
37
40
|
end
|
@@ -13,11 +13,11 @@ module Skylight
|
|
13
13
|
|
14
14
|
def normalize(trace, name, payload)
|
15
15
|
case payload[:name]
|
16
|
-
when "SCHEMA", "CACHE"
|
16
|
+
when "SCHEMA".freeze, "CACHE".freeze
|
17
17
|
return :skip
|
18
18
|
else
|
19
19
|
name = CAT
|
20
|
-
title = payload[:name] || "SQL"
|
20
|
+
title = payload[:name] || "SQL".freeze
|
21
21
|
end
|
22
22
|
|
23
23
|
binds = payload[:binds]
|
@@ -41,9 +41,9 @@ module Skylight
|
|
41
41
|
|
42
42
|
def extract_binds(payload, precalculated)
|
43
43
|
case config[:sql_mode]
|
44
|
-
when 'rust'
|
44
|
+
when 'rust'.freeze
|
45
45
|
extract_rust(payload)
|
46
|
-
when 'ruby'
|
46
|
+
when 'ruby'.freeze
|
47
47
|
extract_ruby(payload, precalculated)
|
48
48
|
else
|
49
49
|
raise "Unrecognized sql_mode: #{config.sql_mode}"
|
@@ -15,11 +15,11 @@ module Skylight
|
|
15
15
|
type = operation && operation.class.to_s =~ /^Moped::Protocol::(.+)$/ ? $1 : nil
|
16
16
|
|
17
17
|
case type
|
18
|
-
when "Query"
|
19
|
-
when "GetMore"
|
20
|
-
when "Insert"
|
21
|
-
when "Update"
|
22
|
-
when "Delete"
|
18
|
+
when "Query".freeze then normalize_query(operation)
|
19
|
+
when "GetMore".freeze then normalize_get_more(operation)
|
20
|
+
when "Insert".freeze then normalize_insert(operation)
|
21
|
+
when "Update".freeze then normalize_update(operation)
|
22
|
+
when "Delete".freeze then normalize_delete(operation)
|
23
23
|
else :skip
|
24
24
|
end
|
25
25
|
end
|
@@ -27,7 +27,7 @@ module Skylight
|
|
27
27
|
private
|
28
28
|
|
29
29
|
def normalize_query(operation)
|
30
|
-
title = normalize_title("QUERY", operation)
|
30
|
+
title = normalize_title("QUERY".freeze, operation)
|
31
31
|
|
32
32
|
hash = extract_binds(operation.selector)
|
33
33
|
description = hash.to_json
|
@@ -36,19 +36,19 @@ module Skylight
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def normalize_get_more(operation)
|
39
|
-
title = normalize_title("GET_MORE", operation)
|
39
|
+
title = normalize_title("GET_MORE".freeze, operation)
|
40
40
|
|
41
41
|
[CAT, title, nil]
|
42
42
|
end
|
43
43
|
|
44
44
|
def normalize_insert(operation)
|
45
|
-
title = normalize_title("INSERT", operation)
|
45
|
+
title = normalize_title("INSERT".freeze, operation)
|
46
46
|
|
47
47
|
[CAT, title, nil]
|
48
48
|
end
|
49
49
|
|
50
50
|
def normalize_update(operation)
|
51
|
-
title = normalize_title("UPDATE", operation)
|
51
|
+
title = normalize_title("UPDATE".freeze, operation)
|
52
52
|
|
53
53
|
selector_hash = extract_binds(operation.selector)
|
54
54
|
update_hash = extract_binds(operation.update)
|
@@ -59,7 +59,7 @@ module Skylight
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def normalize_delete(operation)
|
62
|
-
title = normalize_title("DELETE", operation)
|
62
|
+
title = normalize_title("DELETE".freeze, operation)
|
63
63
|
|
64
64
|
hash = extract_binds(operation.selector)
|
65
65
|
description = hash.to_json
|
@@ -78,17 +78,13 @@ module Skylight
|
|
78
78
|
if v.is_a?(Hash)
|
79
79
|
ret[k] = extract_binds(v)
|
80
80
|
else
|
81
|
-
ret[k] = '?'
|
81
|
+
ret[k] = '?'.freeze
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
ret
|
86
86
|
end
|
87
87
|
|
88
|
-
def stringify(value)
|
89
|
-
value.is_a?(Regexp) ? value.inspect : value.to_s
|
90
|
-
end
|
91
|
-
|
92
88
|
end
|
93
89
|
end
|
94
90
|
end
|
@@ -53,8 +53,9 @@ module Skylight
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def end_instrumentation(datum)
|
56
|
-
@requests
|
57
|
-
|
56
|
+
if request = @requests.delete(datum.object_id)
|
57
|
+
Skylight.done(request)
|
58
|
+
end
|
58
59
|
rescue Exception => e
|
59
60
|
error "failed to end instrumentation for Excon; msg=%s", e.message
|
60
61
|
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
module Skylight
|
2
|
+
module Probes
|
3
|
+
module Mongo
|
4
|
+
class Probe
|
5
|
+
def install
|
6
|
+
::Mongo::Monitoring::Global.subscribe(::Mongo::Monitoring::COMMAND, Subscriber.new)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Subscriber
|
11
|
+
include Skylight::Util::Logging
|
12
|
+
|
13
|
+
COMMANDS = [:insert, :find, :count, :distinct, :update, :findandmodify, :delete].freeze
|
14
|
+
|
15
|
+
COMMAND_NAMES = {
|
16
|
+
findandmodify: 'findAndModify'.freeze
|
17
|
+
}.freeze
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@events = {}
|
21
|
+
end
|
22
|
+
|
23
|
+
def started(event)
|
24
|
+
begin_instrumentation(event)
|
25
|
+
end
|
26
|
+
|
27
|
+
def succeeded(event)
|
28
|
+
end_instrumentation(event)
|
29
|
+
end
|
30
|
+
|
31
|
+
def failed(event)
|
32
|
+
end_instrumentation(event)
|
33
|
+
end
|
34
|
+
|
35
|
+
# For logging
|
36
|
+
def config
|
37
|
+
instrumenter = Skylight::Instrumenter.instance
|
38
|
+
instrumenter ? instrumenter.config : nil
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def begin_instrumentation(event)
|
44
|
+
return unless COMMANDS.include?(event.command_name.to_sym)
|
45
|
+
|
46
|
+
command_name = COMMAND_NAMES[event.command_name] || event.command_name
|
47
|
+
|
48
|
+
title = "#{event.database_name}.#{command_name}"
|
49
|
+
|
50
|
+
command = event.command
|
51
|
+
|
52
|
+
# Not sure if this will always exist
|
53
|
+
# Delete so the description will be less redundant
|
54
|
+
if target = command[event.command_name]
|
55
|
+
title << " #{target}"
|
56
|
+
end
|
57
|
+
|
58
|
+
payload = {}
|
59
|
+
|
60
|
+
# Ruby Hashes are ordered based on insertion so do the most important ones first
|
61
|
+
|
62
|
+
add_value('key'.freeze, command, payload)
|
63
|
+
add_bound('query'.freeze, command, payload)
|
64
|
+
add_bound('filter'.freeze, command, payload)
|
65
|
+
add_value('sort'.freeze, command, payload)
|
66
|
+
|
67
|
+
if event.command_name == :findandmodify
|
68
|
+
add_bound('update'.freeze, command, payload)
|
69
|
+
end
|
70
|
+
|
71
|
+
add_value('remove'.freeze, command, payload)
|
72
|
+
add_value('new'.freeze, command, payload)
|
73
|
+
|
74
|
+
if updates = command['updates'.freeze]
|
75
|
+
# AFAICT the gem generally just sends one item in the updates array
|
76
|
+
update = updates[0]
|
77
|
+
update_payload = {}
|
78
|
+
add_bound('q'.freeze, update, update_payload)
|
79
|
+
add_bound('u'.freeze, update, update_payload)
|
80
|
+
add_value('multi'.freeze, update, update_payload)
|
81
|
+
add_value('upsert'.freeze, update, update_payload)
|
82
|
+
|
83
|
+
payload['updates'.freeze] = [update_payload]
|
84
|
+
|
85
|
+
if updates.length > 1
|
86
|
+
payload['updates'.freeze] << '...'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
if deletes = command['deletes'.freeze]
|
91
|
+
# AFAICT the gem generally just sends one item in the updates array
|
92
|
+
delete = deletes[0]
|
93
|
+
delete_payload = {}
|
94
|
+
add_bound('q'.freeze, delete, delete_payload)
|
95
|
+
add_value('limit'.freeze, delete, delete_payload)
|
96
|
+
|
97
|
+
payload['deletes'.freeze] = [delete_payload]
|
98
|
+
|
99
|
+
if deletes.length > 1
|
100
|
+
payload['deletes'.freeze] << '...'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
# We're ignoring documents from insert because they could have completely inconsistent
|
106
|
+
# format which would make it hard to merge.
|
107
|
+
|
108
|
+
opts = {
|
109
|
+
category: "db.mongo.command".freeze,
|
110
|
+
title: title,
|
111
|
+
description: payload.empty? ? nil : payload.to_json
|
112
|
+
}
|
113
|
+
|
114
|
+
@events[event.operation_id] = Skylight.instrument(opts)
|
115
|
+
rescue Exception => e
|
116
|
+
error "failed to begin instrumentation for Mongo; msg=%s", e.message
|
117
|
+
end
|
118
|
+
|
119
|
+
def end_instrumentation(event)
|
120
|
+
if original_event = @events.delete(event.operation_id)
|
121
|
+
Skylight.done(original_event)
|
122
|
+
end
|
123
|
+
rescue Exception => e
|
124
|
+
error "failed to end instrumentation for Mongo; msg=%s", e.message
|
125
|
+
end
|
126
|
+
|
127
|
+
def add_value(key, command, payload)
|
128
|
+
if command.has_key?(key)
|
129
|
+
value = command[key]
|
130
|
+
payload[key] = value
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def add_bound(key, command, payload)
|
135
|
+
if value = command[key]
|
136
|
+
payload[key] = extract_binds(value)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def extract_binds(hash)
|
141
|
+
ret = {}
|
142
|
+
|
143
|
+
hash.each do |k,v|
|
144
|
+
if v.is_a?(Hash)
|
145
|
+
ret[k] = extract_binds(v)
|
146
|
+
else
|
147
|
+
ret[k] = '?'.freeze
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
ret
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
register("Mongo", "mongo", Mongo::Probe.new)
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Skylight
|
2
|
+
module Probes
|
3
|
+
module Mongoid
|
4
|
+
class Probe
|
5
|
+
|
6
|
+
def install
|
7
|
+
require 'mongoid/version'
|
8
|
+
version = Gem::Version.new(::Mongoid::VERSION)
|
9
|
+
|
10
|
+
if version < Gem::Version.new("5.0")
|
11
|
+
require 'skylight/probes/moped'
|
12
|
+
else
|
13
|
+
require 'skylight/probes/mongo'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
register("Mongoid", "mongoid", Mongoid::Probe.new)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Skylight
|
2
|
+
module Probes
|
3
|
+
module Moped
|
4
|
+
class Probe
|
5
|
+
|
6
|
+
def install
|
7
|
+
::Moped::Instrumentable.module_eval do
|
8
|
+
alias instrument_without_sk instrument
|
9
|
+
|
10
|
+
def instrument(*args, &block)
|
11
|
+
# Mongoid sets the instrumenter to AS::N
|
12
|
+
if instrumenter == ActiveSupport::Notifications
|
13
|
+
asn_block = block
|
14
|
+
else
|
15
|
+
# If the instrumenter hasn't been changed to AS::N use both
|
16
|
+
asn_block = Proc.new do
|
17
|
+
ActiveSupport::Notifications.instrument(*args, &block)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
instrument_without_sk(*args, &asn_block)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
register("Moped", "moped", Moped::Probe.new)
|
30
|
+
end
|
31
|
+
end
|
data/lib/skylight/railtie.rb
CHANGED
@@ -66,12 +66,12 @@ module Skylight
|
|
66
66
|
end
|
67
67
|
|
68
68
|
config = Config.load(file: path, environment: Rails.env.to_s)
|
69
|
-
config[
|
69
|
+
config[:root] = Rails.root
|
70
70
|
|
71
71
|
configure_logging(config, app)
|
72
72
|
|
73
|
-
config['daemon.sockdir_path'] ||= tmp
|
74
|
-
config['normalizers.render.view_paths'] = existent_paths(app.config.paths["app/views"]) + [Rails.root.to_s]
|
73
|
+
config[:'daemon.sockdir_path'] ||= tmp
|
74
|
+
config[:'normalizers.render.view_paths'] = existent_paths(app.config.paths["app/views"]) + [Rails.root.to_s]
|
75
75
|
config.validate!
|
76
76
|
config
|
77
77
|
|
data/lib/skylight/trace.rb
CHANGED
@@ -30,9 +30,7 @@ module Skylight
|
|
30
30
|
@notifications = []
|
31
31
|
|
32
32
|
# create the root node
|
33
|
-
@root =
|
34
|
-
native_span_set_title(@root, title) if title
|
35
|
-
native_span_set_description(@root, desc) if desc
|
33
|
+
@root = start(native_get_started_at, cat, title, desc, normalize: false)
|
36
34
|
|
37
35
|
@gc = config.gc.track unless ENV.key?("SKYLIGHT_DISABLE_GC_TRACKING")
|
38
36
|
end
|
@@ -140,15 +138,18 @@ module Skylight
|
|
140
138
|
|
141
139
|
private
|
142
140
|
|
143
|
-
def start(time, cat, title, desc)
|
144
|
-
|
141
|
+
def start(time, cat, title, desc, opts={})
|
142
|
+
time = self.class.normalize_time(time) unless opts[:normalize] == false
|
143
|
+
|
144
|
+
sp = native_start_span(time, cat.to_s)
|
145
145
|
native_span_set_title(sp, title.to_s) if title
|
146
146
|
native_span_set_description(sp, desc.to_s) if desc
|
147
147
|
sp
|
148
148
|
end
|
149
149
|
|
150
150
|
def stop(span, time)
|
151
|
-
|
151
|
+
time = self.class.normalize_time(time)
|
152
|
+
native_stop_span(span, time)
|
152
153
|
nil
|
153
154
|
end
|
154
155
|
|
data/lib/skylight/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skylight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tilde, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -86,6 +86,9 @@ files:
|
|
86
86
|
- lib/skylight/probes/excon.rb
|
87
87
|
- lib/skylight/probes/excon/middleware.rb
|
88
88
|
- lib/skylight/probes/grape.rb
|
89
|
+
- lib/skylight/probes/mongo.rb
|
90
|
+
- lib/skylight/probes/mongoid.rb
|
91
|
+
- lib/skylight/probes/moped.rb
|
89
92
|
- lib/skylight/probes/net_http.rb
|
90
93
|
- lib/skylight/probes/redis.rb
|
91
94
|
- lib/skylight/probes/sequel.rb
|