appoptics_apm 4.0.4 → 4.0.5

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: f6eca844d1e22be51b9a76ac3c00c512974a7fde
4
- data.tar.gz: 925cc30ac503e7e3ba8f99494912ee7f5752a9a6
3
+ metadata.gz: ff856df7c5459eb39bfa7b9d5a248c44f74a6d3e
4
+ data.tar.gz: e41c9199c097afcae143d271016566f2fb2077f2
5
5
  SHA512:
6
- metadata.gz: d7684bf87d2ba3359c0b12a94859e6a65a6a7040ee0708aa27391cb86d21a3d28aba9714bfe0ecd296c2c016b0a64250897872ab535706cf58431bc878671a15
7
- data.tar.gz: b43b9dd8e0ddfdb2ab7bd78fc163010825578cfe1a0e472c25e628de5c2f1c504878a67606f5968dd738f7694def702dcec7e796b4277e3a919e2660897c7b69
6
+ metadata.gz: ce3d4658d0bb2f448561fa6aa46f38a506eeabb6eb07681c726b2de3b1b63c5976be1b72851c598c7dcf975a53a85bc9a600267cf569fb1a834ee7ffac0f401e
7
+ data.tar.gz: 374174feff92a2d0accbd4ce04548f580814d5d3246d390c67d694703474f91da860517cab0c1ba777c2ff4b499c00fcb9556fb0bbee4d2d02a7d50d32546ce6
data/.travis.yml CHANGED
@@ -6,8 +6,9 @@ cache:
6
6
  - vendor/bundle
7
7
 
8
8
  rvm:
9
- - 2.4.1
10
- - 2.3.1
9
+ - 2.5.0
10
+ - 2.4.3
11
+ - 2.3.6
11
12
  - 1.9.3
12
13
  # - jruby-9.0.5.0
13
14
 
@@ -15,6 +16,7 @@ gemfile:
15
16
  - gemfiles/noop.gemfile
16
17
  - gemfiles/libraries.gemfile
17
18
  - gemfiles/instrumentation_mocked.gemfile
19
+ - gemfiles/instrumentation_mocked_oldgems.gemfile
18
20
  - gemfiles/frameworks.gemfile
19
21
  - gemfiles/rails32.gemfile
20
22
  - gemfiles/rails42.gemfile
@@ -25,7 +27,9 @@ gemfile:
25
27
  matrix:
26
28
  exclude:
27
29
  # Rails 3.2 is not compatible with Ruby >= '2.4'
28
- - rvm: 2.4.1
30
+ - rvm: 2.5.0
31
+ gemfile: gemfiles/rails32.gemfile
32
+ - rvm: 2.4.3
29
33
  gemfile: gemfiles/rails32.gemfile
30
34
 
31
35
  - rvm: 1.9.3
@@ -34,9 +38,11 @@ matrix:
34
38
  - rvm: 1.9.3
35
39
  gemfile: gemfiles/rails51.gemfile
36
40
 
37
- # WebMock requires Ruby 2.0 or higher
41
+ # WebMock requires Ruby 2.0 or higher
38
42
  - rvm: 1.9.3
39
43
  gemfile: gemfiles/instrumentation_mocked.gemfile
44
+ - rvm: 1.9.3
45
+ gemfile: gemfiles/instrumentation_mocked_oldgems.gemfile
40
46
 
41
47
  # - rvm: jruby-9.0.5.0
42
48
  # gemfile: gemfiles/delayed_job.gemfile
@@ -45,12 +51,11 @@ matrix:
45
51
  # - rvm: jruby-9.0.5.0
46
52
  # gemfile: gemfiles/rails50.gemfile
47
53
 
54
+ # FIXME: Figure out if this is still an issue when reviewing cassandra test setup
48
55
  # Attempt Travis/Cassandra fix re: https://github.com/travis-ci/travis-ci/issues/1484
49
56
  # Updated Cassandra: https://github.com/travis-ci/travis-ci/issues/1650
57
+
50
58
  before_install:
51
- - gem update --system '2.6.1'
52
- - gem update bundler
53
- - gem --version
54
59
  - sudo service cassandra stop
55
60
  - sudo sh -c "echo 'JVM_OPTS=\"\${JVM_OPTS} -Djava.net.preferIPv4Stack=false\"' >> /etc/cassandra/cassandra-env.sh"
