newrelic_moped 0.0.4.1 → 0.0.6

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.
@@ -4,11 +4,11 @@ DependencyDetection.defer do
4
4
  @name = :moped
5
5
 
6
6
  depends_on do
7
- defined?(::Moped) and not NewRelic::Control.instance['disable_moped']
7
+ defined?(::Moped) && !NewRelic::Control.instance['disable_moped']
8
8
  end
9
9
 
10
10
  executes do
11
- NewRelic::Agent.logger.debug 'Installing Moped instrumentation'
11
+ NewRelic::Agent.logger.info 'Installing Moped instrumentation'
12
12
  end
13
13
 
14
14
  executes do
@@ -25,20 +25,42 @@ module NewRelic
25
25
  module Instrumentation
26
26
  def logging_with_newrelic_trace(operations, &blk)
27
27
  operation_name, collection = determine_operation_and_collection(operations.first)
28
- log_statement = operations.first.log_inspect
29
-
30
- self.class.trace_execution_scoped("Database/#{collection}/#{operation_name}") do
31
- t0 = Time.now
32
- res = logging_without_newrelic_trace(operations, &blk)
33
- elapsed_time = (Time.now - t0).to_f
34
- NewRelic::Agent.instance.transaction_sampler.notice_sql(log_statement, nil, elapsed_time)
35
- NewRelic::Agent.instance.sql_sampler.notice_sql(log_statement, nil, nil, elapsed_time)
36
- res
28
+ log_statement = operations.first.log_inspect.encode("UTF-8")
29
+
30
+ metric = case operation_name
31
+ when 'INSERT', 'UPDATE', 'CREATE' then 'save'
32
+ when 'QUERY' then 'find'
33
+ when 'DELETE' then 'destroy'
34
+ else
35
+ nil
36
+ end
37
+
38
+ command = Proc.new { logging_without_newrelic_trace(operations, &blk) }
39
+ res = nil
40
+
41
+ if metric
42
+ metrics = ["ActiveRecord/all", "ActiveRecord/#{collection}/#{metric}"]
43
+
44
+ self.class.trace_execution_scoped(metrics) do
45
+ t0 = Time.now
46
+ begin
47
+ res = command.call
48
+ ensure
49
+ elapsed_time = (Time.now - t0).to_f
50
+
51
+ NewRelic::Agent.instance.transaction_sampler.notice_sql(log_statement, nil, elapsed_time)
52
+ NewRelic::Agent.instance.sql_sampler.notice_sql(log_statement, metric, nil, elapsed_time)
53
+ end
54
+ end
55
+ else
56
+ res = command.call
37
57
  end
58
+
59
+ res
38
60
  end
39
61
 
40
62
  def determine_operation_and_collection(operation)
41
- log_statement = operation.log_inspect
63
+ log_statement = operation.log_inspect.encode("UTF-8")
42
64
  collection = "Unknown"
43
65
  if operation.respond_to?(:collection)
44
66
  collection = operation.collection
@@ -55,4 +77,4 @@ module NewRelic
55
77
  end
56
78
  end
57
79
  end
58
- end
80
+ end
@@ -1,3 +1,3 @@
1
1
  module NewrelicMoped
2
- VERSION = "0.0.4.1"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newrelic_moped
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.1
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-07 00:00:00.000000000 Z
12
+ date: 2013-03-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: newrelic_rpm
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 3.5.1
21
+ version: 3.6.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 3.5.1
29
+ version: 3.6.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: moped
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -66,17 +66,11 @@ executables: []
66
66
  extensions: []
67
67
  extra_rdoc_files: []
68
68
  files:
69
- - .gitignore
70
- - Gemfile
71
- - LICENSE
72
- - README.md
73
- - Rakefile
74
- - lib/newrelic_moped.rb
75
69
  - lib/newrelic_moped/instrumentation.rb
76
70
  - lib/newrelic_moped/version.rb
77
- - newrelic_moped.gemspec
78
- - test/instrumentation_test.rb
79
- - test/moped_command_fake.rb
71
+ - lib/newrelic_moped.rb
72
+ - LICENSE
73
+ - README.md
80
74
  homepage: ''
81
75
  licenses: []
82
76
  post_install_message:
@@ -101,7 +95,5 @@ rubygems_version: 1.8.23
101
95
  signing_key:
102
96
  specification_version: 3
103
97
  summary: New Relic Instrumentation for Moped & Mongoid 3
104
- test_files:
105
- - test/instrumentation_test.rb
106
- - test/moped_command_fake.rb
98
+ test_files: []
107
99
  has_rdoc:
