oboe 1.4.2.2 → 2.1.1

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.
Files changed (47) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +30 -0
  3. data/Gemfile.lock +103 -0
  4. data/Guardfile +24 -0
  5. data/README.md +36 -0
  6. data/Rakefile +12 -0
  7. data/ext/oboe_metal/extconf.rb +12 -4
  8. data/ext/oboe_metal/tests/test.rb +7 -0
  9. data/get_version.rb +5 -0
  10. data/lib/joboe_metal.rb +45 -0
  11. data/lib/oboe.rb +16 -7
  12. data/lib/oboe/api/logging.rb +1 -1
  13. data/lib/oboe/api/tracing.rb +1 -1
  14. data/lib/oboe/api/util.rb +1 -1
  15. data/lib/oboe/config.rb +0 -47
  16. data/lib/oboe/frameworks/rails.rb +9 -7
  17. data/lib/oboe/frameworks/rails/inst/action_controller.rb +1 -1
  18. data/lib/oboe/frameworks/rails/inst/action_view.rb +8 -8
  19. data/lib/oboe/frameworks/rails/inst/active_record.rb +18 -18
  20. data/lib/oboe/inst/cassandra.rb +3 -3
  21. data/lib/oboe/inst/dalli.rb +2 -2
  22. data/lib/oboe/inst/http.rb +1 -1
  23. data/lib/oboe/inst/memcache.rb +4 -4
  24. data/lib/oboe/inst/memcached.rb +2 -2
  25. data/lib/oboe/inst/mongo.rb +1 -1
  26. data/lib/oboe/inst/moped.rb +5 -5
  27. data/lib/oboe/inst/resque.rb +4 -4
  28. data/lib/oboe/instrumentation.rb +1 -1
  29. data/lib/oboe/loading.rb +8 -3
  30. data/lib/oboe/logger.rb +39 -0
  31. data/lib/oboe/version.rb +4 -4
  32. data/lib/oboe_metal.rb +67 -27
  33. data/oboe.gemspec +19 -0
  34. data/oboe_fu.gemspec +13 -0
  35. data/release.sh +65 -0
  36. data/spec/instrumentation/cassandra_spec.rb +18 -0
  37. data/spec/instrumentation/dalli_spec.rb +14 -0
  38. data/spec/instrumentation/http_spec.rb +14 -0
  39. data/spec/instrumentation/memcache_spec.rb +19 -0
  40. data/spec/instrumentation/memcached_spec.rb +22 -0
  41. data/spec/instrumentation/mongo_spec.rb +29 -0
  42. data/spec/instrumentation/moped_spec.rb +41 -0
  43. data/spec/instrumentation/resque_spec.rb +18 -0
  44. data/spec/spec_helper.rb +15 -0
  45. data/spec/support/config_spec.rb +27 -0
  46. data/spec/support/oboe_spec.rb +4 -0
  47. metadata +100 -41
