oboe 1.3.3 → 1.3.4

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.
@@ -0,0 +1,225 @@
1
+ # Copyright (c) 2012 by Tracelytics, Inc.
2
+ # All rights reserved.
3
+
4
+ module Oboe
5
+ module Inst
6
+ module Mongo
7
+ FLAVOR = 'mongodb'
8
+
9
+ # Operations for Mongo::DB
10
+ DB_OPS = [ :create_collection, :drop_collection ]
11
+
12
+ # Operations for Mongo::Cursor
13
+ CURSOR_OPS = [ :count ]
14
+
15
+ # Operations for Mongo::Collection
16
+ COLL_WRITE_OPS = [ :find_and_modify, :insert, :map_reduce, :remove, :rename, :update ]
17
+ COLL_QUERY_OPS = [ :distinct, :find, :group ]
18
+ COLL_INDEX_OPS = [ :create_index, :drop_index, :drop_indexes, :ensure_index, :index_information ]
19
+ end
20
+ end
21
+ end
22
+
23
+ if defined?(::Mongo::DB)
24
+ module ::Mongo
25
+ class DB
26
+ include Oboe::Inst::Mongo
27
+
28
+ # Instrument DB operations
29
+ Oboe::Inst::Mongo::DB_OPS.reject { |m| not method_defined?(m) }.each do |m|
30
+ define_method("#{m}_with_oboe") do |*args|
31
+ report_kvs = {}
32
+
33
+ begin
34
+ report_kvs[:Flavor] = Oboe::Inst::Mongo::FLAVOR
35
+
36
+ report_kvs[:Database] = @name
37
+ report_kvs[:RemoteHost] = @connection.host
38
+ report_kvs[:RemotePort] = @connection.port
39
+
40
+ report_kvs[:QueryOp] = m
41
+
42
+ report_kvs[:New_Collection_Name] = args[0] if m == :create_collection
43
+ report_kvs[:Collection_Name] = args[0] if m == :drop_collection
44
+ rescue
45
+ logger.warn "[oboe/error] Problem processing mongo args (#{m})" if defined?(logger)
46
+ end
47
+
48
+ Oboe::API.trace('mongo', report_kvs) do
49
+ send("#{m}_without_oboe", *args)
50
+ end
51
+ end
52
+
53
+ class_eval "alias #{m}_without_oboe #{m}"
54
+ class_eval "alias #{m} #{m}_with_oboe"
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ if defined?(::Mongo::Cursor)
61
+ module ::Mongo
62
+ class Cursor
63
+ include Oboe::Inst::Mongo
64
+
65
+ # Instrument DB cursor operations
66
+ Oboe::Inst::Mongo::CURSOR_OPS.reject { |m| not method_defined?(m) }.each do |m|
67
+ define_method("#{m}_with_oboe") do |*args|
68
+ report_kvs = {}
69
+
70
+ begin
71
+ report_kvs[:Flavor] = Oboe::Inst::Mongo::FLAVOR
72
+
73
+ report_kvs[:Database] = @db.name
74
+ report_kvs[:RemoteHost] = @connection.host
75
+ report_kvs[:RemotePort] = @connection.port
76
+
77
+ report_kvs[:QueryOp] = m
78
+ if m == :count
79
+ unless @selector.empty?
80
+ report_kvs[:Query] = @selector.try(:to_json)
81
+ else
82
+ report_kvs[:Query] = 'all'
83
+ end
84
+ report_kvs[:limit] = @limit if @limit != 0
85
+ end
86
+
87
+ rescue
88
+ logger.warn "[oboe/error] Problem processing mongo args (#{m})" if defined?(logger)
89
+ end
90
+
91
+ Oboe::API.trace('mongo', report_kvs) do
92
+ send("#{m}_without_oboe", *args)
93
+ end
94
+ end
95
+
96
+ class_eval "alias #{m}_without_oboe #{m}"
97
+ class_eval "alias #{m} #{m}_with_oboe"
98
+ end
99
+ end
100
+ end
101
+ end
102
+
103
+ if defined?(::Mongo::Collection)
104
+ module ::Mongo
105
+ class Collection
106
+ include Oboe::Inst::Mongo
107
+
108
+ def oboe_collect(m, args)
109
+ report_kvs = {}
110
+ report_kvs[:Flavor] = Oboe::Inst::Mongo::FLAVOR
111
+
112
+ report_kvs[:Database] = @db.name
113
+ report_kvs[:RemoteHost] = @db.connection.host
114
+ report_kvs[:RemotePort] = @db.connection.port
115
+ report_kvs[:Collection] = @name
116
+
117
+ report_kvs[:QueryOp] = m
118
+ report_kvs[:Query] = args[0].try(:to_json) if args and not args.empty? and args[0].class == Hash
119
+ report_kvs
120
+ end
121
+
122
+ # Instrument Collection write operations
123
+ Oboe::Inst::Mongo::COLL_WRITE_OPS.reject { |m| not method_defined?(m) }.each do |m|
124
+ define_method("#{m}_with_oboe") do |*args|
125
+ report_kvs = oboe_collect(m, args)
126
+ args_length = args.length
127
+
128
+ begin
129
+ if m == :find_and_modify and args[0] and args[0].has_key?(:update)
130
+ report_kvs[:Update_Document] = args[0][:update]
131
+ end
132
+
133
+ if m == :map_reduce
134
+ report_kvs[:Map_Function] = args[0]
135
+ report_kvs[:Reduce_Function] = args[1]
136
+ report_kvs[:limit] = args[2][:limit] if args[2] and args[2].has_key?(:limit)
137
+ end
138
+
139
+ report_kvs[:New_Collection_Name] = args[0] if m == :rename
140
+
141
+ if m == :update
142
+ if args_length >= 3
143
+ report_kvs[:Update_Document] = args[1].try(:to_json)
144
+ report_kvs[:Multi] = args[2][:multi] if args[2] and args[2].has_key?(:multi)
145
+ end
146
+ end
147
+ rescue
148
+ logger.warn "[oboe/error] Problem processing mongo args (#{m})" if defined?(logger)
149
+ end
150
+
151
+ Oboe::API.trace('mongo', report_kvs) do
152
+ send("#{m}_without_oboe", *args)
153
+ end
154
+ end
155
+
156
+ class_eval "alias #{m}_without_oboe #{m}"
157
+ class_eval "alias #{m} #{m}_with_oboe"
158
+ end
159
+
160
+ # Instrument Collection query operations
161
+ Oboe::Inst::Mongo::COLL_QUERY_OPS.reject { |m| not method_defined?(m) }.each do |m|
162
+ define_method("#{m}_with_oboe") do |*args|
163
+ begin
164
+ report_kvs = oboe_collect(m, args)
165
+ args_length = args.length
166
+
167
+ if m == :distinct and args_length >= 2
168
+ report_kvs[:key] = args[0]
169
+ report_kvs[:Query] = args[1].try(:to_json) if args[1] and args[1].class == Hash
170
+ end
171
+
172
+ if m == :find and args_length > 0
173
+ report_kvs[:limit] = args[0][:limit] if !args[0].nil? and args[0].has_key?(:limit)
174
+ end
175
+
176
+ if m == :group
177
+ unless args.empty?
178
+ if args[0].is_a?(Hash)
179
+ report_kvs[:Group_Key] = args[0][:key].try(:to_json) if args[0].has_key?(:key)
180
+ report_kvs[:Group_Condition] = args[0][:cond].try(:to_json) if args[0].has_key?(:cond)
181
+ report_kvs[:Group_Initial] = args[0][:initial].try(:to_json) if args[0].has_key?(:initial)
182
+ report_kvs[:Group_Reduce] = args[0][:reduce] if args[0].has_key?(:reduce)
183
+ end
184
+ end
185
+ end
186
+ rescue
187
+ logger.warn "[oboe/error] Problem processing mongo args (#{m})" if defined?(logger)
188
+ end
189
+
190
+ Oboe::API.trace('mongo', report_kvs) do
191
+ send("#{m}_without_oboe", *args)
192
+ end
193
+ end
194
+
195
+ class_eval "alias #{m}_without_oboe #{m}"
196
+ class_eval "alias #{m} #{m}_with_oboe"
197
+ end
198
+
199
+ # Instrument Collection index operations
200
+ Oboe::Inst::Mongo::COLL_INDEX_OPS.reject { |m| not method_defined?(m) }.each do |m|
201
+ define_method("#{m}_with_oboe") do |*args|
202
+ report_kvs = oboe_collect(m, args)
203
+ _args = args || []
204
+
205
+ begin
206
+ if [:create_index, :ensure_index, :drop_index].include? m and not _args.empty?
207
+ report_kvs[:Index] = _args[0].try(:to_json)
208
+ end
209
+ rescue
210
+ logger.warn "[oboe/error] Problem processing mongo args (#{m})" if defined?(logger)
211
+ end
212
+
213
+ Oboe::API.trace('mongo', report_kvs) do
214
+ send("#{m}_without_oboe", *args)
215
+ end
216
+ end
217
+
218
+ class_eval "alias #{m}_without_oboe #{m}"
219
+ class_eval "alias #{m} #{m}_with_oboe"
220
+ end
221
+ end
222
+ end
223
+ puts "[oboe/loading] Instrumenting mongo" if Oboe::Config[:verbose]
224
+ end
225
+
@@ -2,7 +2,7 @@ module Oboe
2
2
  module Version
3
3
  MAJOR = 1
4
4
  MINOR = 3
5
- PATCH = 3
5
+ PATCH = 4
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oboe
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -31,6 +31,7 @@ files:
31
31
  - lib/oboe/version.rb
32
32
  - lib/oboe/config.rb
33
33
  - lib/oboe/frameworks/rails/inst/memcache.rb
34
+ - lib/oboe/frameworks/rails/inst/mongo.rb
34
35
  - lib/oboe/frameworks/rails/inst/http.rb
35
36
  - lib/oboe/frameworks/rails/inst/rack.rb
36
37
  - lib/oboe/frameworks/rails/inst/action_controller.rb