data/.gitignore DELETED
@@ -1,18 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- log
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- require "rake/testtask"
2
-
3
- Rake::TestTask.new do |t|
4
- t.libs = ['test']
5
- t.test_files = FileList['test/*_test.rb']
6
- end
7
-
8
- desc "Run tests"
9
- task :default => :test
@@ -1,21 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/newrelic_moped/version', __FILE__)
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["Stephen Bartholomew"]
6
- gem.email = ["stephenbartholomew@gmail.com"]
7
- gem.description = %q{New Relic Instrumentation for Moped & Mongoid 3}
8
- gem.summary = %q{New Relic Instrumentation for Moped & Mongoid 3}
9
- gem.homepage = ""
10
-
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "newrelic_moped"
15
- gem.require_paths = ["lib"]
16
- gem.version = NewrelicMoped::VERSION
17
- gem.add_dependency 'newrelic_rpm', '~> 3.5.1'
18
- gem.add_dependency 'moped'
19
-
20
- gem.add_development_dependency 'rake'
21
- end
@@ -1,86 +0,0 @@
1
- require 'ostruct'
2
- require 'test/unit'
3
- require 'moped'
4
-
5
- require File.expand_path(File.dirname(__FILE__) + '/../lib/newrelic_moped/instrumentation')
6
- require File.expand_path(File.dirname(__FILE__) + '/moped_command_fake')
7
-
8
- class FakeOpWithCollection < Struct.new(:collection, :log_inspect)
9
- end
10
-
11
- class FakeOpWithoutCollection < Struct.new(:log_inspect)
12
- end
13
-
14
- class TestInstrumentation < Test::Unit::TestCase
15
- include NewRelic::Agent::Instrumentation::ControllerInstrumentation
16
-
17
- def setup
18
- NewRelic::Agent.manual_start
19
- @engine = NewRelic::Agent.instance.stats_engine
20
- @engine.clear_stats
21
-
22
- @sampler = NewRelic::Agent.instance.transaction_sampler
23
- @sampler.reset!
24
- @sampler.start_builder
25
-
26
- Moped::Node.class_eval do
27
- def logging_with_newrelic_trace(operations, &callback)
28
- # do nothing
29
- end
30
- end
31
-
32
- @node = Moped::Node.new("127.0.0.1:27017")
33
- end
34
-
35
- def teardown
36
- @sampler.clear_builder
37
- end
38
-
39
- def test_handles_operations_with_collections
40
- fake_op = FakeOpWithCollection.new([], "Fake")
41
-
42
- assert_nothing_raised do
43
- @node.logging_with_newrelic_trace(fake_op)
44
- end
45
- end
46
-
47
- def test_ignores_operations_without_collection
48
- fake_op = FakeOpWithoutCollection.new("Fake")
49
-
50
- assert_nothing_raised do
51
- @node.logging_with_newrelic_trace(fake_op)
52
- end
53
- end
54
- end
55
-
56
- class NewRelicMopedInstrumentationTest < Test::Unit::TestCase
57
- include NewRelic::Moped::Instrumentation
58
-
59
- def test_when_command_is_mapreduce
60
- command = MopedCommandWithCollectionFake.new("COMMAND database=my_database command={:mapreduce=>\"users\", :query=>{}}", "other_collection")
61
- operation, collection = determine_operation_and_collection(command)
62
- assert_equal("MAPREDUCE", operation)
63
- assert_equal("users", collection, "it should parse collection from statement")
64
- end
65
-
66
- def test_query_when_operation_responds_to_collection
67
- command = MopedCommandWithCollectionFake.new("QUERY database=my_database collection=xyz", "users")
68
- operation, collection = determine_operation_and_collection(command)
69
- assert_equal("QUERY", operation)
70
- assert_equal("users", collection, "it should use collection from operation")
71
- end
72
-
73
- def test_when_command_is_count
74
- command = MopedCommandWithCollectionFake.new("COMMAND database=my_database command={:count=>\"users\", query=>{}}", "other_collection")
75
- operation, collection = determine_operation_and_collection(command)
76
- assert_equal("COUNT", operation)
77
- assert_equal("users", collection, "it should parse collection from statement")
78
- end
79
-
80
- def test_command_when_operation_does_not_respond_to_collection
81
- command = MopedCommandFake.new("COMMAND database=admin command={:ismaster=>1}")
82
- operation, collection = determine_operation_and_collection(command)
83
- assert_equal("COMMAND", operation)
84
- assert_equal("Unknown", collection, "it should set collection name to Unknown")
85
- end
86
- end
@@ -1,27 +0,0 @@
1
-
2
- class MopedCommandFake
3
-
4
- def initialize(log_statement)
5
- @log_statement = log_statement
6
- end
7
-
8
- def log_inspect
9
- @log_statement
10
- end
11
- end
12
-
13
- class MopedCommandWithCollectionFake
14
-
15
- def initialize(log_statement, collection)
16
- @log_statement = log_statement
17
- @collection = collection
18
- end
19
-
20
- def log_inspect
21
- @log_statement
22
- end
23
-
24
- def collection
25
- @collection
26
- end
27
- end