seanwalbran-rpm_contrib 2.1.6.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 (42) hide show
  1. data/CHANGELOG +133 -0
  2. data/Gemfile +13 -0
  3. data/LICENSE +20 -0
  4. data/README.md +293 -0
  5. data/Rakefile +79 -0
  6. data/lib/new_relic/control/camping.rb +14 -0
  7. data/lib/rpm_contrib/agent_compatibility.rb +11 -0
  8. data/lib/rpm_contrib/detection/camping.rb +24 -0
  9. data/lib/rpm_contrib/detection.rb +5 -0
  10. data/lib/rpm_contrib/instrumentation/active_messaging.rb +22 -0
  11. data/lib/rpm_contrib/instrumentation/aws.rb +68 -0
  12. data/lib/rpm_contrib/instrumentation/camping.rb +50 -0
  13. data/lib/rpm_contrib/instrumentation/cassandra.rb +30 -0
  14. data/lib/rpm_contrib/instrumentation/crack.rb +41 -0
  15. data/lib/rpm_contrib/instrumentation/curb.rb +52 -0
  16. data/lib/rpm_contrib/instrumentation/elastic_search.rb +26 -0
  17. data/lib/rpm_contrib/instrumentation/kyototycoon.rb +28 -0
  18. data/lib/rpm_contrib/instrumentation/mongo.rb +50 -0
  19. data/lib/rpm_contrib/instrumentation/paperclip.rb +29 -0
  20. data/lib/rpm_contrib/instrumentation/picky.rb +41 -0
  21. data/lib/rpm_contrib/instrumentation/redis.rb +42 -0
  22. data/lib/rpm_contrib/instrumentation/resque.rb +83 -0
  23. data/lib/rpm_contrib/instrumentation/riak_client.rb +48 -0
  24. data/lib/rpm_contrib/instrumentation/ripple.rb +37 -0
  25. data/lib/rpm_contrib/instrumentation/sinatra.rb +30 -0
  26. data/lib/rpm_contrib/instrumentation/thinking_sphinx.rb +22 -0
  27. data/lib/rpm_contrib/instrumentation/typhoeus.rb +33 -0
  28. data/lib/rpm_contrib/instrumentation/ultrasphinx.rb +22 -0
  29. data/lib/rpm_contrib/instrumentation/workling.rb +27 -0
  30. data/lib/rpm_contrib/instrumentation/yajl.rb +41 -0
  31. data/lib/rpm_contrib/instrumentation.rb +16 -0
  32. data/lib/rpm_contrib/language_support.rb +31 -0
  33. data/lib/rpm_contrib/samplers.rb +17 -0
  34. data/lib/rpm_contrib.rb +36 -0
  35. data/test/helper.rb +9 -0
  36. data/test/schema.rb +19 -0
  37. data/test/test_curb.rb +69 -0
  38. data/test/test_picky.rb +55 -0
  39. data/test/test_redis.rb +34 -0
  40. data/test/test_resque.rb +74 -0
  41. data/test/test_workling.rb +34 -0
  42. metadata +148 -0
