oboe 2.3.2 → 2.3.3.7

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.
data/lib/oboe.rb CHANGED
@@ -5,16 +5,25 @@ begin
5
5
  require 'oboe/version'
6
6
  require 'oboe/logger'
7
7
  require 'oboe/util'
8
+ require 'base.rb'
8
9
 
9
10
  # If Oboe_metal is already defined then we are in a PaaS environment
10
11
  # with an alternate metal (such as Heroku: see the oboe-heroku gem)
11
12
  unless defined?(Oboe_metal)
12
- if RUBY_PLATFORM == 'java'
13
- require '/usr/local/tracelytics/tracelyticsagent.jar'
14
- require 'joboe_metal'
15
- else
16
- require 'oboe_metal.so'
17
- require 'oboe_metal'
13
+ begin
14
+ if RUBY_PLATFORM == 'java'
15
+ require 'joboe_metal'
16
+ require '/usr/local/tracelytics/tracelyticsagent.jar'
17
+ else
18
+ require 'oboe_metal'
19
+ require 'oboe_metal.so'
20
+ end
21
+ rescue LoadError
22
+ Oboe.loaded = false
23
+ $stderr.puts "=============================================================="
24
+ $stderr.puts "Missing TraceView libraries. Tracing disabled."
25
+ $stderr.puts "See: https://support.tv.appneta.com/solution/articles/137973"
26
+ $stderr.puts "=============================================================="
18
27
  end
19
28
  end
20
29
 
@@ -25,14 +34,10 @@ begin
25
34
  require 'oboe/ruby'
26
35
 
27
36
  # Frameworks
28
- require 'oboe/frameworks/rails' if defined?(::Rails)
37
+ require 'oboe/frameworks/rails' if defined?(::Rails) and Oboe.loaded
29
38
 
30
- rescue LoadError
31
- $stderr.puts "=============================================================="
32
- $stderr.puts "Missing TraceView libraries. Tracing disabled."
33
- $stderr.puts "See: https://support.tv.appneta.com/solution/articles/137973"
34
- $stderr.puts "=============================================================="
35
39
  rescue Exception => e
36
40
  $stderr.puts "[oboe/error] Problem loading: #{e.inspect}"
37
41
  $stderr.puts e.backtrace
38
42
  end
43
+
data/lib/oboe/api/util.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
+ require 'pp'
5
+
4
6
  module Oboe
5
7
  module API
6
8
  module Util
@@ -66,6 +68,50 @@ module Oboe
66
68
 
67
69
  false
68
70
  end
71
+
72
+ # Internal: Pretty print a list of arguments for reporting
73
+ #
74
+ # args - the list of arguments to work on
75
+ #
76
+ # Returns a pretty string representation of arguments
77
+ def pps(*args)
78
+ old_out = $stdout
79
+ begin
80
+ s = StringIO.new
81
+ $stdout = s
82
+ pp(*args)
83
+ ensure
84
+ $stdout = old_out
85
+ end
86
+ s.string
87
+ end
88
+
89
+ # Internal: Determine a string to report representing klass
90
+ #
91
+ # args - an instance of a Class, a Class or a Module
92
+ #
93
+ # Returns a string representation of klass
94
+ def get_class_name(klass)
95
+ kv = {}
96
+ if klass.to_s =~ /::/
97
+ klass.class.to_s.rpartition('::').last
98
+ else
99
+ if klass.is_a?(Class) and klass.is_a?(Module)
100
+ # Class
101
+ kv["Class"] = klass.to_s
102
+
103
+ elsif (not klass.is_a?(Class) and not klass.is_a?(Module))
104
+ # Class instance
105
+ kv["Class"] = klass.class.to_s
106
+
107
+ else
108
+ # Module
109
+ kv["Module"] = klass.to_s
110
+ end
111
+ end
112
+ kv
113
+ end
114
+
69
115
  end
70
116
  end
71
117
  end
data/lib/oboe/config.rb CHANGED
@@ -107,24 +107,13 @@ module Oboe
107
107
 
108
108
  # Assure value is an integer
109
109
  @@config[key.to_sym] = value.to_i