@@ -0,0 +1,4 @@
1
+ oboe*.gem
2
+ *~
3
+ *.swp
4
+ lib/so_variants
data/Gemfile ADDED
@@ -0,0 +1,30 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Import dependencies from oboe.gemspec
4
+ gemspec :name => 'oboe'
5
+
6
+ gem 'rake'
7
+
8
+ group :development do
9
+ gem 'guard'
10
+ gem 'guard-rspec'
11
+
12
+ gem 'rb-inotify', :require => false
13
+ gem 'rb-fsevent', :require => false
14
+ gem 'rb-fchange', :require => false
15
+ end
16
+
17
+ group :test do
18
+ gem 'rspec'
19
+
20
+ # Instrumented gems
21
+ gem 'dalli'
22
+ gem 'memcache-client'
23
+ gem 'memcached' if (RUBY_VERSION =~ /^1./) == 0
24
+ gem 'cassandra'
25
+ gem 'mongo'
26
+ gem 'bson_ext' # For Mongo, Yours Truly
27
+ gem 'moped'
28
+ gem 'resque'
29
+ end
30
+
@@ -0,0 +1,103 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ oboe (2.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ bson (1.8.2)
10
+ bson_ext (1.8.2)
11
+ bson (~> 1.8.2)
12
+ cassandra (0.17.0)
13
+ json
14
+ rake
15
+ simple_uuid (~> 0.2.0)
16
+ thrift_client (>= 0.7.0, < 0.9)
17
+ coderay (1.0.9)
18
+ dalli (2.6.2)
19
+ diff-lcs (1.1.3)
20
+ ffi (1.4.0)
21
+ guard (1.6.2)
22
+ listen (>= 0.6.0)
23
+ lumberjack (>= 1.0.2)
24
+ pry (>= 0.9.10)
25
+ terminal-table (>= 1.4.3)
26
+ thor (>= 0.14.6)
27
+ guard-rspec (2.4.1)
28
+ guard (>= 1.1)
29
+ rspec (~> 2.11)
30
+ json (1.7.7)
31
+ listen (0.7.3)
32
+ lumberjack (1.0.2)
33
+ memcache-client (1.8.5)
34
+ memcached (1.5.0)
35
+ method_source (0.8.1)
36
+ mongo (1.8.2)
37
+ bson (~> 1.8.2)
38
+ moped (1.4.2)
39
+ multi_json (1.6.1)
40
+ pry (0.9.12)
41
+ coderay (~> 1.0.5)
42
+ method_source (~> 0.8)
43
+ slop (~> 3.4)
44
+ rack (1.4.5)
45
+ rack-protection (1.3.2)
46
+ rack
47
+ rake (10.0.3)
48
+ rb-fchange (0.0.6)
49
+ ffi
50
+ rb-fsevent (0.9.3)
51
+ rb-inotify (0.9.0)
52
+ ffi (>= 0.5.0)
53
+ redis (3.0.2)
54
+ redis-namespace (1.2.1)
55
+ redis (~> 3.0.0)
56
+ resque (1.23.0)
57
+ multi_json (~> 1.0)
58
+ redis-namespace (~> 1.0)
59
+ sinatra (>= 0.9.2)
60
+ vegas (~> 0.1.2)
61
+ rspec (2.11.0)
62
+ rspec-core (~> 2.11.0)
63
+ rspec-expectations (~> 2.11.0)
64
+ rspec-mocks (~> 2.11.0)
65
+ rspec-core (2.11.1)
66
+ rspec-expectations (2.11.3)
67
+ diff-lcs (~> 1.1.3)
68
+ rspec-mocks (2.11.2)
69
+ simple_uuid (0.2.0)
70
+ sinatra (1.3.4)
71
+ rack (~> 1.4)
72
+ rack-protection (~> 1.3)
73
+ tilt (~> 1.3, >= 1.3.3)
74
+ slop (3.4.3)
75
+ terminal-table (1.4.5)
76
+ thor (0.17.0)
77
+ thrift (0.8.0)
78
+ thrift_client (0.8.3)
79
+ thrift (~> 0.8.0)
80
+ tilt (1.3.3)
81
+ vegas (0.1.11)
82
+ rack (>= 1.0.0)
83
+
84
+ PLATFORMS
85
+ ruby
86
+
87
+ DEPENDENCIES
88
+ bson_ext
89
+ cassandra
90
+ dalli
91
+ guard
92
+ guard-rspec
93
+ memcache-client
94
+ memcached
95
+ mongo
96
+ moped
97
+ oboe!
98
+ rake
99
+ rb-fchange
100
+ rb-fsevent
101
+ rb-inotify
102
+ resque
103
+ rspec
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec' do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara features specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
@@ -0,0 +1,36 @@
1
+ # Tracelytics Ruby (and Ruby Frameworks) Instrumentation
2
+
3
+ ```oboe``` provides instrumentation for [Ruby](http://www.ruby-lang.org/en/) and the [Rails framework](http://rubyonrails.org/), as well as other
4
+ common components used to build rails applications.
5
+
6
+ ## Installing
7
+
8
+ See the [Ruby Knowedge Base article](http://support.tracelytics.com/kb/instrumenting-your-app/instrumenting-ruby-apps)
9
+ for information on how to install. Release notes can be found [here](http://support.tracelytics.com/kb/instrumenting-your-app/ruby-instrumentation-release-notes)
10
+
11
+ ## Supported Technologies
12
+
13
+ Check the [support matrix](https://github.com/tracelytics/oboe-ruby/wiki/Support-Matrix) for which versions of Ruby, Rails and technologies are supported.
14
+
15
+ ## Tips
16
+
17
+ General tips using, installing and debugging the oboe gem can be found [here](https://github.com/tracelytics/oboe-ruby/wiki/Ruby-Oboe-Tips).
18
+
19
+ ## liboboe Linking Notes
20
+
21
+ Build instructions
22
+
23
+ - Requires: liboboe development headers, available from the
24
+ liboboe-dev (Ubuntu) and liboboe-devel (Red Hat) packages.
25
+
26
+ Build and install a gem the normal way:
27
+
28
+ gem build oboe.gemspec
29
+ gem install oboe-VERSION.gem
30
+
31
+ Compile a binary gem from a regular gem, using gem-compile [1]:
32
+
33
+ sudo gem install gem-compile
34
+ gem compile oboe-VERSION.gem
35
+
36
+ [1] https://github.com/frsyuki/gem-compile
@@ -0,0 +1,12 @@
1
+ require 'rake/testtask'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new('spec')
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'spec'
8
+ end
9
+
10
+ desc "Run tests"
11
+ task :default => :spec
12
+ task :test => :spec
@@ -1,11 +1,8 @@
1
1
  # Copyright (c) 2012 by Tracelytics, Inc.
2
2
  # All rights reserved.
3
-
4
3
  require 'mkmf'
5
4
  require 'rbconfig'
6
5
 
7
- dir_config('oboe')
8
-
9
6
  # Check if we're running in JRuby
10
7
  if RbConfig::CONFIG.has_key?('arch')
11
8
  # nil meaning java string not found
@@ -14,7 +11,17 @@ else
14
11
  jruby = false
15
12
  end
16
13
 
17
- if not jruby and have_library('oboe')
14
+ dir_config('oboe')
15
+
16
+ if jruby or ENV.has_key?('TRACEVIEW_URL')
17
+ # Build the noop extension under JRuby and Heroku.
18
+ # The oboe-heroku gem builds it's own c extension which links to
19
+ # libs specific to a Heroku dyno
20
+ # FIXME: For JRuby we need to remove the c extension entirely
21
+ create_makefile('oboe_noop', 'noop')
22
+
23
+ elsif have_library('oboe')
24
+
18
25
  $libs = append_library($libs, "oboe")
19
26
  $libs = append_library($libs, "stdc++")
20
27
 
@@ -24,6 +31,7 @@ if not jruby and have_library('oboe')
24
31
 
25
32
  cpp_command('g++') if RUBY_VERSION < '1.9'
26
33
  create_makefile('oboe_metal', 'src')
34
+
27
35
  else
28
36
  $stderr.puts "Error: Could not find the base liboboe libraries. No tracing will occur."
29
37
  create_makefile('oboe_noop', 'noop')
@@ -0,0 +1,7 @@
1
+ require 'oboe'
2
+
3
+ r = Oboe::UdpReporter.new('127.0.0.1')
4
+ Oboe::Context.init()
5
+ e = Oboe::Context.createEvent()
6
+ e.addInfo("TestKey", "TestValue")
7
+ r.sendReport(e)
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/lib/oboe/version.rb'
4
+
5
+ puts Oboe::Version::STRING
@@ -4,6 +4,8 @@
4
4
  module Oboe_metal
5
5
  include_package 'com.tracelytics.joboe'
6
6
  import 'com.tracelytics.joboe'
7
+ include_package 'com.tracelytics.joboe.SettingsReader'
8
+ import 'com.tracelytics.joboe.SettingsReader'
7
9
  include_package 'com.tracelytics.joboe.Context'
8
10
  import 'com.tracelytics.joboe.Context'
9
11
  include_package 'com.tracelytics.joboe.Event'
@@ -77,7 +79,50 @@ end
77
79
  module Oboe
78
80
  include Oboe_metal
79
81
 
82
+ def self.always?
83
+ Oboe::Config[:tracing_mode].to_s == "always"
84
+ end
85
+
86
+ def self.continue?
87
+ Oboe::Context.isValid and not Oboe.never?
88
+ end
89
+
80
90
  def self.log(layer, label, options = {})
81
91
  Context.log(layer, label, options = options)
82
92
  end
93
+
94
+ def self.never?
95
+ Oboe::Config[:tracing_mode].to_s == "never"
96
+ end
97
+
98
+ def self.now?
99
+ Oboe::Context.isValid and not Oboe.never?
100
+ end
101
+
102
+ def self.passthrough?
103
+ ["always", "through"].include?(Oboe::Config[:tracing_mode])
104
+ end
105
+
106
+ def self.sample?
107
+ Java::ComTracelyticsJoboeSettingsReader.shouldTraceRequest('', '')
108
+ end
109
+
110
+ def self.start?
111
+ not Oboe::Context.isValid and Oboe.always?
112
+ end
113
+
114
+ def self.through?
115
+ Oboe::Config[:tracing_mode] == "through"
116
+ end
117
+
118
+ def self.tracing?
119
+ Oboe::Context.isValid and not Oboe.never?
120
+ end
121
+
122
+ def self.reporter
123
+ if !@reporter
124
+ @reporter = Oboe::UdpReporter.new(Oboe::Config[:reporter_host])
125
+ end
126
+ return @reporter
127
+ end
83
128
  end
@@ -3,13 +3,20 @@
3
3
 
4
4
  begin
5
5
  require 'rbconfig'
6
- if RUBY_PLATFORM == 'java'
7
- require '/usr/local/tracelytics/tracelyticsagent.jar'
8
- require 'joboe_metal'
9
- else
10
- require 'oboe_metal.so'
11
- require 'oboe_metal'
6
+ require 'logger'
7
+
8
+ # If Oboe_metal is already defined then we are in a PaaS environment
9
+ # with an alternate metal (such as Heroku: see the oboe-heroku gem)
10
+ unless defined?(Oboe_metal)
11
+ if RUBY_PLATFORM == 'java'
12
+ require '/usr/local/tracelytics/tracelyticsagent.jar'
13
+ require 'joboe_metal'
14
+ else
15
+ require 'oboe_metal.so'
16
+ require 'oboe_metal'
17
+ end
12
18
  end
19
+ require 'oboe/logger'
13
20
  require 'oboe/config'
14
21
  require 'oboe/loading'
15
22
  require 'method_profiling'
@@ -20,5 +27,7 @@ begin
20
27
  require 'oboe/frameworks/rails' if defined?(::Rails)
21
28
 
22
29
  rescue LoadError
23
- puts "Unsupported Tracelytics environment (no libs). Going No-op."
30
+ $stderr.puts "Unsupported Tracelytics environment (no libs). Going No-op."
31
+ rescue Exception => e
32
+ $stderr.puts "[oboe/error] Problem loading: #{e.inspect}"
24
33
  end
@@ -44,7 +44,7 @@ module Oboe
44
44
  log(layer, 'error', {
45
45
  :ErrorClass => exn.class.name,
46
46
  :Message => exn.message,
47
- :ErrorBacktrace => exn.backtrace.join("\r\n")
47
+ :Backtrace => exn.backtrace.join("\r\n")
48
48
  })
49
49
  exn.instance_variable_set(:@oboe_logged, true)
50
50
  end
@@ -35,7 +35,7 @@ module Oboe
35
35
  begin
36
36
  yield
37
37
  rescue Exception => e
38
- log_exception(layer, e)
38
+ log_exception(layer, e)
39
39
  raise
40
40
  ensure
41
41
  log_exit(layer, {}, protect_op)
@@ -24,7 +24,7 @@ module Oboe
24
24
  #
25
25
  # Returns a string with each frame of the backtrace separated by '\r\n'.
26
26
  def backtrace(ignore=1)
27
- trim_backtrace(Kernel.caller).join("\r\n");
27
+ trim_backtrace(Kernel.caller).join("\r\n")
28
28
  end
29
29
 
30
30
  def trim_backtrace(backtrace)
@@ -2,53 +2,6 @@
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe
5
-
6
- def self.always?
7
- Oboe::Config[:tracing_mode].to_s == "always"
8
- end
9
-
10
- def self.continue?
11
- Oboe::Context.isValid and not Oboe.never?
12
- end
13
-
14
- def self.log(layer, label, options = {})
15
- Context.log(layer, label, options = options)
16
- end
17
-
18
- def self.never?
19
- Oboe::Config[:tracing_mode].to_s == "never"
20
- end
21
-
22
- def self.now?
23
- Oboe::Context.isValid and not Oboe.never?
24
- end
25
-
26
- def self.passthrough?
27
- ["always", "through"].include?(Oboe::Config[:tracing_mode])
28
- end
29
-
30
- def self.sample?
31
- # Note that this the only point in the code that currently does and
32
- # should ever read the sample rate. When autopilot is released, modify
33
- # the line below and that line only.
34
- Oboe::Config[:sample_rate].to_i < rand(1e6)
35
- end
36
-
37
- def self.start?
38
- not Oboe::Context.isValid and Oboe.always?
39
- end
40
-
41
- def self.through?
42
- Oboe::Config[:tracing_mode] == "through"
43
- end
44
-
45
- def self.tracing?
46
- Oboe::Context.isValid and not Oboe.never?
47
- end
48
-
49
- ############################
50
- # Oboe Configuration Module
51
- ############################
52
5
  module Config
53
6
  @@config = {}
54
7