56
61
  - echo "127.0.0.1 localhost" | sudo tee /etc/hosts
data/Rakefile CHANGED
@@ -63,25 +63,25 @@ end
63
63
  desc "Fetch extension dependency files"
64
64
  task :fetch_ext_deps do
65
65
  swig_version = %x{swig -version} rescue ''
66
- if swig_version.scan(/swig version 3.0.8/i).empty?
67
- raise "!! Did not find required swig version 3.0.8, found #{swig_version.inspect}"
66
+ swig_version = swig_version.scan(/swig version 3.0.\d*/i)
67
+ if swig_version.empty?
68
+ $stderr.puts '== ERROR ================================================================='
69
+ $stderr.puts "Could not find required swig version 3.0.*, found #{swig_version.inspect}"
70
+ $stderr.puts 'Please install swig "~ 3.0.8" and try again.'
71
+ $stderr.puts '=========================================================================='
72
+ raise
68
73
  end
74
+
75
+ # The c-lib version is different from the gem version
69
76
  oboe_version = ENV['OBOE_VERSION'] || 'latest'
70
- oboe_arch = ENV['APPOPTICS_OS_ARCH'] || 'x86_64'
71
77
  oboe_src_dir = "https://s3-us-west-2.amazonaws.com/rc-files-t2/c-lib/#{oboe_version}"
72
- ext_lib_dir = File.expand_path('ext/oboe_metal/lib')
73
78
  ext_src_dir = File.expand_path('ext/oboe_metal/src')
74
79
 
75
- %w(oboe.i oboe.h oboe.hpp oboe_debug.h liboboe-1.0.so.0.0.0 VERSION).each do |filename|
76
- # TODO download general linux and alpine linux library
77
- if filename =~ /^liboboe-.+so.+/
78
- remote_file = File.join(oboe_src_dir,
79
- filename.sub('.so',"-#{oboe_arch}.so"))
80
- local_file = File.join(ext_lib_dir, filename)
81
- else
82
- remote_file = File.join(oboe_src_dir, filename)
83
- local_file = File.join(ext_src_dir, filename)
84
- end
80
+ # VERSION is used by extconf.rb to download the correct liboboe when installing the gem
81
+ %w(oboe.i oboe.h oboe.hpp oboe_debug.h VERSION).each do |filename|
82
+ remote_file = File.join(oboe_src_dir, filename)
83
+ local_file = File.join(ext_src_dir, filename)
84
+
85
85
  puts "fetching #{remote_file} to #{local_file}"
86
86
  open(remote_file, 'rb') do |rf|
87
87
  content = rf.read
@@ -90,7 +90,7 @@ task :fetch_ext_deps do
90
90
  end
91
91
  FileUtils.cd(ext_src_dir) do
92
92
  system('swig -c++ -ruby -module oboe_metal oboe.i')
93
- # File.write(f = "oboe_wrap.cxx", "#include <math.h>\n#define isinf\n#define isnan\n" + File.read(f))
93
+ FileUtils.rm('oboe.i')
94
94
  end
95
95
  end
96
96
 
@@ -16,16 +16,16 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.extra_rdoc_files = ["LICENSE"]
18
18
  s.files = `git ls-files`.split("\n").reject { |f| f.match(%r{^(test|gemfiles)/}) }
