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
@@ -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