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
@@ -147,7 +147,7 @@ module Oboe
147
147
  end
148
148
 
149
149
  if defined?(::Resque)
150
- puts "[oboe/loading] Instrumenting resque" if Oboe::Config[:verbose]
150
+ Oboe.logger.info "[oboe/loading] Instrumenting resque" if Oboe::Config[:verbose]
151
151
 
152
152
  ::Resque.module_eval do
153
153
  include Oboe::Inst::Resque
@@ -157,7 +157,7 @@ if defined?(::Resque)
157
157
  module_eval "alias #{m}_without_oboe #{m}"
158
158
  module_eval "alias #{m} #{m}_with_oboe"
159
159
  elsif Oboe::Config[:verbose]
160
- puts "[oboe/loading] Couldn't properly instrument Resque (#{m}). Partial traces may occur."
160
+ Oboe.logger.warn "[oboe/loading] Couldn't properly instrument Resque (#{m}). Partial traces may occur."
161
161
  end
162
162
  end
163
163
  end
@@ -170,7 +170,7 @@ if defined?(::Resque)
170
170
  alias perform_without_oboe perform
171
171
  alias perform perform_with_oboe
172
172
  elsif Oboe::Config[:verbose]
173
- puts "[oboe/loading] Couldn't properly instrument ResqueWorker (perform). Partial traces may occur."
173
+ Oboe.logger.warn "[oboe/loading] Couldn't properly instrument ResqueWorker (perform). Partial traces may occur."
174
174
  end
175
175
  end
176
176
  end
@@ -183,7 +183,7 @@ if defined?(::Resque)
183
183
  alias fail_without_oboe fail
184
184
  alias fail fail_with_oboe
185
185
  elsif Oboe::Config[:verbose]
186
- puts "[oboe/loading] Couldn't properly instrument ResqueWorker (fail). Partial traces may occur."
186
+ Oboe.logger.warn "[oboe/loading] Couldn't properly instrument ResqueWorker (fail). Partial traces may occur."
187
187
  end
188
188
  end
189
189
  end
@@ -7,7 +7,7 @@ module Oboe
7
7
  begin
8
8
  require f
9
9
  rescue => e
10
- $stderr.puts "[oboe/loading] Error loading insrumentation file '#{f}' : #{e}"
10
+ Oboe.logger.error "[oboe/loading] Error loading insrumentation file '#{f}' : #{e}"
11
11
  end
12
12
  end
13
13
  end
@@ -24,6 +24,11 @@ module Oboe
24
24
  end
25
25
 
26
26
  module Loading
27
+ def self.setup_logger
28
+ if defined?(::Rails) and ::Rails.logger
29
+ Oboe.logger = ::Rails.logger
30
+ end
31
+ end
27
32
 
28
33
  def self.load_access_key
29
34
  unless Oboe::Config.access_key
@@ -40,7 +45,7 @@ module Oboe
40
45
  end
41
46
  end
42
47
  rescue
43
- puts "Having trouble parsing #{config_file}..."
48
+ Oboe.logger.error "Having trouble parsing #{config_file}..."
44
49
  end
45
50
  end
46
51
  end
@@ -57,7 +62,7 @@ module Oboe
57
62
  begin
58
63
  Oboe::API.extend_with_tracing
59
64
  rescue LoadError => e
60
- puts "[oboe/error] Couldn't load oboe api."
65
+ Oboe.logger.fatal "[oboe/error] Couldn't load oboe api."
61
66
  end
62
67
 
63
68
  require 'oboe/config'
@@ -69,7 +74,7 @@ module Oboe
69
74
  begin
70
75
  require f
71
76
  rescue => e
72
- $stderr.puts "[oboe/loading] Error loading framework file '#{f}' : #{e}"
77
+ Oboe.logger.error "[oboe/loading] Error loading framework file '#{f}' : #{e}"
73
78
  end
74
79
  end
75
80
  end