110
-
111
- # Update liboboe with the new SampleRate value
112
- Oboe::Context.setDefaultSampleRate(value.to_i)
110
+
111
+ Oboe.set_sample_rate(value)
113
112
  end
114
113
 
115
114
  # Update liboboe if updating :tracing_mode
116
115
  if key == :tracing_mode
117
- case value.downcase
118
- when 'never'
119
- # OBOE_TRACE_NEVER
120
- Oboe::Context.setTracingMode(0)
121
- when 'always'
122
- # OBOE_TRACE_ALWAYS
123
- Oboe::Context.setTracingMode(1)
124
- else
125
- # OBOE_TRACE_THROUGH
126
- Oboe::Context.setTracingMode(2)
127
- end
116
+ Oboe.set_tracing_mode(value)
128
117
  end
129
118
  end
130
119
 
@@ -10,7 +10,7 @@ module Oboe
10
10
  begin
11
11
  report_kvs[:Op] = op.to_s
12
12
  report_kvs[:Cf] = column_family.to_s if column_family
13
- report_kvs[:Key] = keys.to_s if keys
13
+ report_kvs[:Key] = keys.inspect if keys
14
14
 
15
15
  # Open issue - how to handle multiple Cassandra servers
16
16
  report_kvs[:RemoteHost], report_kvs[:RemotePort] = @servers.first.split(":")
@@ -135,7 +135,7 @@ if defined?(::Mongo) and Oboe::Config[:mongo][:enabled]
135
135
 
136
136
  begin
137
137
  if m == :find_and_modify and args[0] and args[0].has_key?(:update)
138
- report_kvs[:Update_Document] = args[0][:update]
138
+ report_kvs[:Update_Document] = args[0][:update].inspect
139
139
  end
140
140
 
141
141
  if m == :map_reduce
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2013 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
+ require 'uri'
5
+
4
6
  module Oboe
5
7
  class Rack
6
8
  attr_reader :app
@@ -14,28 +16,31 @@ module Oboe
14
16
 
15
17
  begin
16
18
  req = ::Rack::Request.new(env)
19
+
17
20
  report_kvs[:SampleRate] = Oboe::Config[:sample_rate]
18
21
  report_kvs[:SampleSource] = Oboe::Config[:sample_source]
19
22
  report_kvs['HTTP-Host'] = req.host
20
23
  report_kvs['Port'] = req.port
21
24
  report_kvs['Proto'] = req.scheme
22
- report_kvs['Query-String'] = req.query_string unless req.query_string.empty?
23
- report_kvs[:URL] = req.path
25
+ report_kvs['Query-String'] = URI.unescape(req.query_string) unless req.query_string.empty?
26
+ report_kvs[:URL] = URI.unescape(req.path)
24
27
  report_kvs[:Method] = req.request_method
25
28
  report_kvs['AJAX'] = true if req.xhr?
26
29
  report_kvs['ClientIP'] = req.ip
27
30
 
28
- report_kvs['X-TV-Meta'] = env['HTTP_X_TV_META'] if env.has_key?('HTTP_X_TV_META')
31
+ report_kvs['X-TV-Meta'] = env['HTTP_X_TV_META'] if env.has_key?('HTTP_X_TV_META')
29
32
 
30
33
  # Report any request queue'ing headers. Report as 'Request-Start' or the summed Queue-Time
