oboe 1.4.2.2 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
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