19
- s.files += ['ext/oboe_metal/lib/liboboe-1.0.so.0.0.0',
20
- 'ext/oboe_metal/src/oboe.h',
19
+ s.files += ['ext/oboe_metal/src/oboe.h',
21
20
  'ext/oboe_metal/src/oboe.hpp',
22
21
  'ext/oboe_metal/src/oboe_debug.h',
23
22
  'ext/oboe_metal/src/oboe_wrap.cxx',
24
23
  'ext/oboe_metal/src/VERSION']
25
- # s.test_files = Dir.glob("{test}/**/*.rb")
26
24
 
27
25
  # TODO this is commented out util we can actually provide gems for different platforms
26
+ # it will create a gem that goes into noop on Darwin and other unsupported platforms
28
27
  # s.platform = defined?(JRUBY_VERSION) ? 'java' : Gem::Platform::CURRENT
28
+
29
29
  s.extensions = ['ext/oboe_metal/extconf.rb'] unless defined?(JRUBY_VERSION)
30
30
 
31
31
  s.add_runtime_dependency('json', '>= 0')
@@ -47,9 +47,5 @@ Gem::Specification.new do |s|
47
47
  s.add_development_dependency('pry', '>= 0.10.0')
48
48
  end
49
49
 
50
- s.add_development_dependency('benchmark-ips')
51
- s.add_development_dependency('benchmark-memory')
52
- s.add_development_dependency('ruby-prof')
53
-
54
50
  s.required_ruby_version = '>= 1.9.3'
55
51
  end
@@ -3,6 +3,8 @@
3
3
 
4
4
  require 'mkmf'
5
5
  require 'rbconfig'
6
+ require 'open-uri'
7
+ require 'digest'
6
8
 
7
9
  ext_dir = File.expand_path(File.dirname(__FILE__))
8
10
 
@@ -11,48 +13,95 @@ jruby = defined?(JRUBY_VERSION) ? true : false
11
13
 
12
14
  # Set the mkmf lib paths so we have no issues linking to
13
15
  # the AppOpticsAPM libs.
14
- ao_lib = File.join(ext_dir, 'lib')
16
+ ao_lib_dir = File.join(ext_dir, 'lib')
15
17
  ao_include = File.join(ext_dir, 'src')
16
18
 
17
-
18
- # TODO seleect the correct oboe lib file (alpine vs other linux)
19
-
20
-
21
- # Create symlinks for the AppOpticsAPM library
22
- target = File.join(ao_lib, 'liboboe-1.0.so.0.0.0')
23
- File.symlink(target, File.join(ao_lib, 'liboboe.so'))
24
- File.symlink(target, File.join(ao_lib, 'liboboe-1.0.so.0'))
25
-
26
- dir_config('oboe', ao_include, ao_lib)
27
-
28
- if jruby || ENV.key?('APPOPTICS_URL')
29
- # Build the noop extension under JRuby and Heroku.
30
- # The oboe-heroku gem builds it's own c extension which links to
31
- # libs specific to a Heroku dyno
32
- # FIXME: For JRuby we need to remove the c extension entirely
33
- create_makefile('oboe_noop', 'noop')
34
-
35
- elsif have_library('oboe', 'oboe_config_get_revision', 'oboe.h')
36
-
37
- $libs = append_library($libs, 'oboe')
38
- $libs = append_library($libs, 'stdc++')
39
-
40
- $CFLAGS << " #{ENV['CFLAGS']}"
41
- $CPPFLAGS << " #{ENV['CPPFLAGS']}"
42
- $LIBS << " #{ENV['LIBS']}"
43
- $LDFLAGS << " #{ENV['LDFLAGS']} -Wl,-rpath=#{ao_lib}"
44
-
45
- if RUBY_VERSION < '1.9'
46
- cpp_command('g++')
47
- $CPPFLAGS << '-I./src/'
19
+ # Download the appropriate liboboe from files.appoptics.com
20
+ ao_path = File.join('https://files.appoptics.com/c-lib', File.read(File.join(ao_include, 'VERSION')).chomp)
21
+ ao_arch = `ldd --version 2>&1` =~ /musl/ ? 'alpine-x86_64' : 'x86_64'
22
+ ao_clib = "liboboe-1.0-#{ao_arch}.so.0.0.0"
23
+ ao_item = File.join(ao_path, ao_clib)
24
+ ao_checksum_item = "#{ao_item}.sha256"
25
+ target = File.join(ao_lib_dir, ao_clib)
26
+
27
+ retries = 3
28
+ while retries > 0
29
+ begin
30
+ # download
31
+ download = open(ao_item, 'rb')
32
+ IO.copy_stream(download, target)
33
+
34
+ checksum = open(ao_checksum_item, 'r').read.chomp
35
+ target_checksum = Digest::SHA256.file(target).hexdigest
36
+
37
+ # verify_checksum
38
+ if target_checksum != checksum
39
+ $stderr.puts '== ERROR ================================================================='
40
+ $stderr.puts 'Checksum Verification failed for the c-extension of the appoptics_apm gem.'
41
+ $stderr.puts 'appoptics_apm will not instrument the code. No tracing will occur.'
42
+ $stderr.puts 'Contact support@appoptics.com if the problem persists.'
43
+ $stderr.puts '=========================================================================='
44
+ create_makefile('oboe_noop', 'noop')
45
+ retries = 0
46
+ else
47
+ success = true
48
+ retries = 0
49
+ end
50
+ rescue => e
51
+ File.write(target, '')
52
+ retries -= 1
53
+ if retries == 0
54
+ $stderr.puts '== ERROR =========================================================='
55
+ $stderr.puts 'Download of the c-extension for the appoptics_apm gem failed.'
56
+ $stderr.puts 'appoptics_apm will not instrument the code. No tracing will occur.'
57
+ $stderr.puts 'Contact support@appoptics.com if the problem persists.'
58
+ $stderr.puts '==================================================================='
59
+ create_makefile('oboe_noop', 'noop')
60
+ end
61
+ sleep 0.5
48
62
  end
49
- create_makefile('oboe_metal', 'src')
63
+ end
50
64
 
51
- else
52
- if have_library('oboe')
53
- $stderr.puts 'Error: The oboe gem requires an updated liboboe. Please update your liboboe packages.'
65
+ if success
66
+ # Create symlinks for the AppOpticsAPM library
67
+ File.symlink(target, File.join(ao_lib_dir, 'liboboe.so'))
68
+ File.symlink(target, File.join(ao_lib_dir, 'liboboe-1.0.so.0'))
69
+
70
+ dir_config('oboe', ao_include, ao_lib_dir)
71
+
72
+ if jruby || ENV.key?('APPOPTICS_URL')
73
+ # Build the noop extension under JRuby and Heroku.
74
+ # The oboe-heroku gem builds it's own c extension which links to
75
+ # libs specific to a Heroku dyno
76
+ # FIXME: For JRuby we need to remove the c extension entirely
77
+ create_makefile('oboe_noop', 'noop')
78
+
79
+ elsif have_library('oboe', 'oboe_config_get_revision', 'oboe.h')
80
+
81
+ $libs = append_library($libs, 'oboe')
82
+ $libs = append_library($libs, 'stdc++')
83
+
84
+ $CFLAGS << " #{ENV['CFLAGS']}"
85
+ $CPPFLAGS << " #{ENV['CPPFLAGS']}"
86
+ $LIBS << " #{ENV['LIBS']}"
87
+ $LDFLAGS << " #{ENV['LDFLAGS']} -Wl,-rpath=#{ao_lib_dir}"
88
+
89
+ if RUBY_VERSION < '1.9'
90
+ cpp_command('g++')
91
+ $CPPFLAGS << '-I./src/'
92
+ end
93
+ create_makefile('oboe_metal', 'src')
94
+
95
+ else
96
+ $stderr.puts '== ERROR ========================================================='
97
+ if have_library('oboe')
98
+ $stderr.puts "The c-library either needs to be updated or doesn't match the OS."
99
+ $stderr.puts 'No tracing will occur.'
100
+ else
101
+ $stderr.puts 'Could not find a matching c-library. No tracing will occur.'
102
+ end
103
+ $stderr.puts 'Contact support@appoptics.com if the problem persists.'
104
+ $stderr.puts '=================================================================='
105
+ create_makefile('oboe_noop', 'noop')
54
106
  end
55
-
56
- $stderr.puts 'Error: Could not find the base liboboe libraries. No tracing will occur.'
57
- create_makefile('oboe_noop', 'noop')
58
107
  end
@@ -69,7 +69,7 @@ module AppOpticsAPM
69
69
 
70
70
  def request_with_appoptics(params={}, &block)
71
71
  # Avoid cross host tracing for blacklisted domains
72
- blacklisted = AppOpticsAPM::API.blacklisted?(@data[:hostname])
72
+ blacklisted = AppOpticsAPM::API.blacklisted?(@data[:hostname] || @data[:host])
73
73
 
74
74
  # If we're not tracing, just do a fast return.
75
75
  # If making HTTP pipeline requests (ordered batched)
@@ -9,9 +9,10 @@ module AppOpticsAPM
9
9
  end
10
10
 
11
11
  def run_request_with_appoptics(method, url, body, headers, &block)
12
+ blacklisted = url_blacklisted?
12
13
  unless AppOpticsAPM.tracing?
13
14
  xtrace = AppOpticsAPM::Context.toString
14
- @headers['X-Trace'] = xtrace if AppOpticsAPM::XTrace.valid?(xtrace) && !AppOpticsAPM::API.blacklisted?(@url_prefix.to_s)
15
+ @headers['X-Trace'] = xtrace if AppOpticsAPM::XTrace.valid?(xtrace) && !blacklisted
15
16
  return run_request_without_appoptics(method, url, body, headers, &block)
16
17
  end
17
18
 
@@ -19,7 +20,7 @@ module AppOpticsAPM
19
20
  AppOpticsAPM::API.log_entry(:faraday)
20
21
 
21
22
  xtrace = AppOpticsAPM::Context.toString
22
- @headers['X-Trace'] = xtrace if AppOpticsAPM::XTrace.valid?(xtrace) && !AppOpticsAPM::API.blacklisted?(@url_prefix.to_s)
23
+ @headers['X-Trace'] = xtrace if AppOpticsAPM::XTrace.valid?(xtrace) && !blacklisted
23
24
  result = run_request_without_appoptics(method, url, body, headers, &block)
24
25
 
25
26
  kvs = {}
@@ -31,7 +32,6 @@ module AppOpticsAPM
31
32
  handle_service = !@builder.handlers.include?(Faraday::Adapter::NetHttp) &&
32
33
  !@builder.handlers.include?(Faraday::Adapter::Excon)
33
34
  if handle_service
34
- blacklisted = AppOpticsAPM::API.blacklisted?(@url_prefix.to_s)
35
35
  context = AppOpticsAPM::Context.toString
36
36
  task_id = AppOpticsAPM::XTrace.task_id(context)
37
37
 
@@ -65,6 +65,13 @@ module AppOpticsAPM
65
65
  AppOpticsAPM::API.log_exit(:faraday)
66
66
  end
67
67
  end
68
+
69
+ private
70
+
71
+ def url_blacklisted?
72
+ url = @url_prefix ? @url_prefix.to_s : @host
73
+ AppOpticsAPM::API.blacklisted?(url)
74
+ end
68
75
  end
69
76
  end
70
77
  end
@@ -14,7 +14,7 @@ module AppOpticsAPM
14
14
  # The wrapper method for RestClient::Request.execute
15
15
  #
16
16
  def execute_with_appoptics(&block)
17
- blacklisted = AppOpticsAPM::API.blacklisted?(uri)
17
+ blacklisted = AppOpticsAPM::API.blacklisted?(url)
18
18
 
19
19
  unless AppOpticsAPM.tracing?
20
20
  xtrace = AppOpticsAPM::Context.toString
@@ -8,7 +8,7 @@ module AppOpticsAPM
8
8
  module Version
9
9
  MAJOR = 4
10
10
  MINOR = 0
11
- PATCH = 4
11
+ PATCH = 5
12
12
 
13
13
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
14
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appoptics_apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.4
4
+ version: 4.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maia Engeli
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-02-22 00:00:00.000000000 Z
13
+ date: 2018-03-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -82,48 +82,6 @@ dependencies:
82
82
  - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: 3.0.0
85
- - !ruby/object:Gem::Dependency
86
- name: benchmark-ips
87
- requirement: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- version: '0'
92
- type: :development
93
- prerelease: false
94
- version_requirements: !ruby/object:Gem::Requirement
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
- - !ruby/object:Gem::Dependency
100
- name: benchmark-memory
101
- requirement: !ruby/object:Gem::Requirement
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- version: '0'
106
- type: :development
107
- prerelease: false
108
- version_requirements: !ruby/object:Gem::Requirement
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- version: '0'
113
- - !ruby/object:Gem::Dependency
114
- name: ruby-prof
115
- requirement: !ruby/object:Gem::Requirement
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- version: '0'
120
- type: :development
121
- prerelease: false
122
- version_requirements: !ruby/object:Gem::Requirement
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- version: '0'
127
85
  description: The AppOpticsAPM gem provides performance instrumentation for MRI Ruby
128
86
  and related frameworks.
129
87
  email: support@appoptics.com
@@ -160,7 +118,6 @@ files:
160
118
  - examples/unicorn_on_heroku_config.rb
161
119
  - ext/oboe_metal/extconf.rb
162
120
  - ext/oboe_metal/lib/.keep
163
- - ext/oboe_metal/lib/liboboe-1.0.so.0.0.0
164
121
  - ext/oboe_metal/noop/noop.c
165
122
  - ext/oboe_metal/src/VERSION
166
123
  - ext/oboe_metal/src/bson/bson.h