31
- report_kvs['Request-Start'] = env['HTTP_X_REQUEST_START'] if env.has_key?('HTTP_X_REQUEST_START')
32
- report_kvs['Request-Start'] = env['HTTP_X_QUEUE_START'] if env.has_key?('HTTP_X_QUEUE_START')
33
- report_kvs['Queue-Time'] = env['HTTP_X_QUEUE_TIME'] if env.has_key?('HTTP_X_QUEUE_TIME')
34
-
35
- report_kvs['Forwarded-For'] = env['HTTP_X_FORWARDED_FOR'] if env.has_key?('HTTP_X_FORWARDED_FOR')
36
- report_kvs['Forwarded-Host'] = env['HTTP_X_FORWARDED_HOST'] if env.has_key?('HTTP_X_FORWARDED_HOST')
37
- report_kvs['Forwarded-Proto'] = env['HTTP_X_FORWARDED_PROTO'] if env.has_key?('HTTP_X_FORWARDED_PROTO')
38
- report_kvs['Forwarded-Port'] = env['HTTP_X_FORWARDED_PORT'] if env.has_key?('HTTP_X_FORWARDED_PORT')
34
+ report_kvs['Request-Start'] = env['HTTP_X_REQUEST_START'] if env.has_key?('HTTP_X_REQUEST_START')
35
+ report_kvs['Request-Start'] = env['HTTP_X_QUEUE_START'] if env.has_key?('HTTP_X_QUEUE_START')
36
+ report_kvs['Queue-Time'] = env['HTTP_X_QUEUE_TIME'] if env.has_key?('HTTP_X_QUEUE_TIME')
37
+
38
+ report_kvs['Forwarded-For'] = env['HTTP_X_FORWARDED_FOR'] if env.has_key?('HTTP_X_FORWARDED_FOR')
39
+ report_kvs['Forwarded-Host'] = env['HTTP_X_FORWARDED_HOST'] if env.has_key?('HTTP_X_FORWARDED_HOST')
40
+ report_kvs['Forwarded-Proto'] = env['HTTP_X_FORWARDED_PROTO'] if env.has_key?('HTTP_X_FORWARDED_PROTO')
41
+ report_kvs['Forwarded-Port'] = env['HTTP_X_FORWARDED_PORT'] if env.has_key?('HTTP_X_FORWARDED_PORT')
42
+
43
+ report_kvs['Ruby.Oboe.Version'] = ::Oboe::Version::STRING
39
44
  rescue Exception => e
40
45
  # Discard any potential exceptions. Debug log and report whatever we can.
41
46
  Oboe.logger.debug "[oboe/debug] Rack KV collection error: #{e.inspect}"
@@ -40,7 +40,7 @@ module Oboe
40
40
  if Oboe.tracing?
41
41
  report_kvs = extract_trace_details(:enqueue, klass, args)
42
42
 
43
- Oboe::API.trace('resque', report_kvs, :enqueue) do
43
+ Oboe::API.trace('resque-client', report_kvs, :enqueue) do
44
44
  args.push({:parent_trace_id => Oboe::Context.toString}) if Oboe::Config[:resque][:link_workers]
45
45
  enqueue_without_oboe(klass, *args)
46
46
  end
@@ -54,7 +54,7 @@ module Oboe
54
54
  report_kvs = extract_trace_details(:enqueue_to, klass, args)
55
55
  report_kvs[:Queue] = queue.to_s if queue
56
56
 
57
- Oboe::API.trace('resque', report_kvs) do
57
+ Oboe::API.trace('resque-client', report_kvs) do
58
58
  args.push({:parent_trace_id => Oboe::Context.toString}) if Oboe::Config[:resque][:link_workers]
59
59
  enqueue_to_without_oboe(queue, klass, *args)
60
60
  end
@@ -67,7 +67,7 @@ module Oboe
67
67
  if Oboe.tracing?
68
68
  report_kvs = extract_trace_details(:dequeue, klass, args)
69
69
 
70
- Oboe::API.trace('resque', report_kvs) do
70
+ Oboe::API.trace('resque-client', report_kvs) do
71
71
  dequeue_without_oboe(klass, *args)
72
72
  end
73
73
  else
@@ -123,12 +123,12 @@ module Oboe
123
123
 
124
124
  # Force this trace regardless of sampling rate so that child trace can be
125
125
  # link to parent trace.
126
- Oboe::API.start_trace('resque', nil, report_kvs.merge('Force' => true)) do
126
+ Oboe::API.start_trace('resque-worker', nil, report_kvs.merge('Force' => true)) do
127
127
  perform_without_oboe(job)
128
128
  end
129
129
 
130
130
  else
131
- Oboe::API.start_trace('resque', nil, report_kvs) do
131
+ Oboe::API.start_trace('resque-worker', nil, report_kvs) do
132
132
  perform_without_oboe(job)
133
133
  end
134
134
  end
