skylight 3.1.4 → 5.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +465 -294
  3. data/CLA.md +1 -1
  4. data/CONTRIBUTING.md +11 -3
  5. data/ERRORS.md +3 -0
  6. data/LICENSE.md +8 -18
  7. data/README.md +1 -2
  8. data/bin/skylight +1 -1
  9. data/ext/extconf.rb +118 -122
  10. data/ext/libskylight.yml +8 -6
  11. data/ext/skylight_native.c +56 -100
  12. data/lib/skylight/api.rb +41 -27
  13. data/lib/skylight/cli/doctor.rb +68 -70
  14. data/lib/skylight/cli/helpers.rb +3 -5
  15. data/lib/skylight/cli/merger.rb +99 -92
  16. data/lib/skylight/cli.rb +40 -43
  17. data/lib/skylight/config.rb +656 -201
  18. data/lib/skylight/data/cacert.pem +730 -1023
  19. data/lib/skylight/deprecation.rb +17 -0
  20. data/lib/skylight/errors.rb +34 -16
  21. data/lib/skylight/extensions/source_location.rb +291 -0
  22. data/lib/skylight/extensions.rb +95 -0
  23. data/lib/skylight/formatters/http.rb +18 -0
  24. data/lib/skylight/gc.rb +99 -0
  25. data/lib/skylight/helpers.rb +82 -39
  26. data/lib/skylight/instrumenter.rb +339 -9
  27. data/lib/skylight/middleware.rb +147 -1
  28. data/lib/skylight/native.rb +71 -23
  29. data/lib/skylight/native_ext_fetcher.rb +39 -47
  30. data/lib/skylight/normalizers/action_controller/process_action.rb +68 -0
  31. data/lib/skylight/normalizers/action_controller/send_file.rb +51 -0
  32. data/lib/skylight/normalizers/action_dispatch/process_middleware.rb +22 -0
  33. data/lib/skylight/normalizers/action_dispatch/route_set.rb +27 -0
  34. data/lib/skylight/normalizers/action_view/render_collection.rb +24 -0
  35. data/lib/skylight/normalizers/action_view/render_layout.rb +25 -0
  36. data/lib/skylight/normalizers/action_view/render_partial.rb +23 -0
  37. data/lib/skylight/normalizers/action_view/render_template.rb +23 -0
  38. data/lib/skylight/normalizers/active_job/perform.rb +87 -0
  39. data/lib/skylight/normalizers/active_model_serializers/render.rb +32 -0
  40. data/lib/skylight/normalizers/active_record/instantiation.rb +16 -0
  41. data/lib/skylight/normalizers/active_record/sql.rb +20 -0
  42. data/lib/skylight/normalizers/active_storage.rb +28 -0
  43. data/lib/skylight/normalizers/active_support/cache.rb +11 -0
  44. data/lib/skylight/normalizers/active_support/cache_clear.rb +16 -0
  45. data/lib/skylight/normalizers/active_support/cache_decrement.rb +16 -0
  46. data/lib/skylight/normalizers/active_support/cache_delete.rb +16 -0
  47. data/lib/skylight/normalizers/active_support/cache_exist.rb +16 -0
  48. data/lib/skylight/normalizers/active_support/cache_fetch_hit.rb +16 -0
  49. data/lib/skylight/normalizers/active_support/cache_generate.rb +16 -0
  50. data/lib/skylight/normalizers/active_support/cache_increment.rb +16 -0
  51. data/lib/skylight/normalizers/active_support/cache_read.rb +16 -0
  52. data/lib/skylight/normalizers/active_support/cache_read_multi.rb +16 -0
  53. data/lib/skylight/normalizers/active_support/cache_write.rb +16 -0
  54. data/lib/skylight/normalizers/coach/handler_finish.rb +44 -0
  55. data/lib/skylight/normalizers/coach/middleware_finish.rb +33 -0
  56. data/lib/skylight/normalizers/couch_potato/query.rb +20 -0
  57. data/lib/skylight/normalizers/data_mapper/sql.rb +12 -0
  58. data/lib/skylight/normalizers/default.rb +24 -0
  59. data/lib/skylight/normalizers/elasticsearch/request.rb +20 -0
  60. data/lib/skylight/normalizers/faraday/request.rb +38 -0
  61. data/lib/skylight/normalizers/grape/endpoint.rb +28 -0
  62. data/lib/skylight/normalizers/grape/endpoint_render.rb +25 -0
  63. data/lib/skylight/normalizers/grape/endpoint_run.rb +39 -0
  64. data/lib/skylight/normalizers/grape/endpoint_run_filters.rb +20 -0
  65. data/lib/skylight/normalizers/grape/format_response.rb +20 -0
  66. data/lib/skylight/normalizers/graphiti/render.rb +22 -0
  67. data/lib/skylight/normalizers/graphiti/resolve.rb +31 -0
  68. data/lib/skylight/normalizers/graphql/base.rb +127 -0
  69. data/lib/skylight/normalizers/render.rb +79 -0
  70. data/lib/skylight/normalizers/sequel/sql.rb +12 -0
  71. data/lib/skylight/normalizers/shrine.rb +32 -0
  72. data/lib/skylight/normalizers/sql.rb +41 -0
  73. data/lib/skylight/normalizers.rb +157 -0
  74. data/lib/skylight/probes/action_controller.rb +52 -0
  75. data/lib/skylight/probes/action_dispatch/request_id.rb +33 -0
  76. data/lib/skylight/probes/action_dispatch/routing/route_set.rb +30 -0
  77. data/lib/skylight/probes/action_dispatch.rb +2 -0
  78. data/lib/skylight/probes/action_view.rb +42 -0
  79. data/lib/skylight/probes/active_job.rb +27 -0
  80. data/lib/skylight/probes/active_job_enqueue.rb +35 -0
  81. data/lib/skylight/probes/active_model_serializers.rb +50 -0
  82. data/lib/skylight/probes/active_record_async.rb +96 -0
  83. data/lib/skylight/probes/delayed_job.rb +144 -0
  84. data/lib/skylight/probes/elasticsearch.rb +45 -0
  85. data/lib/skylight/probes/excon/middleware.rb +65 -0
  86. data/lib/skylight/probes/excon.rb +25 -0
  87. data/lib/skylight/probes/faraday.rb +23 -0
  88. data/lib/skylight/probes/graphql.rb +38 -0
  89. data/lib/skylight/probes/httpclient.rb +44 -0
  90. data/lib/skylight/probes/middleware.rb +135 -0
  91. data/lib/skylight/probes/mongo.rb +169 -0
  92. data/lib/skylight/probes/mongoid.rb +6 -0
  93. data/lib/skylight/probes/net_http.rb +54 -0
  94. data/lib/skylight/probes/rack_builder.rb +37 -0
  95. data/lib/skylight/probes/redis.rb +68 -0
  96. data/lib/skylight/probes/sequel.rb +29 -0
  97. data/lib/skylight/probes/sinatra.rb +66 -0
  98. data/lib/skylight/probes/sinatra_add_middleware.rb +10 -10
  99. data/lib/skylight/probes/tilt.rb +25 -0
  100. data/lib/skylight/probes.rb +172 -0
  101. data/lib/skylight/railtie.rb +172 -15
  102. data/lib/skylight/sidekiq.rb +47 -0
  103. data/lib/skylight/sinatra.rb +2 -2
  104. data/lib/skylight/subscriber.rb +130 -0
  105. data/lib/skylight/test.rb +147 -0
  106. data/lib/skylight/trace.rb +331 -15
  107. data/lib/skylight/user_config.rb +60 -0
  108. data/lib/skylight/util/allocation_free.rb +26 -0
  109. data/lib/skylight/util/clock.rb +57 -0
  110. data/lib/skylight/util/component.rb +47 -9
  111. data/lib/skylight/util/deploy.rb +24 -40
  112. data/lib/skylight/util/gzip.rb +20 -0
  113. data/lib/skylight/util/hostname.rb +4 -4
  114. data/lib/skylight/util/http.rb +62 -71
  115. data/lib/skylight/util/instrumenter_method.rb +26 -0
  116. data/lib/skylight/util/logging.rb +136 -0
  117. data/lib/skylight/util/lru_cache.rb +36 -0
  118. data/lib/skylight/util/platform.rb +74 -0
  119. data/lib/skylight/util/proxy.rb +13 -0
  120. data/lib/skylight/util/ssl.rb +4 -28
  121. data/lib/skylight/util.rb +12 -0
  122. data/lib/skylight/vendor/cli/thor/rake_compat.rb +1 -1
  123. data/lib/skylight/version.rb +5 -1
  124. data/lib/skylight/vm/gc.rb +60 -0
  125. data/lib/skylight.rb +213 -24
  126. metadata +171 -53