@@ -0,0 +1,39 @@
1
+ # Copyright (c) 2013 by AppNeta
2
+ # All rights reserved.
3
+
4
+ module Oboe
5
+ class << self
6
+ attr_accessor :logger
7
+ end
8
+
9
+ class Logger
10
+ # Fatal message
11
+ def fatal(string, exception = nil)
12
+ Oboe.logger.fatal(string) if Oboe.logger
13
+ end
14
+
15
+ # Error message
16
+ def error(msg, exception = nil)
17
+ Oboe.logger.error(string) if Oboe.logger
18
+ end
19
+
20
+ # Warn message
21
+ def warn(msg, exception = nil)
22
+ Oboe.logger.warn(string) if Oboe.logger
23
+ end
24
+
25
+ # Info message
26
+ def info(msg, exception = nil)
27
+ Oboe.logger.info(string) if Oboe.logger
28
+ end
29
+
30
+ # Debug message
31
+ def debug(msg, exception = nil)
32
+ Oboe.logger.debug(string) if Oboe.logger
33
+ end
34
+
35
+ end
36
+ end
37
+
38
+ Oboe.logger = Logger.new(STDERR)
39
+
@@ -1,9 +1,9 @@
1
1
  module Oboe
2
2
  module Version
3
- MAJOR = 1
4
- MINOR = 4
5
- PATCH = 2
6
- BUILD = 2
3
+ MAJOR = 2
4
+ MINOR = 1
5
+ PATCH = 1
6
+ BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
9
9
  end
@@ -9,33 +9,29 @@ module Oboe_metal
9
9
  end
10
10
 
11
11
  class Context
12
- def self.log(layer, label, options = {}, with_backtrace = true)
13
- evt = Oboe::Context.createEvent()
14
- evt.addInfo("Layer", layer.to_s)
15
- evt.addInfo("Label", label.to_s)
12
+ class << self
13
+ attr_accessor :layer_op
16
14
 
17
- options.each_pair do |k, v|
18
- evt.addInfo(k.to_s, v.to_s)
19
- end
15
+ def log(layer, label, options = {}, with_backtrace = true)
16
+ evt = Oboe::Context.createEvent()
17
+ evt.addInfo("Layer", layer.to_s)
18
+ evt.addInfo("Label", label.to_s)
20
19
 
21
- evt.addInfo("Backtrace", Oboe::API.backtrace) if with_backtrace
20
+ options.each_pair do |k, v|
21
+ evt.addInfo(k.to_s, v.to_s)
22
+ end
22
23
 
23
- Oboe::Reporter.sendReport(evt)
24
- end
24
+ evt.addInfo("Backtrace", Oboe::API.backtrace) if with_backtrace
25
25
 
26
- def self.layer_op=(op)
27
- @layer_op = op
28
- end
29
-
30
- def self.layer_op
31
- @layer_op
32
- end
26
+ Oboe.reporter.sendReport(evt)
27
+ end
33
28
 
34
- def self.tracing_layer_op?(operation)
35
- if operation.is_a?(Array)
36
- return operation.include?(@layer_op)
37
- else
38
- return @layer_op == operation
29
+ def tracing_layer_op?(operation)
30
+ if operation.is_a?(Array)
31
+ return operation.include?(@layer_op)
32
+ else
33
+ return @layer_op == operation
34
+ end
39
35
  end
40
36
  end
41
37
  end
@@ -50,13 +46,57 @@ end
50
46
  module Oboe
51
47
  include Oboe_metal
52
48
 
53
- def self.reporter
54
- if !@reporter
55
- @reporter = Oboe::UdpReporter.new(Oboe::Config[:reporter_host])
49
+ class << self
50
+ attr_accessor :reporter
51
+
52
+ def always?
53
+ Oboe::Config[:tracing_mode].to_s == "always"
54
+ end
55
+
56
+ def continue?
57
+ Oboe::Context.isValid and not Oboe.never?
58
+ end
59
+
60
+ def log(layer, label, options = {})
61
+ Context.log(layer, label, options = options)
62
+ end
63
+
64
+ def never?
65
+ Oboe::Config[:tracing_mode].to_s == "never"
66
+ end
67
+
68
+ def now?
69
+ Oboe::Context.isValid and not Oboe.never?
70
+ end
71
+
72
+ def passthrough?
73
+ ["always", "through"].include?(Oboe::Config[:tracing_mode])
74
+ end
75
+
76
+ def sample?
77
+ Oboe::Config[:sample_rate].to_i < rand(1e6)
78
+ end
79
+
80
+ def start?
81
+ not Oboe::Context.isValid and Oboe.always?
82
+ end
83
+
84
+ def through?
85
+ Oboe::Config[:tracing_mode] == "through"
86
+ end
87
+
88
+ def tracing?
89
+ Oboe::Context.isValid and not Oboe.never?
56
90
  end