@@ -0,0 +1,27 @@
1
+ # Workling instrumentation contributed by Chad Ingram of Aurora Feint
2
+ #
3
+ DependencyDetection.defer do
4
+ @name = :workling
5
+
6
+ depends_on do
7
+ defined?(::Workling) and not ::NewRelic::Control.instance['disable_workling']
8
+ end
9
+
10
+ executes do
11
+ NewRelic::Agent.logger.debug 'Installing Workling instrumentation'
12
+ end
13
+
14
+ executes do
15
+ ::Workling::Base.class_eval do
16
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
17
+ end
18
+
19
+ ::Workling::Discovery.discovered.each do |clazz|
20
+ (clazz.public_instance_methods - ::Workling::Base.public_instance_methods).each do |method|
21
+ puts "added method tracer Workling/#{clazz.name}/#{method}"
22
+ clazz.send(:add_method_tracer, method, "Workling/#{clazz.name}/#{method}", :category => :task)
23
+ end
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,41 @@
1
+ DependencyDetection.defer do
2
+ @name = :yajl_parser
3
+
4
+ depends_on do
5
+ defined?(::Yajl::Parser) && !NewRelic::Control.instance['disable_yajl_instrumentation']
6
+ end
7
+
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Yajl::Parser instrumentation'
10
+ end
11
+
12
+ executes do
13
+ ::Yajl::Parser.class_eval do
14
+ class << self
15
+ include ::NewRelic::Agent::MethodTracer
16
+ add_method_tracer :parse, 'Parser/Yajl/parse'
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ DependencyDetection.defer do
23
+ @name = :yajl_encoder
24
+
25
+ depends_on do
26
+ defined?(::Yajl::Encoder) && !NewRelic::Control.instance['disable_yajl_instrumentation']
27
+ end
28
+
29
+ executes do
30
+ NewRelic::Agent.logger.debug 'Installing Yajl::Encoder instrumentation'
31
+ end
32
+
33
+ executes do
34
+ ::Yajl::Encoder.class_eval do
35
+ class << self
36
+ include ::NewRelic::Agent::MethodTracer
37
+ add_method_tracer :encode, 'Encoder/Yajl/encode'
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,16 @@
1
+ require 'newrelic_rpm'
2
+ module RpmContrib
3
+ # Contributed instrumentation files for use with newrelic_rpm gem
4
+ module Instrumentation
5
+ end
6
+ end
7
+
8
+ pattern = File.expand_path "../instrumentation/**/*.rb", __FILE__
9
+ Dir.glob pattern do |file|
10
+ begin
11
+ require file.to_s
12
+ rescue Exception => e
13
+ NewRelic::Agent.logger.error "Skipping instrumentation file '#{file}': #{e}"
14
+ NewRelic::Agent.logger.debug e.backtrace.join("\n")
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ module RPMContrib::LanguageSupport
2
+ extend self
3
+
4
+ @@forkable = nil
5
+
6
+ def can_fork?
7
+ # this is expensive to check, so we should only check once
8
+ return @@forkable if @@forkable != nil
9
+
10
+ if Process.respond_to?(:fork)
11
+ # if this is not 1.9.2 or higher, we have to make sure
12
+ @@forkable = ::RUBY_VERSION < '1.9.2' ? test_forkability : true
13
+ else
14
+ @@forkable = false
15
+ end
16
+
17
+ @@forkable
18
+ end
19
+
20
+ private
21
+
22
+ def test_forkability
23
+ child = Process.fork { exit! }
24
+ # calling wait here doesn't seem like it should necessary, but it seems to
25
+ # resolve some weird edge cases with resque forking.
26
+ Process.wait child
27
+ true
28
+ rescue NotImplementedError
29
+ false
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ module RpmContrib
2
+ # Samplers are subclasses of NewRelic::Agent::Sampler which periodically collect metric data in a
3
+ # background thread. Sampler classes belong in the sampler subdirectory and must be loaded before
4
+ # the agent starts.
5
+ module Samplers
6
+ end
7
+ end
8
+
9
+ pattern = File.expand_path "../samplers/**/*.rb", __FILE__
10
+ Dir.glob pattern do |file|
11
+ begin
12
+ require file.to_s
13
+ rescue Exception => e
14
+ NewRelic::Agent.logger.error "Skipping instrumentation file '#{file}': #{e}"
15
+ NewRelic::Agent.logger.debug e.backtrace.join("\n")
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ RPM_CONTRIB_LIB = File.dirname(__FILE__)
2
+
3
+ module RPMContrib; end
4
+
5
+ require 'rpm_contrib/detection'
6
+
7
+ require 'newrelic_rpm'
8
+ require 'rpm_contrib/agent_compatibility'
9
+ require 'rpm_contrib/instrumentation'
10
+
11
+ # Load all the Sampler class definitions. These will register
12
+ # automatically with the agent.
13
+ require 'rpm_contrib/samplers'
14
+
15
+ if defined? Rails
16
+ # Rails 3.x+
17
+ if Rails.respond_to?(:version) && Rails.version =~ /^3/
18
+ module NewRelic
19
+ class Railtie < Rails::Railtie
20
+ initializer("rpm_contrib.start_plugin"){ NewRelic::Control.instance.init_plugin }
21
+ end
22
+ end
23
+ # Rails 2.x
24
+ elsif defined?(Rails) && Rails.respond_to?(:configuration)
25
+ Rails.configuration.after_initialize { NewRelic::Control.instance.init_plugin }
26
+ else
27
+ raise "The rpm_contrib gem supports Rails 2.2+ only."
28
+ end
29
+ else
30
+ # If not running Rails, it is important that you load the contrib gem as late
31
+ # as possible so the agent initializes after everything else. Either that
32
+ # or make the following call yourself at the end of your startup sequence
33
+ # (it is idempotent).
34
+ NewRelic::Control.instance.init_plugin
35
+ end
36
+
data/test/helper.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+
7
+ require File.expand_path("../../lib/rpm_contrib.rb", __FILE__)
8
+
9
+ require 'schema.rb'
data/test/schema.rb ADDED
@@ -0,0 +1,19 @@
1
+ # Use this file to add tables you need to do testing
2
+ # These are created in a sqllite memory DB
3
+
4
+ begin
5
+ require 'sqlite3'
6
+ require 'active_record'
7
+
8
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
9
+ ActiveRecord::Migration.verbose = false
10
+
11
+ ActiveRecord::Schema.define do
12
+
13
+ create_table :stories, :force => true do |table|
14
+ table.string :text
15
+ end
16
+ end
17
+ rescue LoadError
18
+ # Skip AR tests
19
+ end
data/test/test_curb.rb ADDED
@@ -0,0 +1,69 @@
1
+ require "#{File.dirname(__FILE__)}/helper"
2
+ begin
3
+ require 'curb'
4
+ rescue LoadError
5
+ end
6
+
7
+ class NewRelic::Agent::NetInstrumentationTest < Test::Unit::TestCase
8
+ include NewRelic::Agent::Instrumentation::ControllerInstrumentation
9
+ def setup
10
+ NewRelic::Agent.manual_start
11
+ @engine = NewRelic::Agent.instance.stats_engine
12
+ @engine.clear_stats
13
+ end
14
+ def test_get
15
+ curl = Curl::Easy.new('http://www.google.com/index.html')
16
+ curl.perform
17
+ assert_match /<head>/, curl.body_str
18
+ assert_equal %w[External/www.google.com/Curl::Easy External/Curl::Multi
19
+ External/allOther External/www.google.com/all].sort,
20
+ @engine.metrics.sort
21
+ end
22
+
23
+ def test_multi
24
+ multi = Curl::Multi.new
25
+ curl1 = Curl::Easy.new('http://www.google.com/index.html')
26
+ multi.add curl1
27
+ curl2 = Curl::Easy.new('http://www.yahoo.com/')
28
+ multi.add curl2
29
+ multi.perform
30
+ assert_match /<head>/, curl1.body_str
31
+ assert_match /<head>/, curl2.body_str
32
+ assert_equal %w[External/Curl::Multi External/allOther].sort,
33
+ @engine.metrics.sort
34
+ end
35
+
36
+ def test_background
37
+ perform_action_with_newrelic_trace("task", :category => :task) do
38
+ curl = Curl::Easy.new('http://www.google.com/index.html')
39
+ curl.perform
40
+ assert_match /<head>/, curl.body_str
41
+ end
42
+ assert_equal %w[External/Curl::Multi
43
+ External/Curl::Multi:OtherTransaction/Background/NewRelic::Agent::NetInstrumentationTest/task
44
+ External/www.google.com/Curl::Easy External/allOther External/www.google.com/all
45
+ External/www.google.com/Curl::Easy:OtherTransaction/Background/NewRelic::Agent::NetInstrumentationTest/task].sort,
46
+ @engine.metrics.select{|m| m =~ /^External/}.sort
47
+ end
48
+
49
+ def test_transactional
50
+ perform_action_with_newrelic_trace("task") do
51
+ curl = Curl::Easy.new('http://www.google.com/index.html')
52
+ curl.perform
53
+ assert_match /<head>/, curl.body_str
54
+ end
55
+ assert_equal %w[External/Curl::Multi
56
+ External/Curl::Multi:Controller/NewRelic::Agent::NetInstrumentationTest/task
57
+ External/www.google.com/Curl::Easy External/allWeb External/www.google.com/all
58
+ External/www.google.com/Curl::Easy:Controller/NewRelic::Agent::NetInstrumentationTest/task].sort,
59
+ @engine.metrics.select{|m| m =~ /^External/}.sort
60
+ end
61
+ def test_ignore
62
+ NewRelic::Agent.disable_all_tracing do
63
+ curl = Curl::Easy.new('http://www.google.com/index.html')
64
+ curl.http_post('data')
65
+ end
66
+ assert_equal 0, @engine.metrics.size
67
+ end
68
+
69
+ end if defined? ::Curl::Easy
@@ -0,0 +1,55 @@
1
+ require 'picky'
2
+
3
+ require "#{File.dirname(__FILE__)}/helper"
4
+
5
+ class NewRelic::Agent::PickyIntrumentationTest < Test::Unit::TestCase
6
+
7
+ def tokens_for *tokens
8
+ tokens.map{|t|
9
+ token = 'whatever'
10
+
11
+ token.extend Module.new{
12
+ define_method(:'partial?'){ t[:partial] }
13
+ define_method(:'similar?'){ t[:similar] }
14
+ define_method(:'qualifiers'){ t[:qualifiers] }
15
+ }
16
+
17
+ token
18
+ }
19
+ end
20
+
21
+ def test_obfuscate_tokens
22
+ tokens = tokens_for({})
23
+ assert_equal 'xxx', Picky::NewRelic.obfuscate_tokens(tokens)
24
+
25
+ tokens = tokens_for({:similar => true})
26
+ assert_equal 'xxx~', Picky::NewRelic.obfuscate_tokens(tokens)
27
+
28
+ tokens = tokens_for({:partial => true})
29
+ assert_equal 'xxx*', Picky::NewRelic.obfuscate_tokens(tokens)
30
+
31
+ tokens = tokens_for({:qualifiers => [:haha]})
32
+ assert_equal 'haha:xxx', Picky::NewRelic.obfuscate_tokens(tokens)
33
+
34
+ tokens = tokens_for( {:partial => true}, {:similar => true} )
35
+ assert_equal 'xxx* xxx~', Picky::NewRelic.obfuscate_tokens(tokens)
36
+
37
+ tokens = tokens_for( {:similar => true}, {:partial => true} )
38
+ assert_equal 'xxx* xxx~', Picky::NewRelic.obfuscate_tokens(tokens)
39
+
40
+ tokens = tokens_for( {:partial => true}, {:partial => true} )
41
+ assert_equal 'xxx* xxx*', Picky::NewRelic.obfuscate_tokens(tokens)
42
+
43
+ tokens = tokens_for(
44
+ {:similar => true, :qualifiers => [:bla]},
45
+ {:partial => true, :qualifiers => [:bla, :blub]}
46
+ )
47
+ assert_equal 'bla,blub:xxx* bla:xxx~', Picky::NewRelic.obfuscate_tokens(tokens)
48
+
49
+ tokens = tokens_for(
50
+ {:similar => true, :qualifiers => [:bla]},
51
+ {:partial => true, :qualifiers => [:blub, :bla]}
52
+ )
53
+ assert_equal 'bla,blub:xxx* bla:xxx~', Picky::NewRelic.obfuscate_tokens(tokens)
54
+ end
55
+ end
@@ -0,0 +1,34 @@
1
+ require "#{File.dirname(__FILE__)}/helper"
2
+ begin
3
+ require 'redis'
4
+ require 'ruby-debug'
5
+ rescue LoadError
6
+ end
7
+
8
+ require "#{File.dirname(__FILE__)}/../lib/rpm_contrib/instrumentation/redis"
9
+
10
+ if defined?(::Redis)
11
+
12
+
13
+ class RedisTest < Test::Unit::TestCase
14
+
15
+ # Called before every test method runs. Can be used
16
+ # to set up fixture information.
17
+ def setup
18
+ # Do nothing
19
+ end
20
+
21
+ # Called after every test method runs. Can be used to tear
22
+ # down fixture information.
23
+
24
+ def teardown
25
+ # Do nothing
26
+ end
27
+
28
+ # Fake test
29
+ def test_fail
30
+
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,74 @@
1
+ require 'resque'
2
+ require 'mocha'
3
+ require File.expand_path(File.dirname(__FILE__) + "/helper")
4
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/rpm_contrib")
5
+
6
+ class ResqueTest < Test::Unit::TestCase
7
+ class ExtendoJorb < ::Resque::Job
8
+ def self.perform
9
+ true
10
+ end
11
+ end
12
+
13
+ class GoodJorb
14
+ def self.perform
15
+ true
16
+ end
17
+ end
18
+
19
+ class BadJorb
20
+ def self.perform
21
+ raise "I'm doing a bad jorb"
22
+ end
23
+ end
24
+
25
+ def setup
26
+ @worker = Resque::Worker.new(:test)
27
+ NewRelic::Agent.manual_start
28
+ @engine = NewRelic::Agent.instance.stats_engine
29
+ end
30
+
31
+ def teardown
32
+ @engine.clear_stats
33
+ end
34
+
35
+ def test_should_instrument_job_extending_from_resque_job
36
+ @worker.perform(Resque::Job.new(:test,
37
+ 'class' => 'ResqueTest::ExtendoJorb'))
38
+
39
+ metrics = [ 'OtherTransaction/all', 'OtherTransaction/ResqueJob/all',
40
+ 'OtherTransaction/ResqueJob/ResqueTest::ExtendoJorb/perform' ]
41
+ metrics.each do |metric|
42
+ assert(@engine.metrics.include?(metric),
43
+ "#{@engine.metrics.inspect} missing #{metric}")
44
+ end
45
+ assert !@engine.metrics.include?('Errors/all')
46
+ end
47
+
48
+ def test_should_instrument_poro_job
49
+ @worker.perform(Resque::Job.new(:test, 'class' => 'ResqueTest::GoodJorb'))
50
+
51
+ metrics = [ 'OtherTransaction/all', 'OtherTransaction/ResqueJob/all',
52
+ 'OtherTransaction/ResqueJob/ResqueTest::GoodJorb/perform' ]
53
+ metrics.each do |metric|
54
+ assert(@engine.metrics.include?(metric),
55
+ "#{@engine.metrics.inspect} missing #{metric}")
56
+ end
57
+ assert !@engine.metrics.include?('Errors/all')
58
+ end
59
+
60
+ def test_should_collect_job_errors
61
+ begin
62
+ @worker.perform(Resque::Job.new(:test, 'class' => 'ResqueTest::BadJorb'))
63
+ rescue
64
+ end
65
+
66
+ metrics = [ 'OtherTransaction/all', 'OtherTransaction/ResqueJob/all',
67
+ 'OtherTransaction/ResqueJob/ResqueTest::BadJorb/perform',
68
+ 'Errors/all' ]
69
+ metrics.each do |metric|
70
+ assert(@engine.metrics.include?(metric),
71
+ "#{@engine.metrics.inspect} missing #{metric}")
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,34 @@
1
+ require "#{File.dirname(__FILE__)}/helper"
2
+ begin
3
+ require 'redis'
4
+ require 'ruby-debug'
5
+ rescue LoadError
6
+ end
7
+
8
+ require "#{File.dirname(__FILE__)}/../lib/rpm_contrib/instrumentation/workling"
9
+
10
+ if defined?(::Workling)
11
+
12
+
13
+ class WorklingTest < Test::Unit::TestCase
14
+
15
+ # Called before every test method runs. Can be used
16
+ # to set up fixture information.
17
+ def setup
18
+ # Do nothing
19
+ end
20
+
21
+ # Called after every test method runs. Can be used to tear
22
+ # down fixture information.
23
+
24
+ def teardown
25
+ # Do nothing
26
+ end
27
+
28
+ # Fake test
29
+ def test_fail
30
+
31
+
32
+ end
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: seanwalbran-rpm_contrib
3
+ version: !ruby/object:Gem::Version
4
+ hash: 125
5
+ prerelease:
6
+ segments:
7
+ - 2
8
+ - 1
9
+ - 6
10
+ - 1
11
+ version: 2.1.6.1
12
+ platform: ruby
13
+ authors:
14
+ - Bill Kayser
15
+ - Jon Guymon
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2012-02-18 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: newrelic_rpm
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 1
31
+ segments:
32
+ - 3
33
+ - 1
34
+ - 1
35
+ version: 3.1.1
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: newrelic_rpm
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 1
47
+ segments:
48
+ - 3
49
+ - 1
50
+ - 1
51
+ version: 3.1.1
52
+ type: :runtime
53
+ version_requirements: *id002
54
+ description: |
55
+ Community contributed instrumentation for various frameworks based on
56
+ the New Relic Ruby monitoring gem newrelic_rpm.
57
+
58
+ email: support@newrelic.com
59
+ executables: []
60
+
61
+ extensions: []
62
+
63
+ extra_rdoc_files:
64
+ - CHANGELOG
65
+ - LICENSE
66
+ - README.md
67
+ files:
68
+ - CHANGELOG
69
+ - Gemfile
70
+ - LICENSE
71
+ - README.md
72
+ - Rakefile
73
+ - lib/new_relic/control/camping.rb
74
+ - lib/rpm_contrib.rb
75
+ - lib/rpm_contrib/agent_compatibility.rb
76
+ - lib/rpm_contrib/detection.rb
77
+ - lib/rpm_contrib/detection/camping.rb
78
+ - lib/rpm_contrib/instrumentation.rb
79
+ - lib/rpm_contrib/instrumentation/active_messaging.rb
80
+ - lib/rpm_contrib/instrumentation/aws.rb
81
+ - lib/rpm_contrib/instrumentation/camping.rb
82
+ - lib/rpm_contrib/instrumentation/cassandra.rb
83
+ - lib/rpm_contrib/instrumentation/crack.rb
84
+ - lib/rpm_contrib/instrumentation/curb.rb
85
+ - lib/rpm_contrib/instrumentation/elastic_search.rb
86
+ - lib/rpm_contrib/instrumentation/kyototycoon.rb
87
+ - lib/rpm_contrib/instrumentation/mongo.rb
88
+ - lib/rpm_contrib/instrumentation/paperclip.rb
89
+ - lib/rpm_contrib/instrumentation/picky.rb
90
+ - lib/rpm_contrib/instrumentation/redis.rb
91
+ - lib/rpm_contrib/instrumentation/resque.rb
92
+ - lib/rpm_contrib/instrumentation/riak_client.rb
93
+ - lib/rpm_contrib/instrumentation/ripple.rb
94
+ - lib/rpm_contrib/instrumentation/sinatra.rb
95
+ - lib/rpm_contrib/instrumentation/thinking_sphinx.rb
96
+ - lib/rpm_contrib/instrumentation/typhoeus.rb
97
+ - lib/rpm_contrib/instrumentation/ultrasphinx.rb
98
+ - lib/rpm_contrib/instrumentation/workling.rb
99
+ - lib/rpm_contrib/instrumentation/yajl.rb
100
+ - lib/rpm_contrib/language_support.rb
101
+ - lib/rpm_contrib/samplers.rb
102
+ - test/helper.rb
103
+ - test/schema.rb
104
+ - test/test_curb.rb
105
+ - test/test_picky.rb
106
+ - test/test_redis.rb
107
+ - test/test_resque.rb
108
+ - test/test_workling.rb
109
+ homepage: http://github.com/newrelic/rpm_contrib
110
+ licenses: []
111
+
112
+ post_install_message:
113
+ rdoc_options:
114
+ - --line-numbers
115
+ - --inline-source
116
+ - --title
117
+ - Contributed Instrumentation for New Relic RPM
118
+ - -m
119
+ - README.md
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ hash: 3
128
+ segments:
129
+ - 0
130
+ version: "0"
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ hash: 3
137
+ segments:
138
+ - 0
139
+ version: "0"
140
+ requirements: []
141
+
142
+ rubyforge_project:
143
+ rubygems_version: 1.8.15
144
+ signing_key:
145
+ specification_version: 3
146
+ summary: Contributed Instrumentation for New Relic RPM
147
+ test_files: []
148
+