data/lib/oboe/version.rb CHANGED
@@ -5,8 +5,8 @@ module Oboe
5
5
  module Version
6
6
  MAJOR = 2
7
7
  MINOR = 3
8
- PATCH = 2
9
- BUILD = nil
8
+ PATCH = 3
9
+ BUILD = 7
10
10
 
11
11
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
12
12
  end
data/lib/oboe_metal.rb CHANGED
@@ -2,16 +2,10 @@
2
2
  # All rights reserved.
3
3
 
4
4
  module Oboe_metal
5
- class Event
6
- def self.metadataString(evt)
7
- evt.metadataString()
8
- end
9
- end
10
-
11
5
  class Context
12
6
  class << self
13
7
  attr_accessor :layer_op
14
-
8
+
15
9
  def log(layer, label, options = {}, with_backtrace = false)
16
10
  evt = Oboe::Context.createEvent()
17
11
  evt.addInfo("Layer", layer.to_s)
@@ -25,7 +19,7 @@ module Oboe_metal
25
19
 
26
20
  Oboe.reporter.sendReport(evt)
27
21
  end
28
-
22
+
29
23
  def tracing_layer_op?(operation)
30
24
  if operation.is_a?(Array)
31
25
  return operation.include?(@layer_op)
@@ -35,22 +29,30 @@ module Oboe_metal
35
29
  end
36
30
  end
37
31
  end
38
-
39
- module Reporter
32
+
33
+ class Event
34
+ def self.metadataString(evt)
35
+ evt.metadataString()
36
+ end
37
+ end
38
+
39
+ class Reporter
40
40
  ##
41
41
  # Initialize the Oboe Context, reporter and report the initialization
42
42
  #
43
43
  def self.start
44
+ return unless Oboe.loaded
45
+
44
46
  begin
45
47
  Oboe_metal::Context.init()
46
48
 
47
49
  if ENV['RACK_ENV'] == "test"
48
- Oboe.reporter = Oboe::FileReporter.new("./tmp/trace_output.bson")
50
+ Oboe.reporter = Oboe::FileReporter.new("/tmp/trace_output.bson")
49
51
  else
50
52
  Oboe.reporter = Oboe::UdpReporter.new(Oboe::Config[:reporter_host])
51
53
  end
52
54
 
53
- Oboe::API.report_init('ruby') unless ["development", "test"].include? ENV['RACK_ENV']
55
+ Oboe::API.report_init('rack') unless ["development", "test"].include? ENV['RACK_ENV']
54
56
 
55
57
  rescue Exception => e
56
58
  $stderr.puts e.message
@@ -64,28 +66,11 @@ module Oboe_metal
64
66
  end
65
67
  end
66
68
 
67
- module Oboe
69
+ module Oboe
70
+ extend OboeBase
68
71
  include Oboe_metal
69
72
 
70
73
  class << self
71
- attr_accessor :reporter
72
-
73
- def always?
74
- Oboe::Config[:tracing_mode].to_s == "always"
75
- end
76
-
77
- def log(layer, label, options = {})
78
- Context.log(layer, label, options = options)
79
- end
80
-
81
- def never?
82
- Oboe::Config[:tracing_mode].to_s == "never"
83
- end
84
-
85
- def passthrough?
86
- ["always", "through"].include?(Oboe::Config[:tracing_mode])
87
- end
88
-
89
74
  def sample?(opts = {})
90
75
  # Assure defaults since SWIG enforces Strings
91
76
  opts[:layer] ||= ''
@@ -94,14 +79,36 @@ module Oboe
94
79
  Oboe::Context.sampleRequest(opts[:layer], opts[:xtrace], opts['X-TV-Meta'])
95
80
  end
96
81
 
97
- def through?
98
- Oboe::Config[:tracing_mode] == "through"
82
+ def set_tracing_mode(mode)
83
+ return unless Oboe.loaded
84
+
85
+ value = mode.to_sym
86
+
87
+ case value
88
+ when :never
89
+ # OBOE_TRACE_NEVER
90
+ Oboe::Context.setTracingMode(0)
91
+ when :always
92
+ # OBOE_TRACE_ALWAYS
93
+ Oboe::Context.setTracingMode(1)
94
+ when :through
95
+ # OBOE_TRACE_THROUGH
96
+ Oboe::Context.setTracingMode(2)
97
+ else
98
+ Oboe.logger.fatal "[oboe/error] Invalid tracing mode set: #{mode}"
99
+ # OBOE_TRACE_THROUGH
100
+ Oboe::Context.setTracingMode(2)
101
+ end
99
102
  end
