skylight 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/ext/libskylight.yml +5 -4
- data/lib/skylight/cli.rb +8 -0
- data/lib/skylight/config.rb +1 -1
- data/lib/skylight/normalizers.rb +1 -0
- data/lib/skylight/normalizers/elasticsearch/request.rb +20 -0
- data/lib/skylight/probes/action_controller.rb +9 -5
- data/lib/skylight/probes/elasticsearch.rb +34 -0
- data/lib/skylight/probes/httpclient.rb +46 -0
- data/lib/skylight/probes/net_http.rb +14 -1
- data/lib/skylight/railtie.rb +3 -1
- data/lib/skylight/user_config.rb +22 -4
- data/lib/skylight/util/platform.rb +9 -1
- data/lib/skylight/util/proxy.rb +2 -1
- data/lib/skylight/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1699f6ba8c234cdf6b89fd396784d237522fc664
|
4
|
+
data.tar.gz: ed71e8ba5f1fba9a80100c1f3a9aa92f8e730254
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba7ff221b40a563cf0367f4622f173e28277bceabac3f73b640b414b608cd104cc9fb78fcf14d199a254371dc537a185b1145ec7411aa049ffcc18d9381891a0
|
7
|
+
data.tar.gz: a7a7d90630a59b8657c93519e67b442478cdb83730bbc3e9f07415239a6373b79d29dc0837883613fc602abff370731acdfd0ae7f14a03e035f7bea570a58531
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## 1.1.0 (March 9, 2017)
|
2
|
+
|
3
|
+
* [FEATURE] Support musl-based OSes (including Alpine Linux)
|
4
|
+
* [FEATURE] Add Elasticsearch Probe
|
5
|
+
* [FEATURE] Add HTTPClient probe (#76)j
|
6
|
+
* [IMPROVEMENT] Update tested Ruby versions, drop 1.9.2
|
7
|
+
* [BUGFIX] Fix HTTP_PROXY handling of empty strings (#90)
|
8
|
+
* [BUGFIX] Don't crash on empty content_type strings
|
9
|
+
* [BUGFIX] Use more robust method to detect home dir (#75)
|
10
|
+
* [BUGFIX] Add option to suppress environment warning (#62)
|
11
|
+
|
1
12
|
## 1.0.1 (November 15, 2016)
|
2
13
|
|
3
14
|
* [BUGFIX] Gracefully handle non-writable log files
|
data/ext/libskylight.yml
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
---
|
2
|
-
version: "1.0
|
2
|
+
version: "1.1.0-de45c74"
|
3
3
|
checksums:
|
4
|
-
x86-linux:
|
5
|
-
x86_64-linux:
|
6
|
-
x86_64-
|
4
|
+
x86-linux: "fbfb6a647701403a11e2e81045dd84b3c55ec7fedf60910bfa372c9bf7ef8b5f"
|
5
|
+
x86_64-linux: "6958c20cc35bea207f12e65530460dda64ed6a31556a76de8911ae9c604cff93"
|
6
|
+
x86_64-linux-musl: "65171091e9262755431e52e1b1c3c7e4881c71bbf8ded322aa599f137baecf10"
|
7
|
+
x86_64-darwin: "238ae95c68a8d4601d2e4e2c2583090750cd70e647c0342f73699ab772b35335"
|
data/lib/skylight/cli.rb
CHANGED
@@ -69,6 +69,14 @@ you should set the `SKYLIGHT_AUTHENTICATION` variable to:
|
|
69
69
|
say "Development mode warning disabled", :green
|
70
70
|
end
|
71
71
|
|
72
|
+
desc "disable_env_warning", "Disables warning about running Skylight in environments not defined in config.skylight.environments"
|
73
|
+
def disable_env_warning
|
74
|
+
user_config.disable_env_warning = true
|
75
|
+
user_config.save
|
76
|
+
|
77
|
+
say "Environment warning disabled", :green
|
78
|
+
end
|
79
|
+
|
72
80
|
private
|
73
81
|
|
74
82
|
def app_name
|
data/lib/skylight/config.rb
CHANGED
@@ -552,7 +552,7 @@ authentication: #{self[:authentication]}
|
|
552
552
|
deploy_str = deploy.to_query_string
|
553
553
|
# A pipe should be a safe delimiter since it's not in the standard token
|
554
554
|
# and is encoded by URI
|
555
|
-
token += "|#{
|
555
|
+
token += "|#{deploy_str}"
|
556
556
|
end
|
557
557
|
|
558
558
|
token
|
data/lib/skylight/normalizers.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Skylight
|
2
|
+
module Normalizers
|
3
|
+
module Elasticsearch
|
4
|
+
class Request < Normalizer
|
5
|
+
register "request.elasticsearch"
|
6
|
+
|
7
|
+
CAT = "db.elasticsearch.request".freeze
|
8
|
+
|
9
|
+
def normalize(trace, name, payload)
|
10
|
+
path = payload[:path].split('/')
|
11
|
+
title = [payload[:method], path[0]].compact.join(' ')
|
12
|
+
desc = {}
|
13
|
+
desc[:type] = path[1] if path[1]
|
14
|
+
desc[:id] = '?' if path[2]
|
15
|
+
[ CAT, title, desc.presence.try(:to_json) ]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -8,11 +8,15 @@ module Skylight
|
|
8
8
|
alias append_info_to_payload_without_sk append_info_to_payload
|
9
9
|
def append_info_to_payload(payload)
|
10
10
|
append_info_to_payload_without_sk(payload)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
rendered_mime = begin
|
12
|
+
if respond_to?(:rendered_format)
|
13
|
+
rendered_format
|
14
|
+
elsif content_type.is_a?(Mime::Type)
|
15
|
+
content_type
|
16
|
+
elsif content_type.respond_to?(:to_s)
|
17
|
+
type_str = content_type.to_s.split(';').first
|
18
|
+
Mime::Type.lookup(type_str) unless type_str.blank?
|
19
|
+
end
|
16
20
|
end
|
17
21
|
payload[:rendered_format] = rendered_mime.try(:ref)
|
18
22
|
payload[:variant] = request.respond_to?(:variant) ? request.variant : nil
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Skylight
|
2
|
+
module Probes
|
3
|
+
module Elasticsearch
|
4
|
+
class Probe
|
5
|
+
def install
|
6
|
+
::Elasticsearch::Transport::Transport::Base.class_eval do
|
7
|
+
alias perform_request_without_sk perform_request
|
8
|
+
def perform_request(method, path, *args, &block)
|
9
|
+
ActiveSupport::Notifications.instrument "request.elasticsearch",
|
10
|
+
name: 'Request',
|
11
|
+
method: method,
|
12
|
+
path: path do
|
13
|
+
|
14
|
+
# Prevent HTTP-related probes from firing
|
15
|
+
disable_skylight_probe(:NetHTTP) do
|
16
|
+
disable_skylight_probe(:HTTPClient) do
|
17
|
+
perform_request_without_sk(method, path, *args, &block)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def disable_skylight_probe(class_name, &block)
|
24
|
+
klass = Skylight::Probes.const_get(class_name).const_get(:Probe) rescue nil
|
25
|
+
klass ? klass.disable(&block) : block.call
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
register("Elasticsearch", "elasticsearch", Elasticsearch::Probe.new)
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'skylight/formatters/http'
|
2
|
+
|
3
|
+
module Skylight
|
4
|
+
module Probes
|
5
|
+
module HTTPClient
|
6
|
+
class Probe
|
7
|
+
DISABLED_KEY = :__skylight_httpclient_disabled
|
8
|
+
|
9
|
+
def self.disable
|
10
|
+
Thread.current[DISABLED_KEY] = true
|
11
|
+
yield
|
12
|
+
ensure
|
13
|
+
Thread.current[DISABLED_KEY] = false
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.disabled?
|
17
|
+
!!Thread.current[DISABLED_KEY]
|
18
|
+
end
|
19
|
+
|
20
|
+
def install
|
21
|
+
::HTTPClient.class_eval do
|
22
|
+
# HTTPClient has request methods on the class object itself,
|
23
|
+
# but the internally instantiate a client and perform the method
|
24
|
+
# on that, so this instance method override will cover both
|
25
|
+
# `HTTPClient.get(...)` and `HTTPClient.new.get(...)`
|
26
|
+
|
27
|
+
alias do_request_without_sk do_request
|
28
|
+
def do_request(method, uri, query, body, header, &block)
|
29
|
+
if Skylight::Probes::HTTPClient::Probe.disabled?
|
30
|
+
return do_request_without_sk(method, uri, query, body, header, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
opts = Formatters::HTTP.build_opts(method, uri.scheme, uri.host, uri.port, uri.path, uri.query)
|
34
|
+
|
35
|
+
Skylight.instrument(opts) do
|
36
|
+
do_request_without_sk(method, uri, query, body, header, &block)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end # class Probe
|
42
|
+
end # module Probes::HTTPClient
|
43
|
+
|
44
|
+
register("HTTPClient", "httpclient", HTTPClient::Probe.new)
|
45
|
+
end
|
46
|
+
end
|
@@ -4,12 +4,25 @@ module Skylight
|
|
4
4
|
module Probes
|
5
5
|
module NetHTTP
|
6
6
|
class Probe
|
7
|
+
DISABLED_KEY = :__skylight_net_http_disabled
|
8
|
+
|
9
|
+
def self.disable
|
10
|
+
Thread.current[DISABLED_KEY] = true
|
11
|
+
yield
|
12
|
+
ensure
|
13
|
+
Thread.current[DISABLED_KEY] = false
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.disabled?
|
17
|
+
!!Thread.current[DISABLED_KEY]
|
18
|
+
end
|
19
|
+
|
7
20
|
def install
|
8
21
|
Net::HTTP.class_eval do
|
9
22
|
alias request_without_sk request
|
10
23
|
|
11
24
|
def request(req, body = nil, &block)
|
12
|
-
|
25
|
+
if !started? || Skylight::Probes::NetHTTP::Probe.disabled?
|
13
26
|
return request_without_sk(req, body, &block)
|
14
27
|
end
|
15
28
|
|
data/lib/skylight/railtie.rb
CHANGED
@@ -42,7 +42,9 @@ module Skylight
|
|
42
42
|
"(To disable this message for all local apps, run `skylight disable_dev_warning`.)"
|
43
43
|
end
|
44
44
|
elsif !Rails.env.test?
|
45
|
-
|
45
|
+
unless UserConfig.instance.disable_env_warning?
|
46
|
+
log_warning config, "[SKYLIGHT] [#{Skylight::VERSION}] You are running in the #{Rails.env} environment but haven't added it to config.skylight.environments, so no data will be sent to skylight.io."
|
47
|
+
end
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
data/lib/skylight/user_config.rb
CHANGED
@@ -3,7 +3,7 @@ require 'yaml'
|
|
3
3
|
module Skylight
|
4
4
|
class UserConfig
|
5
5
|
|
6
|
-
attr_accessor :disable_dev_warning
|
6
|
+
attr_accessor :disable_dev_warning, :disable_env_warning
|
7
7
|
|
8
8
|
def self.instance
|
9
9
|
@instance ||= new
|
@@ -14,18 +14,35 @@ module Skylight
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def file_path
|
17
|
-
|
17
|
+
return @file_path if @file_path
|
18
|
+
|
19
|
+
config_path = ENV.fetch("SKYLIGHT_USER_CONFIG_PATH") do
|
20
|
+
require "etc"
|
21
|
+
home_dir = ENV['HOME'] || Etc.getpwuid.dir || (ENV["USER"] && File.expand_path("~#{ENV['USER']}"))
|
22
|
+
if home_dir
|
23
|
+
File.join(home_dir, ".skylight")
|
24
|
+
else
|
25
|
+
raise KeyError, "SKYLIGHT_USER_CONFIG_PATH must be defined since the home directory cannot be inferred"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
@file_path = File.expand_path(config_path)
|
18
30
|
end
|
19
31
|
|
20
32
|
def disable_dev_warning?
|
21
33
|
disable_dev_warning
|
22
34
|
end
|
23
35
|
|
36
|
+
def disable_env_warning?
|
37
|
+
disable_env_warning
|
38
|
+
end
|
39
|
+
|
24
40
|
def reload
|
25
41
|
config = File.exist?(file_path) ? YAML.load_file(file_path) : false
|
26
42
|
return unless config
|
27
43
|
|
28
44
|
self.disable_dev_warning = !!config['disable_dev_warning']
|
45
|
+
self.disable_env_warning = !!config['disable_env_warning']
|
29
46
|
end
|
30
47
|
|
31
48
|
def save
|
@@ -37,9 +54,10 @@ module Skylight
|
|
37
54
|
|
38
55
|
def to_hash
|
39
56
|
{
|
40
|
-
'disable_dev_warning' => disable_dev_warning
|
57
|
+
'disable_dev_warning' => disable_dev_warning,
|
58
|
+
'disable_env_warning' => disable_env_warning
|
41
59
|
}
|
42
60
|
end
|
43
61
|
|
44
62
|
end
|
45
|
-
end
|
63
|
+
end
|
@@ -7,7 +7,15 @@ module Skylight
|
|
7
7
|
# Normalize the platform OS
|
8
8
|
OS = case os = RbConfig::CONFIG['host_os'].downcase
|
9
9
|
when /linux/
|
10
|
-
|
10
|
+
# The official ruby-alpine Docker containers pre-build Ruby. As a result,
|
11
|
+
# Ruby doesn't know that it's on a musl-based platform. `ldd` is the
|
12
|
+
# only reliable way to detect musl that we've found.
|
13
|
+
# See https://github.com/skylightio/skylight-ruby/issues/92
|
14
|
+
if ENV['SKYLIGHT_MUSL'] || `ldd --version 2>&1` =~ /musl/
|
15
|
+
"linux-musl"
|
16
|
+
else
|
17
|
+
"linux"
|
18
|
+
end
|
11
19
|
when /darwin/
|
12
20
|
"darwin"
|
13
21
|
when /freebsd/
|
data/lib/skylight/util/proxy.rb
CHANGED
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: 1.0
|
4
|
+
version: 1.1.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:
|
11
|
+
date: 2017-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/skylight/normalizers/active_support/cache_read_multi.rb
|
80
80
|
- lib/skylight/normalizers/active_support/cache_write.rb
|
81
81
|
- lib/skylight/normalizers/default.rb
|
82
|
+
- lib/skylight/normalizers/elasticsearch/request.rb
|
82
83
|
- lib/skylight/normalizers/grape/endpoint.rb
|
83
84
|
- lib/skylight/normalizers/grape/endpoint_render.rb
|
84
85
|
- lib/skylight/normalizers/grape/endpoint_run.rb
|
@@ -88,9 +89,11 @@ files:
|
|
88
89
|
- lib/skylight/probes/action_controller.rb
|
89
90
|
- lib/skylight/probes/action_view.rb
|
90
91
|
- lib/skylight/probes/active_model_serializers.rb
|
92
|
+
- lib/skylight/probes/elasticsearch.rb
|
91
93
|
- lib/skylight/probes/excon.rb
|
92
94
|
- lib/skylight/probes/excon/middleware.rb
|
93
95
|
- lib/skylight/probes/grape.rb
|
96
|
+
- lib/skylight/probes/httpclient.rb
|
94
97
|
- lib/skylight/probes/mongo.rb
|
95
98
|
- lib/skylight/probes/mongoid.rb
|
96
99
|
- lib/skylight/probes/moped.rb
|
@@ -185,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
188
|
version: '0'
|
186
189
|
requirements: []
|
187
190
|
rubyforge_project:
|
188
|
-
rubygems_version: 2.
|
191
|
+
rubygems_version: 2.6.8
|
189
192
|
signing_key:
|
190
193
|
specification_version: 4
|
191
194
|
summary: Skylight is a smart profiler for Rails apps
|