skylight 2.0.0.beta3 → 2.0.0
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/CHANGELOG.md +23 -7
- data/ext/libskylight.yml +6 -6
- data/ext/skylight_native.c +8 -5
- data/lib/skylight.rb +2 -0
- data/lib/skylight/config.rb +7 -4
- data/lib/skylight/probes/sinatra_add_middleware.rb +1 -1
- data/lib/skylight/railtie.rb +2 -2
- data/lib/skylight/sinatra.rb +1 -2
- data/lib/skylight/trace.rb +48 -0
- data/lib/skylight/util/deploy.rb +134 -0
- data/lib/skylight/version.rb +1 -1
- metadata +8 -8
- data/lib/skylight/normalizers/active_job/enqueue_at.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17059168e3e446548088b9b7c407c1bbccb75c23761bcb86cda22a25bf33f1b2
|
4
|
+
data.tar.gz: 8e7c71985c76b22fdf0b02055a2ef383941590cb6f1780386611c6a7a83f3b37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90d537527078acf4b625b8316fb172f30a5ba262674ccd235e3e1171beda689bbd0dedb6366ec843716c3ff51aa3993e79b03e9127e78a353d6f4cdb64a415ad
|
7
|
+
data.tar.gz: fbe5fd2153f0a85c3ae15f25d3aa364400e095743f810a86813e21dc08a510007e6719ef5de43e90a83ea175d3f6e2487c39960f69af5c8c1ef7f80fb67c0247
|
data/CHANGELOG.md
CHANGED
@@ -1,19 +1,35 @@
|
|
1
|
-
## 2.0.0
|
1
|
+
## 2.0.0 (April 25, 2018)
|
2
2
|
|
3
|
+
* [FEATURE] New SQL lexer to support a wider variety of SQL queries.
|
4
|
+
* [BREAKING] Drop support for Ruby versions prior to 2.2
|
5
|
+
* [BREAKING] Drop support for Rails versions prior to 4.2
|
6
|
+
* [BREAKING] Drop support for Tilt versions prior to 1.4.1
|
7
|
+
* [BREAKING] Drop support for Sinatra versions prior to 1.4
|
8
|
+
* [BREAKING] Drop support for Grape versions prior to 0.13.0
|
9
|
+
* [BREAKING] Drop support for Linux with glibc versions prior to 2.15
|
10
|
+
* [BREAKING] Remove couch_potato normalizer as it doesn't appear to have ever worked
|
3
11
|
* [BREAKING] `log_sql_parse_errors` config option is now on by default.
|
12
|
+
* [IMPROVEMENT] Auto-disable Middleware probe if it appears to be causing issues
|
13
|
+
* [IMPROVEMENT] More detailed logging and improved error handling
|
14
|
+
* [IMPROVEMENT] Fix Ruby Warnings (Thanks @amatsuda!)
|
4
15
|
* [IMPROVEMENT] Improved handling of errors generated in the Rust agent.
|
5
|
-
* [IMPROVEMENT] Add a probe method to Instrumentable as a shortcut
|
6
16
|
* [IMRPOVEMENT] Add logging to Instrumentable for easier access
|
7
17
|
* [IMPROVEMENT] Improved logging during startup
|
8
18
|
|
9
|
-
##
|
19
|
+
## 1.7.0 (April 24, 2018)
|
10
20
|
|
11
|
-
* [
|
21
|
+
* [FEATURE] New API for loading Probes. Example: `Skylight.probe(:excon')`
|
22
|
+
* [FEATURE] New API for enabling non-default Normalizers. Example: `Skylight.enable_normalizer('active_job')`
|
23
|
+
* [DEPRECATION] Support for Rails versions prior to 4.2
|
24
|
+
* [DEPRECATION] Support for Tilt versions prior to 1.4.1
|
25
|
+
* [DEPRECATION] Support for Sinatra versions prior to 1.4
|
26
|
+
* [DEPRECATION] Support for Grape versions prior to 0.13.0
|
12
27
|
|
13
|
-
##
|
28
|
+
## 1.6.1 (April 12, 2018)
|
14
29
|
|
15
|
-
* [
|
16
|
-
* [
|
30
|
+
* [IMPROVEMENT] Include endpoint name in error logging
|
31
|
+
* [BUGFIX] Make sure to correctly release broken traces
|
32
|
+
* [BUGFIX] Keep the `require` method private when overwriting
|
17
33
|
|
18
34
|
## 1.6.0 (March 21, 2018)
|
19
35
|
|
data/ext/libskylight.yml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
---
|
2
|
-
version: "2.0.0-
|
2
|
+
version: "2.0.0-b7a5dfb"
|
3
3
|
checksums:
|
4
|
-
x86-linux: "
|
5
|
-
x86_64-linux: "
|
6
|
-
x86_64-linux-musl: "
|
7
|
-
x86_64-darwin: "
|
8
|
-
x86_64-freebsd: "
|
4
|
+
x86-linux: "9d0f7236869d27c4f3614fa3428271c1d5a1d5cb0a7ac42d6242610b0baa3295"
|
5
|
+
x86_64-linux: "12a0ec3c8e74a23e38d4ccaf670a5d167e2d977075b89caf5f3e9b2274b83d4d"
|
6
|
+
x86_64-linux-musl: "23c0858b0a8e5aad5fb34f7417f677dadc37c66a874e9a43ffae32f6ed174ce6"
|
7
|
+
x86_64-darwin: "0a62e2cca7b13b1663663a84071b1be428556c69f2eee74a2e698c8ada8b4381"
|
8
|
+
x86_64-freebsd: "a3f10212dce2dbc4f169dbb1ec18c58ede4bbf324aa0bdbd9ff79fecc37b7423"
|
data/ext/skylight_native.c
CHANGED
@@ -46,8 +46,10 @@ STR2BUF(VALUE str) {
|
|
46
46
|
|
47
47
|
#define CHECK_FFI(code, method_name) \
|
48
48
|
do { \
|
49
|
-
if
|
50
|
-
|
49
|
+
/* Ensure single execution if code is function call */ \
|
50
|
+
int c = (code); \
|
51
|
+
if (c != 0 ) { \
|
52
|
+
VALUE error_class = rb_funcall(rb_eNativeError, rb_intern("for_code"), 1, INT2NUM(c)); \
|
51
53
|
rb_raise(error_class, method_name); \
|
52
54
|
return Qnil; \
|
53
55
|
} \
|
@@ -155,11 +157,12 @@ clock_high_res_time(VALUE self) {
|
|
155
157
|
*/
|
156
158
|
|
157
159
|
static VALUE
|
158
|
-
instrumenter_new(VALUE klass, VALUE rb_env) {
|
160
|
+
instrumenter_new(VALUE klass, VALUE rb_uuid, VALUE rb_env) {
|
159
161
|
sky_instrumenter_t* instrumenter;
|
160
162
|
sky_buf_t env[256];
|
161
163
|
int i, envc;
|
162
164
|
|
165
|
+
CHECK_TYPE(rb_uuid, T_STRING);
|
163
166
|
CHECK_TYPE(rb_env, T_ARRAY);
|
164
167
|
|
165
168
|
if (RARRAY_LEN(rb_env) >= 256) {
|
@@ -179,7 +182,7 @@ instrumenter_new(VALUE klass, VALUE rb_env) {
|
|
179
182
|
}
|
180
183
|
|
181
184
|
CHECK_FFI(
|
182
|
-
sky_instrumenter_new(env, envc, &instrumenter),
|
185
|
+
sky_instrumenter_new(STR2BUF(rb_uuid), env, envc, &instrumenter),
|
183
186
|
"Instrumenter#native_new");
|
184
187
|
|
185
188
|
return Data_Wrap_Struct(klass, NULL, sky_instrumenter_free, instrumenter);
|
@@ -572,7 +575,7 @@ void Init_skylight_native() {
|
|
572
575
|
rb_define_method(rb_cTrace, "native_span_get_correlation_header", trace_span_get_correlation_header, 1);
|
573
576
|
|
574
577
|
rb_cInstrumenter = rb_const_get(rb_mSkylight, rb_intern("Instrumenter"));
|
575
|
-
rb_define_singleton_method(rb_cInstrumenter, "native_new", instrumenter_new,
|
578
|
+
rb_define_singleton_method(rb_cInstrumenter, "native_new", instrumenter_new, 2);
|
576
579
|
rb_define_method(rb_cInstrumenter, "native_start", instrumenter_start, 0);
|
577
580
|
rb_define_method(rb_cInstrumenter, "native_stop", instrumenter_stop, 0);
|
578
581
|
rb_define_method(rb_cInstrumenter, "native_submit_trace", instrumenter_submit_trace, 1);
|
data/lib/skylight.rb
CHANGED
data/lib/skylight/config.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'openssl'
|
2
|
-
require 'skylight/
|
2
|
+
require 'skylight/util/deploy'
|
3
3
|
require 'skylight/core/util/platform'
|
4
4
|
require 'skylight/util/hostname'
|
5
5
|
require 'skylight/util/ssl'
|
@@ -25,6 +25,9 @@ module Skylight
|
|
25
25
|
# == Sql Lexer ==
|
26
26
|
'USE_OLD_SQL_LEXER' => :use_old_sql_lexer,
|
27
27
|
|
28
|
+
# == Max Span Handling ==
|
29
|
+
'REPORT_MAX_SPANS_EXCEEDED' => :report_max_spans_exceeded,
|
30
|
+
|
28
31
|
# == Instrumenter ==
|
29
32
|
"IGNORED_ENDPOINT" => :ignored_endpoint,
|
30
33
|
"IGNORED_ENDPOINTS" => :ignored_endpoints,
|
@@ -80,7 +83,8 @@ module Skylight
|
|
80
83
|
:validation_url => 'https://auth.skylight.io/agent/config',
|
81
84
|
:'daemon.lazy_start' => true,
|
82
85
|
:hostname => Util::Hostname.default_hostname,
|
83
|
-
:use_old_sql_lexer => false
|
86
|
+
:use_old_sql_lexer => false,
|
87
|
+
:report_max_spans_exceeded => false
|
84
88
|
)
|
85
89
|
|
86
90
|
if Core::Util::Platform::OS != 'darwin'
|
@@ -113,7 +117,6 @@ module Skylight
|
|
113
117
|
:version,
|
114
118
|
:root,
|
115
119
|
:hostname,
|
116
|
-
:deploy_id,
|
117
120
|
:session_token,
|
118
121
|
:auth_url,
|
119
122
|
:auth_http_deflate,
|
@@ -278,7 +281,7 @@ authentication: #{self[:authentication]}
|
|
278
281
|
end
|
279
282
|
|
280
283
|
def deploy
|
281
|
-
@deploy ||=
|
284
|
+
@deploy ||= Util::Deploy.build(self)
|
282
285
|
end
|
283
286
|
|
284
287
|
private
|
data/lib/skylight/railtie.rb
CHANGED
@@ -16,10 +16,10 @@ module Skylight
|
|
16
16
|
config.skylight.config_path = "config/skylight.yml"
|
17
17
|
|
18
18
|
# The probes to load
|
19
|
-
# net_http, action_controller,
|
19
|
+
# net_http, action_controller, action_dispatch, action_view, and middleware are on by default
|
20
20
|
# See https://www.skylight.io/support/getting-more-from-skylight#available-instrumentation-options
|
21
21
|
# for a full list.
|
22
|
-
config.skylight.probes = ['net_http', 'action_controller', '
|
22
|
+
config.skylight.probes = ['net_http', 'action_controller', 'action_dispatch', 'action_view', 'middleware']
|
23
23
|
|
24
24
|
# The position in the middleware stack to place Skylight
|
25
25
|
# Default is first, but can be `{ after: Middleware::Name }` or `{ before: Middleware::Name }`
|
data/lib/skylight/sinatra.rb
CHANGED
data/lib/skylight/trace.rb
CHANGED
@@ -1,4 +1,52 @@
|
|
1
1
|
module Skylight
|
2
2
|
class Trace < Core::Trace
|
3
|
+
|
4
|
+
def initialize(*)
|
5
|
+
super
|
6
|
+
@too_many_spans = false
|
7
|
+
end
|
8
|
+
|
9
|
+
def uuid
|
10
|
+
native_get_uuid
|
11
|
+
end
|
12
|
+
|
13
|
+
def uuid=(value)
|
14
|
+
# We can't change the UUID so just check to make sure we weren't trying to change
|
15
|
+
raise "unable to change uuid" unless value == uuid
|
16
|
+
end
|
17
|
+
|
18
|
+
def too_many_spans!
|
19
|
+
@too_many_spans = true
|
20
|
+
end
|
21
|
+
|
22
|
+
def too_many_spans?
|
23
|
+
!!@too_many_spans
|
24
|
+
end
|
25
|
+
|
26
|
+
def maybe_broken(e)
|
27
|
+
if e.is_a?(Skylight::MaximumTraceSpansError) && config.get(:report_max_spans_exceeded)
|
28
|
+
too_many_spans!
|
29
|
+
else
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def traced
|
35
|
+
if too_many_spans?
|
36
|
+
error("[E%04d] The request exceeded the maximum number of spans allowed. It will still " \
|
37
|
+
"be tracked but with reduced information. endpoint=%s", Skylight::MaximumTraceSpansError.code, endpoint)
|
38
|
+
end
|
39
|
+
|
40
|
+
super
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def track_gc(*)
|
46
|
+
# This attempts to log another span which will fail if we have too many
|
47
|
+
return if too_many_spans?
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
3
51
|
end
|
4
52
|
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'uri'
|
3
|
+
require 'skylight/core/util/logging'
|
4
|
+
|
5
|
+
module Skylight
|
6
|
+
module Util
|
7
|
+
|
8
|
+
module Deploy
|
9
|
+
|
10
|
+
def self.build(config)
|
11
|
+
DEPLOY_TYPES.each do |type|
|
12
|
+
deploy = type.new(config)
|
13
|
+
return deploy if deploy.id
|
14
|
+
end
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
class EmptyDeploy
|
19
|
+
|
20
|
+
attr_reader :config
|
21
|
+
attr_reader :timestamp
|
22
|
+
|
23
|
+
def initialize(config)
|
24
|
+
@config = config
|
25
|
+
@timestamp = Time.now.to_i
|
26
|
+
end
|
27
|
+
|
28
|
+
def id
|
29
|
+
git_sha
|
30
|
+
end
|
31
|
+
|
32
|
+
def git_sha
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def description
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_query_string
|
41
|
+
hash = {
|
42
|
+
timestamp: timestamp,
|
43
|
+
deploy_id: id.to_s[0..100] # Keep this sane
|
44
|
+
}
|
45
|
+
hash[:git_sha] = git_sha[0..40] if git_sha # A valid SHA will never exceed 40
|
46
|
+
hash[:description] = description[0..255] if description # Avoid massive descriptions
|
47
|
+
URI.encode_www_form(hash)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
class DefaultDeploy < EmptyDeploy
|
53
|
+
include Core::Util::Logging
|
54
|
+
|
55
|
+
def initialize(*)
|
56
|
+
super
|
57
|
+
if description && !id
|
58
|
+
warn "The configured deploy will be ignored as an id or git_sha must be provided."
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def id
|
63
|
+
config.get(:'deploy.id') || git_sha
|
64
|
+
end
|
65
|
+
|
66
|
+
def git_sha
|
67
|
+
config.get(:'deploy.git_sha')
|
68
|
+
end
|
69
|
+
|
70
|
+
def description
|
71
|
+
config.get(:'deploy.description')
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
class HerokuDeploy < EmptyDeploy
|
77
|
+
|
78
|
+
def initialize(*)
|
79
|
+
super
|
80
|
+
@info = get_info
|
81
|
+
end
|
82
|
+
|
83
|
+
def id
|
84
|
+
@info ? @info['id'] : nil
|
85
|
+
end
|
86
|
+
|
87
|
+
def git_sha
|
88
|
+
@info ? @info['commit'] : nil
|
89
|
+
end
|
90
|
+
|
91
|
+
def description
|
92
|
+
@info ? @info['description'] : nil
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def get_info
|
98
|
+
info_path = config[:'heroku.dyno_info_path']
|
99
|
+
|
100
|
+
if File.exist?(info_path)
|
101
|
+
if info = JSON.parse(File.read(info_path))
|
102
|
+
info['release']
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
class GitDeploy < EmptyDeploy
|
110
|
+
|
111
|
+
attr_reader :git_sha, :description
|
112
|
+
|
113
|
+
def initialize(*)
|
114
|
+
super
|
115
|
+
@git_sha, @description = get_info
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def get_info
|
121
|
+
Dir.chdir(config.root) do
|
122
|
+
info = `git log -1 --pretty="%H %s" 2>&1`
|
123
|
+
info.split(" ", 2).map(&:strip) if $?.success?
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
DEPLOY_TYPES = [DefaultDeploy, HerokuDeploy, GitDeploy]
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
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: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tilde, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: skylight-core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0.0
|
19
|
+
version: 2.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.0.0
|
26
|
+
version: 2.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,11 +184,11 @@ files:
|
|
184
184
|
- lib/skylight/middleware.rb
|
185
185
|
- lib/skylight/native.rb
|
186
186
|
- lib/skylight/native_ext_fetcher.rb
|
187
|
-
- lib/skylight/normalizers/active_job/enqueue_at.rb
|
188
187
|
- lib/skylight/probes/sinatra_add_middleware.rb
|
189
188
|
- lib/skylight/railtie.rb
|
190
189
|
- lib/skylight/sinatra.rb
|
191
190
|
- lib/skylight/trace.rb
|
191
|
+
- lib/skylight/util/deploy.rb
|
192
192
|
- lib/skylight/util/hostname.rb
|
193
193
|
- lib/skylight/util/http.rb
|
194
194
|
- lib/skylight/util/ssl.rb
|
@@ -247,12 +247,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
247
247
|
version: 2.2.7
|
248
248
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
249
249
|
requirements:
|
250
|
-
- - "
|
250
|
+
- - ">="
|
251
251
|
- !ruby/object:Gem::Version
|
252
|
-
version:
|
252
|
+
version: '0'
|
253
253
|
requirements: []
|
254
254
|
rubyforge_project:
|
255
|
-
rubygems_version: 2.7.
|
255
|
+
rubygems_version: 2.7.6
|
256
256
|
signing_key:
|
257
257
|
specification_version: 4
|
258
258
|
summary: Skylight is a smart profiler for Rails, Sinatra, and other Ruby apps.
|