100
-
101
- def tracing?
102
- Oboe::Context.isValid and not Oboe.never?
103
+
104
+ def set_sample_rate(rate)
105
+ if Oboe.loaded
106
+ # Update liboboe with the new SampleRate value
107
+ Oboe::Context.setDefaultSampleRate(rate.to_i)
108
+ end
103
109
  end
104
110
  end
105
111
  end
106
112
 
113
+ Oboe.loaded = true
107
114
 
@@ -4,11 +4,29 @@ describe Oboe::Inst::Cassandra do
4
4
  before do
5
5
  clear_all_traces
6
6
 
7
- @client = Cassandra.new('TRCassInstr', '127.0.0.1:9160',
8
- :retries => 2, :connect_timeout => 1,
9
- :timeout => 5)
7
+ @client = Cassandra.new("system", "127.0.0.1:9160", { :timeout => 10 })
10
8
  @client.disable_node_auto_discovery!
11
9
 
10
+ @ks_name = "AppNetaCassandraTest"
11
+
12
+ ks_def = CassandraThrift::KsDef.new(:name => @ks_name,
13
+ :strategy_class => "SimpleStrategy",
14
+ :strategy_options => { 'replication_factor' => '2' },
15
+ :cf_defs => [])
16
+
17
+ @client.add_keyspace(ks_def) unless @client.keyspaces.include? @ks_name
18
+ @client.keyspace = @ks_name
19
+
20
+ unless @client.column_families.include? "Users"
21
+ cf_def = CassandraThrift::CfDef.new(:keyspace => @ks_name, :name => "Users")
22
+ @client.add_column_family(cf_def)
23
+ end
24
+
25
+ unless @client.column_families.include? "Statuses"
26
+ cf_def = CassandraThrift::CfDef.new(:keyspace => @ks_name, :name => "Statuses")
27
+ @client.add_column_family(cf_def)
28
+ end
29
+
12
30
  # These are standard entry/exit KVs that are passed up with all mongo operations