data/CLA.md CHANGED
@@ -6,4 +6,4 @@ right (whether now known or hereinafter invented), title, and interest,
6
6
  throughout the world, including any copyrights and renewals or extensions
7
7
  thereto, in the contributions to Skylight made by Assignor.
8
8
 
9
- IN WITNESS THEREOF, Assignor has duly executed this Agreement.
9
+ IN WITNESS THEREOF, Assignor has duly executed this Agreement.
data/CONTRIBUTING.md CHANGED
@@ -8,8 +8,16 @@ Before contributing, please [sign the CLA](https://docs.google.com/spreadsheet/v
8
8
 
9
9
  In general, we recommend that you speak with us about any new features you'd like to add so we can make sure we're on the same page.
10
10
 
11
- ## Emulating Travis Builds
11
+ ## Emulating Gitlab CI Builds
12
12
 
13
- We have many Travis build configurations that must pass in order to merge a pull request. You can emulate these configurations locally by running `rake run_travis_builds`. The only prerequisites are that you have both [VirtualBox](https://www.virtualbox.org/wiki/VirtualBox) and [Vagrant](https://www.vagrantup.com/) installed (most recent versions are best).
13
+ We have many CI build configurations that must pass in order to merge a pull request. You can run these individual configurations locally by running e.g., `gitlab-runner exec docker ruby23-rails42`. The only prerequisites are that you have both [Gitlab Runner](https://docs.gitlab.com/runner/) and [Docker](https://www.docker.com/) installed (most recent versions are best). Configuration names may be found in the `.gitlab.yml` file.
14
14
 
15
- After that rake task completes, be sure to run `rake clobber compile`. This will delete the local native extension that was built when you ran `rake run_travis_builds` and rebuilds it.
15
+ If you prefer to run tests in your own environment, you may do so as follows:
16
+
17
+ ```shell
18
+ # Select a gemfile and bundle install
19
+ export BUNDLE_GEMFILE=$PWD/gemfiles/rails-5.2.x/Gemfile
20
+ bundle install
21
+ # Run the test suite (takes 5-10 minutes)
22
+ bundle exec rspec
23
+ ```
data/ERRORS.md CHANGED
@@ -2,4 +2,7 @@ E0001 - Spans were closed out of order
2
2
  E0002 - Exceeded the number of unique span descriptions
3
3
  E0003 - Exceeded maximum number of spans
4
4
  E0004 - Failed to lex SQL query
5
+ E0005 - Instrumenter is not running
6
+ E0006 - Invalid UTF-8
7
+ E0007 - Failed to connect to gRPC server
5
8
  E9999 - Unknown
data/LICENSE.md CHANGED
@@ -1,5 +1,5 @@
1
1
  All other components of this product, except where otherwise noted, are
2
- Copyright (c) 2013-2016 Tilde, Inc.
2
+ Copyright (c) 2013-2019 Tilde, Inc.
3
3
  All rights reserved.
4
4
 
5
5
  Certain inventions disclosed in this file may be claimed within patents
@@ -28,19 +28,15 @@ brand (if any) provided by Tilde.
28
28
  Unless otherwise expressly agreed by Tilde in a separate written
29
29
  license agreement, these files are provided AS IS, WITHOUT WARRANTY OF
30
30
  ANY KIND, including without any implied warranties of MERCHANTABILITY,
31
- FITNESS FOR A PARTICULAR PURPOSE, TITLE, or NON-INFRINGEMENT. As a
31
+ FITNESS FOR A PARTICULAR PURPOSE, TITLE, or NON-INFRINGEMENT. As a
32
32
  condition to your use of these files, you are solely responsible for
33
33
  such use. Tilde will have no liability to you for direct,
34
34
  indirect, consequential, incidental, special, or punitive damages or
35
35
  for lost profits or data.
36
36
 
37
+ # Other Licenses
37
38
 
38
-
39
- Other Licenses
40
- ==============
41
-
42
- Ruby on Rails
43
- -------------
39
+ ## Ruby on Rails
44
40
 
45
41
  Copyright (c) 2005-2016 David Heinemeier Hansson
46
42
 
@@ -48,9 +44,7 @@ Released under the MIT License.
48
44
 
49
45
  Original source at https://github.com/rails/rails.
50
46
 
51
-
52
- HighLine
53
- --------
47
+ ## HighLine
54
48
 
55
49
  Copyright (c) 2014 James Edward Gray II, Gregory Brown, et al.
56
50
 
@@ -58,9 +52,7 @@ Distributed under the user's choice of the GPL Version 2 or the Ruby software li
58
52
 
59
53
  Original source at https://github.com/JEG2/highline.
60
54
 
61
-
62
- Thor
63
- ----
55
+ ## Thor
64
56
 
65
57
  Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al.
66
58
 
@@ -68,12 +60,10 @@ Released under the MIT License.
68
60
 
69
61
  Original source at https://github.com/erikhuda/thor.
70
62
 
71
-
72
- ThreadSafe
73
- ----------
63
+ ## ThreadSafe
74
64
 
75
65
  Copyright (c) 2014 Charles Oliver Nutter, thedarkone, et al.
76
66
 
77
67
  Distributed under Apache License, Version 2.0, January 2004
78
68
 
79
- Original source at https://github.com/ruby-concurrency/thread_safe.
69
+ Original source at https://github.com/ruby-concurrency/thread_safe.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Skylight Ruby Agent
2
2
 
3
- ![Rubygems Version](https://img.shields.io/gem/v/skylight.svg)
3
+ [![Gem Version](https://badge.fury.io/rb/skylight.svg)](https://badge.fury.io/rb/skylight)
4
4
  [![SemVer](https://api.dependabot.com/badges/compatibility_score?dependency-name=skylight&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score.html?dependency-name=skylight&package-manager=bundler&version-scheme=semver)
5
5
 
6
6
  Instrument your ruby application and send the data to the Skylight
@@ -10,7 +10,6 @@ Sign up at https://www.skylight.io.
10
10
 
11
11
  For more documentation see https://www.skylight.io/support.
12
12
 
13
-
14
13
  ## Bug Reports and Feature Requests
15
14
 
16
15
  If you've got a bug report or have a feature you'd like to request, please contact us at support@skylight.io or use the built-in messenger in the Skylight web interface. We'll be much quicker to respond that way :)
data/bin/skylight CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "skylight/cli"
3
- Skylight::CLI::Base.start(ARGV)
3
+ Skylight::CLI::Base.start(ARGV)
data/ext/extconf.rb CHANGED
@@ -1,34 +1,38 @@
1
- require 'rbconfig'
2
- require 'mkmf'
3
- require 'yaml'
4
- require 'logger'
5
- require 'fileutils'
6
-
7
- $:.unshift File.expand_path("../../lib", __FILE__)
8
-
9
- require 'skylight/version'
10
-
11
- # Don't use the gem for dev
12
- if File.exists?(File.expand_path("../../Gemfile", __FILE__))
13
- # This approach won't work in production since skylight-core isn't in the skylight gem
14
- $:.unshift File.expand_path("../../skylight-core/lib", __FILE__)
15
- else
16
- # Is there a better way to get this into lib?
17
- gem 'skylight-core', Skylight::VERSION.tr('-', '.')
18
- end
1
+ require "rbconfig"
2
+ require "mkmf"
3
+ require "yaml"
4
+ require "logger"
5
+ require "fileutils"
6
+
7
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
8
+
9
+ require "skylight/native_ext_fetcher"
10
+ require "skylight/util/platform"
11
+
12
+ GLIBC_MIN = 2.23
13
+ GLIBC_V4_MIN = 2.15
14
+
15
+ ldd_output =
16
+ begin
17
+ `ldd --version`
18
+ rescue Errno::ENOENT
19
+ nil
20
+ end
19
21
 
20
- require 'skylight/native_ext_fetcher'
21
- require 'skylight/core/util/platform'
22
+ if ldd_output =~ /GLIBC (\d+(\.\d+)+)/ && ($1.to_f < GLIBC_MIN)
23
+ message = "glibc #{GLIBC_MIN}+ is required but you have #{$1} installed."
24
+ message << "\nYou may be able to use Skylight v4 instead." if $1.to_f >= GLIBC_V4_MIN
25
+ fail message
26
+ end
22
27
 
23
28
  # Util allowing proxying writes to multiple location
24
29
  class MultiIO
25
-
26
30
  def initialize(*targets)
27
- @targets = targets
31
+ @targets = targets
28
32
  end
29
33
 
30
34
  def write(*args)
31
- @targets.each {|t| t.write(*args)}
35
+ @targets.each { |t| t.write(*args) }
32
36
  end
33
37
 
34
38
  def close
@@ -36,30 +40,31 @@ class MultiIO
36
40
  end
37
41
  end
38
42
 
39
- include Skylight::Core::Util
43
+ include Skylight::Util
40
44
 
41
- SKYLIGHT_INSTALL_LOG = File.expand_path("../install.log", __FILE__)
42
- SKYLIGHT_REQUIRED = ENV.key?("SKYLIGHT_REQUIRED") && ENV['SKYLIGHT_REQUIRED'] !~ /^false$/i
43
- SKYLIGHT_FETCH_LIB = !ENV.key?('SKYLIGHT_FETCH_LIB') || ENV['SKYLIGHT_FETCH_LIB'] !~ /^false$/i
45
+ SKYLIGHT_INSTALL_LOG = File.expand_path("install.log", __dir__)
46
+ SKYLIGHT_REQUIRED = ENV.key?("SKYLIGHT_REQUIRED") && ENV.fetch("SKYLIGHT_REQUIRED", nil) !~ /^false$/i
47
+ SKYLIGHT_FETCH_LIB = !ENV.key?("SKYLIGHT_FETCH_LIB") || ENV.fetch("SKYLIGHT_FETCH_LIB", nil) !~ /^false$/i
44
48
 
45
49
  # Directory where skylight.h exists
46
- SKYLIGHT_HDR_PATH = ENV['SKYLIGHT_HDR_PATH'] || ENV['SKYLIGHT_LIB_PATH'] || '.'
47
- SKYLIGHT_LIB_PATH = ENV['SKYLIGHT_LIB_PATH'] || File.expand_path("../../lib/skylight/native/#{Platform.tuple}", __FILE__)
50
+ SKYLIGHT_HDR_PATH = ENV.fetch("SKYLIGHT_HDR_PATH") { ENV.fetch("SKYLIGHT_LIB_PATH", ".") }
51
+ SKYLIGHT_LIB_PATH =
52
+ ENV.fetch("SKYLIGHT_LIB_PATH") { File.expand_path("../../lib/skylight/native/#{Platform.tuple}", __FILE__) }
48
53
 
49
- SKYLIGHT_SOURCE_URL = ENV['SKYLIGHT_SOURCE_URL']
50
- SKYLIGHT_VERSION = ENV['SKYLIGHT_VERSION']
51
- SKYLIGHT_CHECKSUM = ENV['SKYLIGHT_CHECKSUM']
54
+ SKYLIGHT_SOURCE_URL = ENV.fetch("SKYLIGHT_SOURCE_URL", nil)
55
+ SKYLIGHT_VERSION = ENV.fetch("SKYLIGHT_VERSION", nil)
56
+ SKYLIGHT_CHECKSUM = ENV.fetch("SKYLIGHT_CHECKSUM", nil)
52
57
 
53
- SKYLIGHT_EXT_STRICT = ENV.key?("SKYLIGHT_EXT_STRICT") && ENV['SKYLIGHT_EXT_STRICT'] =~ /^true$/i
58
+ SKYLIGHT_EXT_STRICT = ENV.key?("SKYLIGHT_EXT_STRICT") && ENV.fetch("SKYLIGHT_EXT_STRICT", nil) =~ /^true$/i
54
59
 
55
60
  # Setup logger
56
- LOG = Logger.new(MultiIO.new(STDOUT, File.open(SKYLIGHT_INSTALL_LOG, 'a')))
61
+ LOG = Logger.new(MultiIO.new($stdout, File.open(SKYLIGHT_INSTALL_LOG, "a")))
57
62
 
58
63
  # Handles terminating in the case of a failure. If we have a bug, we do not
59
64
  # want to break our customer's deploy, but extconf.rb requires a Makefile to be
60
65
  # present upon a successful exit. To satisfy this requirement, we create a
61
66
  # dummy Makefile.
62
- def fail(msg, type=:error)
67
+ def fail(msg, type = :error)
63
68
  LOG.send type, msg
64
69
 
65
70
  if SKYLIGHT_REQUIRED
@@ -77,94 +82,89 @@ end
77
82
  # Check that Xcode license has been approved
78
83
  # Based on Homebrew's implementation
79
84
  # https://github.com/Homebrew/homebrew/blob/03708b016755847facc4f19a43ee9f7a44141ed7/Library/Homebrew/cmd/doctor.rb#L1183
80
- if Platform::OS == 'darwin'
81
- # If the user installs Xcode-only, they have to approve the
82
- # license or no "xc*" tool will work.
83
- if `/usr/bin/xcrun clang 2>&1` =~ /license/ && !$?.success?
84
- fail <<-EOS
85
- You have not agreed to the Xcode license and so we are unable to build the native agent.
86
- To resolve this, you can agree to the license by opening Xcode.app or running:
87
- sudo xcodebuild -license
88
- EOS
89
- end
85
+ # If the user installs Xcode-only, they have to approve the
86
+ # license or no "xc*" tool will work.
87
+
88
+ # prettier-ignore
89
+ if Platform::OS == "darwin" && (`/usr/bin/xcrun clang 2>&1` =~ /license/ && !$CHILD_STATUS.success?)
90
+ fail <<~MESSAGE
91
+ You have not agreed to the Xcode license and so we are unable to build the native agent.
92
+ To resolve this, you can agree to the license by opening Xcode.app or running:
93
+ sudo xcodebuild -license
94
+ MESSAGE
90
95
  end
91
96
 
92
97
  #
93
98
  # === Setup paths
94
99
  #
95
- root = File.expand_path('../', __FILE__)
96
- hdrpath = File.expand_path(SKYLIGHT_HDR_PATH)
97
- libpath = File.expand_path(SKYLIGHT_LIB_PATH)
98
- libskylight = File.expand_path("libskylight.#{Platform.libext}", libpath)
99
- libskylight_yml = File.expand_path('libskylight.yml', root)
100
+ root = File.expand_path(__dir__)
101
+ hdrpath = File.expand_path(SKYLIGHT_HDR_PATH)
102
+ libpath = File.expand_path(SKYLIGHT_LIB_PATH)
103
+ libskylight = File.expand_path("libskylight.#{Platform.libext}", libpath)
104
+ libskylight_yml = File.expand_path("libskylight.yml", root)
100
105
  skylight_dlopen_h = File.expand_path("skylight_dlopen.h", hdrpath)
101
106
  skylight_dlopen_c = File.expand_path("skylight_dlopen.c", hdrpath)
102
107
 
103
108
  LOG.info "SKYLIGHT_HDR_PATH=#{hdrpath}; SKYLIGHT_LIB_PATH=#{libpath}"
104
109
 
105
- LOG.info "file exists; path=#{libskylight}" if File.exists?(libskylight)
106
- LOG.info "file exists; path=#{skylight_dlopen_c}" if File.exists?(skylight_dlopen_c)
107
- LOG.info "file exists; path=#{skylight_dlopen_h}" if File.exists?(skylight_dlopen_h)
110
+ LOG.info "file exists; path=#{libskylight}" if File.exist?(libskylight)
111
+ LOG.info "file exists; path=#{skylight_dlopen_c}" if File.exist?(skylight_dlopen_c)
112
+ LOG.info "file exists; path=#{skylight_dlopen_h}" if File.exist?(skylight_dlopen_h)
108
113
 
109
114
  # If libskylight is not present, fetch it
110
115
  if !File.exist?(libskylight) && !File.exist?(skylight_dlopen_c) && !File.exist?(skylight_dlopen_h)
111
- if !SKYLIGHT_FETCH_LIB
112
- fail "libskylight.#{LIBEXT} not found -- remote download disabled; aborting install"
113
- end
116
+ fail "libskylight.#{LIBEXT} not found -- remote download disabled; aborting install" unless SKYLIGHT_FETCH_LIB
114
117
 
115
118
  # Ensure that libskylight.yml is present and load it
116
- unless File.exist?(libskylight_yml)
117
- fail "`#{libskylight_yml}` does not exist"
118
- end
119
+ fail "`#{libskylight_yml}` does not exist" unless File.exist?(libskylight_yml)
119
120
 
120
- unless libskylight_info = YAML.load_file(libskylight_yml)
121
+ unless (libskylight_info = YAML.load_file(libskylight_yml))
121
122
  fail "`#{libskylight_yml}` does not contain data"
122
123
  end
123
124
 
124
- if version = SKYLIGHT_VERSION
125
- unless checksum = SKYLIGHT_CHECKSUM
125
+ if (version = SKYLIGHT_VERSION)
126
+ unless (checksum = SKYLIGHT_CHECKSUM)
126
127
  fail "no checksum provided when using custom version"
127
128
  end
129
+ elsif (platform_info = libskylight_info[Platform.tuple])
130
+ unless (version = platform_info["version"])
131
+ fail "libskylight version missing from `#{libskylight_yml}`; platform=#{Platform.tuple}"
132
+ end
133
+
134
+ unless (checksum = platform_info["checksum"])
135
+ fail "checksum missing from `#{libskylight_yml}`; platform=#{Platform.tuple}"
136
+ end
128
137
  else
129
- if platform_info = libskylight_info[Platform.tuple]
130
- unless version = platform_info["version"]
131
- fail "libskylight version missing from `#{libskylight_yml}`; platform=#{Platform.tuple}"
132
- end
133
-
134
- unless checksum = platform_info["checksum"]
135
- fail "checksum missing from `#{libskylight_yml}`; platform=#{Platform.tuple}"
136
- end
137
- else
138
- unless version = libskylight_info["version"]
139
- fail "libskylight version missing from `#{libskylight_yml}`"
140
- end
141
-
142
- unless checksums = libskylight_info["checksums"]
143
- fail "libskylight checksums missing from `#{libskylight_yml}`"
144
- end
145
-
146
- unless checksum = checksums[Platform.tuple]
147
- fail "no checksum entry for requested architecture -- " \
148
- "this probably means the requested architecture is not supported; " \
149
- "platform=#{Platform.tuple}; available=#{checksums.keys}", :info
150
- end
138
+ unless (version = libskylight_info["version"])
139
+ fail "libskylight version missing from `#{libskylight_yml}`"
140
+ end
141
+
142
+ unless (checksums = libskylight_info["checksums"])
143
+ fail "libskylight checksums missing from `#{libskylight_yml}`"
144
+ end
145
+
146
+ unless (checksum = checksums[Platform.tuple])
147
+ fail "no checksum entry for requested architecture -- " \
148
+ "this probably means the requested architecture is not supported; " \
149
+ "platform=#{Platform.tuple}; available=#{checksums.keys}",
150
+ :info
151
151
  end
152
152
  end
153
153
 
154
154
  begin
155
- res = Skylight::NativeExtFetcher.fetch(
156
- source: SKYLIGHT_SOURCE_URL,
157
- version: version,
158
- target: hdrpath,
159
- checksum: checksum,
160
- arch: Platform.tuple,
161
- required: SKYLIGHT_REQUIRED,
162
- platform: Platform.tuple,
163
- logger: LOG)
164
-
165
- unless res
166
- fail "could not fetch archive -- aborting skylight native extension build"
167
- end
155
+ res =
156
+ Skylight::NativeExtFetcher.fetch(
157
+ source: SKYLIGHT_SOURCE_URL,
158
+ version: version,
159
+ target: hdrpath,
160
+ checksum: checksum,
161
+ arch: Platform.tuple,
162
+ required: SKYLIGHT_REQUIRED,
163
+ platform: Platform.tuple,
164
+ logger: LOG
165
+ )
166
+
167
+ fail "could not fetch archive -- aborting skylight native extension build" unless res
168
168
 
169
169
  # Move skylightd & libskylight to appropriate directory
170
170
  if hdrpath != libpath
@@ -172,15 +172,11 @@ if !File.exist?(libskylight) && !File.exist?(skylight_dlopen_c) && !File.exist?(
172
172
  FileUtils.mkdir_p libpath
173
173
 
174
174
  # Move
175
- FileUtils.mv "#{hdrpath}/libskylight.#{Platform.libext}",
176
- "#{libpath}/libskylight.#{Platform.libext}",
177
- :force => true
175
+ FileUtils.mv "#{hdrpath}/libskylight.#{Platform.libext}", "#{libpath}/libskylight.#{Platform.libext}", force: true
178
176
 
179
- FileUtils.mv "#{hdrpath}/skylightd",
180
- "#{libpath}/skylightd",
181
- :force => true
177
+ FileUtils.mv "#{hdrpath}/skylightd", "#{libpath}/skylightd", force: true
182
178
  end
183
- rescue => e
179
+ rescue StandardError => e
184
180
  fail "unable to fetch native extension; msg=#{e.message}\n#{e.backtrace.join("\n")}"
185
181
  end
186
182
  end
@@ -192,35 +188,33 @@ end
192
188
  #
193
189
 
194
190
  def find_file(file, root = nil)
195
- path = File.expand_path(file, root || '.')
191
+ path = File.expand_path(file, root || ".")
196
192
 
197
- unless File.exist?(path)
198
- fail "#{file} missing; path=#{root}"
199
- end
193
+ fail "#{file} missing; path=#{root}" unless File.exist?(path)
200
194
  end
201
195
 
202
- $VPATH << libpath
196
+ $VPATH << libpath
203
197
 
204
198
  # Where the ruby binding src is
205
- SRC_PATH = File.expand_path('..', __FILE__)
199
+ SRC_PATH = File.expand_path(__dir__)
206
200
 
207
201
  $srcs = Dir[File.expand_path("*.c", SRC_PATH)].map { |f| File.basename(f) }
208
202
 
209
203
  # If the native agent support files were downloaded to a different directory,
210
204
  # explicitly the file to the list of sources.
211
- unless $srcs.include?('skylight_dlopen.c')
205
+ unless $srcs.include?("skylight_dlopen.c")
212
206
  $srcs << "skylight_dlopen.c" # From libskylight dist
213
207
  end
214
208
 
215
209
  # Make sure that the files are present
216
- find_file 'skylight_dlopen.h', hdrpath
217
- find_file 'skylight_dlopen.c', hdrpath
218
- find_header 'skylight_dlopen.h', hdrpath
219
- have_header 'dlfcn.h' or fail "could not create Makefile; dlfcn.h missing"
210
+ find_file "skylight_dlopen.h", hdrpath
211
+ find_file "skylight_dlopen.c", hdrpath
212
+ find_header "skylight_dlopen.h", hdrpath
213
+ fail "could not create Makefile; dlfcn.h missing" unless have_header "dlfcn.h"
220
214
 
221
215
  # For escaping the GVL
222
- unless have_func('rb_thread_call_without_gvl', 'ruby/thread.h')
223
- have_func('rb_thread_blocking_region') or abort "Ruby is unexpectedly missing rb_thread_blocking_region. This should not happen."
216
+ unless have_func("rb_thread_call_without_gvl", "ruby/thread.h")
217
+ abort "Ruby is unexpectedly missing rb_thread_call_without_gvl. This should not happen."
224
218
  end
225
219
 
226
220
  # Previous comment stated:
@@ -230,11 +224,9 @@ end
230
224
  # flag can cause issues for some customers we're turning it off by default. However,
231
225
  # in development and CI, we still have the option of turning it back on to help catch
232
226
  # potential issues.
233
- if SKYLIGHT_EXT_STRICT
234
- $CFLAGS << " -Werror"
235
- end
227
+ $CFLAGS << " -Werror" if SKYLIGHT_EXT_STRICT
236
228
 
237
- checking_for 'fast thread local storage' do
229
+ checking_for "fast thread local storage" do
238
230
  if try_compile("__thread int foo;")
239
231
  $defs << "-DHAVE_FAST_TLS"
240
232
  true
@@ -247,7 +239,11 @@ $CFLAGS << " -std=c99 -Wall -fno-strict-aliasing"
247
239
  # Allow stricter checks to be turned on for development or debugging
248
240
  if SKYLIGHT_EXT_STRICT
249
241
  $CFLAGS << " -Wextra"
242
+
243
+ # Enabling unused-parameter causes failures in Ruby 2.6+
244
+ # ruby/ruby.h:2186:35: error: unused parameter 'allow_transient'
245
+ $CFLAGS << " -Wno-error=unused-parameter"
250
246
  end
251
247
 
252
248
  # TODO: Compute the relative path to the location
253
- create_makefile 'skylight_native', File.expand_path('..', __FILE__) # or fail "could not create makefile"
249
+ create_makefile "skylight_native", File.expand_path(__dir__) # or fail "could not create makefile"
data/ext/libskylight.yml CHANGED
@@ -1,7 +1,9 @@
1
- version: "3.1.0-c0a22d1"
1
+ version: "5.1.0-cd7d6af"
2
2
  checksums:
3
- x86-linux: "1dc6a9ee453756c8b984c5733d2631ed27538f20cfde2f037ae31010edec6232"
4
- x86_64-linux: "b91dc91c2bc2954bf4587f3733a3c696a443bce13738a9073229ab4dfd09938e"
5
- x86_64-linux-musl: "c7b00982688a344ee3808ea40452dd1f6c448e7f3aa0221b4c95fca2a51547b9"
6
- x86_64-darwin: "41cf89a75dc64cafb97303f31908b14a3ca2d15e5de935cbd57a611f396b5b90"
7
- x86_64-freebsd: "72ccb98f3f7604fddad116fe6ea4750643f9b088d4f25f3e21c4972680cc8f01"
3
+ x86-linux: "921381c014b87e67fa2049e9891377f737b5abb10963228ddcd65caede7b58d2"
4
+ x86_64-linux: "e89f0ec3f39ecca060b757fcd1b9d8f38e5846f65579785454bb69a968e8528f"
5
+ x86_64-linux-musl: "78239bc7581c124c2a00cfbc42ec6cf73e7ed280ed1a27d85bb915531a683f1a"
6
+ x86_64-darwin: "faa7363ada4bf476511f6700856fd91b9d61fed055297417ce41d83aa11fe07c"
7
+ aarch64-linux: "e172515a6f7923552e842d21319b3630bdc6e264b6a434b43d2db682dcde18cc"
8
+ aarch64-linux-musl: "1665adf149bd2c12e409f387de5d796ef9e55d4cfd9a886f69c42cab59a51926"
9
+ aarch64-darwin: "027bec103668e89f318b55ddc2a48ca5c84c7a6dcd1dd273cc9b7b46d918ef12"