seanwalbran-rpm_contrib 2.1.6.1

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