57
- return @reporter
58
91
  end
59
92
  end
60
93
 
61
- Oboe_metal::Context.init()
94
+ begin
95
+ Oboe_metal::Context.init()
96
+ Oboe.reporter = Oboe::UdpReporter.new("127.0.0.1")
97
+
98
+ rescue Exception => e
99
+ $stderr.puts e.message
100
+ raise
101
+ end
62
102
 
@@ -0,0 +1,19 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "oboe/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = %q{oboe}
6
+ s.version = Oboe::Version::STRING
7
+ s.date = Time.now.strftime('%Y-%m-%d')
8
+ s.authors = ["Tracelytics, Inc."]
9
+ s.email = %q{contact@tracelytics.com}
10
+ s.summary = %q{Tracelytics instrumentation gem}
11
+ s.homepage = %q{http://tracelytics.com}
12
+ s.description = %q{The oboe gem provides AppNeta instrumentation for Ruby and Ruby frameworks.}
13
+ s.extra_rdoc_files = ["LICENSE"]
14
+ s.files = `git ls-files`.split("\n")
15
+ s.extensions = ['ext/oboe_metal/extconf.rb']
16
+ s.test_files = Dir.glob("{spec}/**/*.rb")
17
+ s.add_development_dependency 'rake'
18
+ s.add_development_dependency 'rspec'
19
+ end
@@ -0,0 +1,13 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{oboe_fu}
3
+ s.version = "1.3.0"
4
+ s.date = %{2012-09-19}
5
+ s.authors = ["Tracelytics, Inc."]
6
+ s.email = %q{contact@tracelytics.com}
7
+ s.summary = %q{(Deprecated) Oboe instrumentation for Ruby frameworks}
8
+ s.homepage = %q{http://tracelytics.com}
9
+ s.description = %q{This gem has been replace by the 'oboe' gem. Please update.}
10
+ s.extra_rdoc_files = ["LICENSE"]
11
+ s.files = ['lib/oboe_fu.rb'] + ['LICENSE']
12
+ s.add_dependency('oboe', '= 1.3.0')
13
+ end
@@ -0,0 +1,65 @@
1
+ #!/bin/bash
2
+ #
3
+ # for use only when you're ready to push from prod -> rubygems
4
+ #
5
+
6
+ if [ $# -ne 0 ]
7
+ then
8
+ echo -e "Usage: `basename $0`"
9
+ echo -e "-Summary-"
10
+ echo -e "\t This script will help you build and release a new version of the oboe Ruby gem."
11
+ echo -e "\t It will also create a git tag with the version being released."
12
+ echo -e ""
13
+ echo -e "-Steps-"
14
+ echo -e "\t 1. Update lib/oboe/version.rb with the new version you wish to release."
15
+ echo -e "\t 2. Re-run this script without any arguments."
16
+ echo -e ""
17
+ echo -e "-Notes-"
18
+ echo -e "\t You must have ~/.gem/credentials setup with the Appneta API key for Rubygems."
19
+ echo -e "\t The API key should be titled :rubygems_appneta: in the credentials file."
20
+ echo -e ""
21
+ echo -e "\t Gems with letters in the build number (e.g. pre1 or beta1)will be released "
22
+ echo -e "\t as a prerelease gem on Rubygems."
23
+ echo -e ""
24
+ echo -e "\t See here for an explanation on prelease gems:"
25
+ echo -e "\t http://guides.rubygems.org/patterns/#prerelease-gems"
26
+ exit $E_BADARGS
27
+ fi
28
+
29
+ if [ $(git branch -a | grep ^* | awk '{print $2}') != "prod" ]; then
30
+ echo -e "You can only release gems from prod branch."
31
+ echo -e "Do a 'git checkout prod' and try again."
32
+ exit
33
+ fi
34
+
35
+ #set -e # stop on first non-zero exit code
36
+ #set -x # show commands as they happen
37
+
38
+ # Get gem version from lib/oboe/version.rb
39
+ VERSION=`/usr/bin/env ruby ./get_version.rb`
40
+
41
+ read -p "Are you sure you want to release oboe gem version $VERSION to Rubygems? [y/N]" -n 1 -r
42
+ if [[ $REPLY =~ ^[Yy]$ ]]
43
+ then
44
+ echo -e ""
45
+
46
+ # tag release (if tag already exists, bails out)
47
+ echo -e "Creating git tag rel-$VERSION..."
48
+ if ! git tag rel-$VERSION; then
49
+ echo -e "Couldn't create tag for ${VERSION}: if it already exists, you need to bump the version."
50
+ exit
51
+ fi
52
+
53
+ echo -e "Pushing tags to origin (Github)..."
54
+ git push --tags
55
+
56
+ # Build and publish the gem to Rubygems.org
57
+ echo -e "Building gem..."
58
+ gem build oboe.gemspec
59
+ echo -e "Pushing built gem to Rubygems..."
60
+ gem push -k rubygems_appneta oboe-$VERSION.gem
61
+ else
62
+ echo -e ""
63
+ echo -e "Canceled...nothing done. Have a nice day."
64
+ fi
65
+
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Oboe::Inst::Cassandra do
4
+ it 'Stock Cassandra should be loaded, defined and ready' do
5
+ defined?(::Cassandra).should_not == nil
6
+ end
7
+
8
+ it 'Cassandra should have oboe methods defined' do
9
+ [ :insert, :remove, :count_columns, :get_columns, :multi_get_columns, :get,
10
+ :multi_get, :get_range_single, :get_range_batch, :get_indexed_slices,
11
+ :create_index, :drop_index, :add_column_family, :drop_column_family,
12
+ :add_keyspace, :drop_keyspace ].each do |m|
13
+ ::Cassandra.method_defined?("#{m}_with_oboe").should == true
14
+ end
15
+ # Special 'exists?' case
16
+ ::Cassandra.method_defined?("exists_with_oboe?").should == true
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Oboe::Inst::Dalli do
4
+ it 'Stock Dalli should be loaded, defined and ready' do
5
+ defined?(::Dalli).should_not == nil
6
+ defined?(::Dalli::Client).should_not == nil
7
+ end
8
+
9
+ it 'Dalli should have oboe methods defined' do
10
+ [ :perform_with_oboe, :get_multi_with_oboe ].each do |m|
11
+ ::Dalli::Client.method_defined?(m).should == true
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe Oboe::Inst do
5
+ it 'Net::HTTP should be defined and ready' do
6
+ defined?(::Net::HTTP).should_not == nil
7
+ end
8
+
9
+ it 'Net::HTTP should have oboe methods defined' do
10
+ [ :request_with_oboe ].each do |m|
11
+ ::Net::HTTP.method_defined?(m).should == true
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'memcache'
3
+
4
+ describe Oboe::API::Memcache do
5
+ it 'Stock MemCache should be loaded, defined and ready' do
6
+ defined?(::MemCache).should_not == nil
7
+ end
8
+
9
+ it 'MemCache should have oboe methods defined' do
10
+ Oboe::API::Memcache::MEMCACHE_OPS.each do |m|
11
+ if ::MemCache.method_defined?(m)
12
+ ::MemCache.method_defined?("#{m}_with_oboe").should == true
13
+ end
14
+ ::MemCache.method_defined?(:request_setup_with_oboe).should == true
15
+ ::MemCache.method_defined?(:cache_get_with_oboe).should == true
16
+ ::MemCache.method_defined?(:get_multi_with_oboe).should == true
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ if (RUBY_VERSION =~ /^1./) == 0
4
+ describe Oboe::Inst::Memcached do
5
+ require 'memcached'
6
+ require 'memcached/rails'
7
+
8
+ it 'Stock Memcached should be loaded, defined and ready' do
9
+ defined?(::Memcached).should_not == nil
10
+ defined?(::Memcached::Rails).should_not == nil
11
+ end
12
+
13
+ it 'Memcached should have oboe methods defined' do
14
+ Oboe::API::Memcache::MEMCACHE_OPS.each do |m|
15
+ if ::Memcached.method_defined?(m)
16
+ ::Memcached.method_defined?("#{m}_with_oboe").should == true
17
+ end
18
+ ::Memcached::Rails.method_defined?(:get_multi_with_oboe).should == true
19
+ end
20
+ end
21
+ end
22
+ end