13
31
  @entry_kvs = {
14
32
  'Layer' => 'cassandra',
@@ -54,7 +72,7 @@ describe Oboe::Inst::Cassandra do
54
72
  validate_event_keys(traces[1], @entry_kvs)
55
73
  traces[1]['Op'].must_equal "insert"
56
74
  traces[1]['Cf'].must_equal "Users"
57
- traces[1]['Key'].must_equal "5"
75
+ traces[1]['Key'].must_equal "\"5\""
58
76
  traces[1]['Consistency'].must_equal "1"
59
77
  traces[1]['Ttl'].must_equal "600"
60
78
  traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
@@ -74,7 +92,7 @@ describe Oboe::Inst::Cassandra do
74
92
  validate_event_keys(traces[1], @entry_kvs)
75
93
  traces[1]['Op'].must_equal "remove"
76
94
  traces[1]['Cf'].must_equal "Users"
77
- traces[1]['Key'].must_equal "5"
95
+ traces[1]['Key'].must_equal "\"5\""
78
96
  traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
79
97
  validate_event_keys(traces[2], @exit_kvs)
80
98
  end
@@ -94,7 +112,7 @@ describe Oboe::Inst::Cassandra do
94
112
  validate_event_keys(traces[1], @entry_kvs)
95
113
  traces[1]['Op'].must_equal "count_columns"
96
114
  traces[1]['Cf'].must_equal "Statuses"
97
- traces[1]['Key'].must_equal "12"
115
+ traces[1]['Key'].must_equal "\"12\""
98
116
  traces[1]['Count'].must_equal "50"
99
117
  traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
100
118
  validate_event_keys(traces[2], @exit_kvs)
@@ -113,7 +131,7 @@ describe Oboe::Inst::Cassandra do
113
131
  validate_event_keys(traces[1], @entry_kvs)
114
132
  traces[1]['Op'].must_equal "get_columns"
115
133
  traces[1]['Cf'].must_equal "Statuses"
116
- traces[1]['Key'].must_equal "12"
134
+ traces[1]['Key'].must_equal "\"12\""
117
135
  traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
118
136
  validate_event_keys(traces[2], @exit_kvs)
119
137
  end
@@ -149,7 +167,7 @@ describe Oboe::Inst::Cassandra do
149
167
  validate_event_keys(traces[1], @entry_kvs)
150
168
  traces[1]['Op'].must_equal "get"
151
169
  traces[1]['Cf'].must_equal "Statuses"
152
- traces[1]['Key'].must_equal "12"
170
+ traces[1]['Key'].must_equal "\"12\""
153
171
  traces[1]['Reversed'].must_equal "true"
154
172
  traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
155
173
  validate_event_keys(traces[2], @exit_kvs)
@@ -169,13 +187,13 @@ describe Oboe::Inst::Cassandra do
169
187
  validate_event_keys(traces[1], @entry_kvs)
170
188
  traces[1]['Op'].must_equal "exists?"
171
189
  traces[1]['Cf'].must_equal "Statuses"
172
- traces[1]['Key'].must_equal "12"
190
+ traces[1]['Key'].must_equal "\"12\""
173
191
  traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
174
192
  validate_event_keys(traces[2], @exit_kvs)
175
193
 
176
194
  traces[3]['Op'].must_equal "exists?"
177
195
  traces[3]['Cf'].must_equal "Statuses"
178
- traces[3]['Key'].must_equal "12"
196
+ traces[3]['Key'].must_equal "\"12\""
179
197
  traces[3].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
180
198
  end
181
199
 
@@ -196,37 +214,53 @@ describe Oboe::Inst::Cassandra do
196
214
  validate_event_keys(traces[2], @exit_kvs)
197
215
  end
198
216
 
199
- it 'should trace create_index and drop_index' do
217
+ it 'should trace create_index' do
200
218
  Oboe::API.start_trace('cassandra_test', '', {}) do
201
- @client.create_index('TRCassInstr', 'Statuses', 'x', 'LongType')
202
- @client.drop_index('TRCassInstr', 'Statuses', 'x')
219
+ @client.create_index(@ks_name, 'Statuses', 'column_name', 'LongType')
203
220
  end
204
-
221
+
205
222
  traces = get_all_traces
206
223
 
207
- traces.count.must_equal 6
224
+ traces.count.must_equal 4
208
225
  validate_outer_layers(traces, 'cassandra_test')
209
226
 
210
227
  validate_event_keys(traces[1], @entry_kvs)
211
228
  traces[1]['Op'].must_equal "create_index"
212
229
  traces[1]['Cf'].must_equal "Statuses"
213
- traces[1]['Keyspace'].must_equal "TRCassInstr"
214
- traces[1]['Column_name'].must_equal "x"
230
+ traces[1]['Keyspace'].must_equal @ks_name
231
+ traces[1]['Column_name'].must_equal "column_name"
215
232
  traces[1]['Validation_class'].must_equal "LongType"
216
233
  traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
217
234
  validate_event_keys(traces[2], @exit_kvs)
218
235
 
219
- validate_event_keys(traces[3], @entry_kvs)
220
- traces[3]['Op'].must_equal "drop_index"
221
- traces[3]['Cf'].must_equal "Statuses"
222
- traces[3]['Keyspace'].must_equal "TRCassInstr"
223
- traces[3]['Column_name'].must_equal "x"
224
- traces[3].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
225
- validate_event_keys(traces[4], @exit_kvs)
236
+ # Clean up
237
+ @client.drop_index(@ks_name, 'Statuses', 'column_name')
238
+ end
239
+
240
+ it 'should trace drop_index' do
241
+ # Prep
242
+ @client.create_index(@ks_name, 'Statuses', 'column_name', 'LongType')
243
+
244
+ Oboe::API.start_trace('cassandra_test', '', {}) do
245
+ @client.drop_index(@ks_name, 'Statuses', 'column_name')
246
+ end
247
+
248
+ traces = get_all_traces
249
+
250
+ traces.count.must_equal 4
251
+ validate_outer_layers(traces, 'cassandra_test')
252
+
253
+ validate_event_keys(traces[1], @entry_kvs)
254
+ traces[1]['Op'].must_equal "drop_index"
255
+ traces[1]['Cf'].must_equal "Statuses"
256
+ traces[1]['Keyspace'].must_equal @ks_name
257
+ traces[1]['Column_name'].must_equal "column_name"
258
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
259
+ validate_event_keys(traces[2], @exit_kvs)
226
260
  end
227
261
 
228
262
  it 'should trace get_indexed_slices' do
229
- @client.create_index('TRCassInstr', 'Statuses', 'x', 'LongType')
263
+ @client.create_index(@ks_name, 'Statuses', 'x', 'LongType')
230
264
  Oboe::API.start_trace('cassandra_test', '', {}) do
231
265
  expressions = [
232
266
  { :column_name => 'x',
@@ -252,7 +286,7 @@ describe Oboe::Inst::Cassandra do
252
286
 
253
287
  it 'should trace add and remove of column family' do
254
288
  cf_name = (0...10).map{ ('a'..'z').to_a[rand(26)] }.join
255
- cf_def = CassandraThrift::CfDef.new(:keyspace => "TRCassInstr", :name => cf_name)
289
+ cf_def = CassandraThrift::CfDef.new(:keyspace => @ks_name, :name => cf_name)
256
290
 
257
291
  Oboe::API.start_trace('cassandra_test', '', {}) do
258
292
  @client.add_column_family(cf_def)
@@ -274,23 +308,22 @@ describe Oboe::Inst::Cassandra do
274
308
  traces[3].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
275
309
  end
276
310
 
277
- it 'should trace add and remove of keyspace' do
311
+ it 'should trace adding a keyspace' do
278
312
  ks_name = (0...10).map{ ('a'..'z').to_a[rand(26)] }.join
279
313
  column_families = [{:name =>"a"}, {:name => "b", :type => :super}]
280
314
  ks_def = CassandraThrift::KsDef.new(:name => ks_name,
281
315
  :strategy_class => "org.apache.cassandra.locator.SimpleStrategy",
282
- :replication_factor => 1,
316
+ :strategy_options => { 'replication_factor' => '2' },
283
317
  :cf_defs => [])
284
318
 
285
319
  Oboe::API.start_trace('cassandra_test', '', {}) do
286
320
  @client.add_keyspace(ks_def)
287
321
  @client.keyspace = ks_name
288
- @client.drop_keyspace(ks_name)
289
322
  end
290
323
 
291
324
  traces = get_all_traces
292
325
 
293
- traces.count.must_equal 6
326
+ traces.count.must_equal 4
294
327
  validate_outer_layers(traces, 'cassandra_test')
295
328
 
296
329
  validate_event_keys(traces[1], @entry_kvs)
@@ -298,10 +331,23 @@ describe Oboe::Inst::Cassandra do
298
331
  traces[1]['Name'].must_equal ks_name
299
332
  traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
300
333
  validate_event_keys(traces[2], @exit_kvs)
334
+ end
335
+
336
+ it 'should trace the removal of a keyspace' do
337
+ Oboe::API.start_trace('cassandra_test', '', {}) do
338
+ @client.drop_keyspace(@ks_name)
339
+ end
301
340
 
302
- traces[3]['Op'].must_equal "drop_keyspace"
303
- traces[3]['Name'].must_equal ks_name
304
- traces[3].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
341
+ traces = get_all_traces
342
+
343
+ traces.count.must_equal 4
344
+ validate_outer_layers(traces, 'cassandra_test')
345
+
346
+ validate_event_keys(traces[1], @entry_kvs)
347
+ traces[1]['Op'].must_equal "drop_keyspace"
348
+ traces[1]['Name'].must_equal @ks_name
349
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
350
+ validate_event_keys(traces[2], @exit_kvs)
305
351
  end
306
352
 
307
353
  it "should obey :collect_backtraces setting when true" do