oboe 2.3.3.7 → 2.3.4.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.
- data/.travis.yml +5 -3
- data/CHANGELOG +5 -1
- data/Gemfile +8 -2
- data/lib/oboe.rb +1 -0
- data/lib/oboe/inst/http.rb +24 -7
- data/lib/oboe/version.rb +2 -2
- data/lib/oboe/xtrace.rb +52 -0
- data/test/instrumentation/cassandra_test.rb +339 -330
- data/test/instrumentation/http_test.rb +24 -1
- data/test/instrumentation/mongo_test.rb +1 -1
- data/test/support/xtrace_test.rb +35 -0
- metadata +89 -67
- checksums.yaml +0 -7
data/.travis.yml
CHANGED
@@ -8,15 +8,17 @@ rvm:
|
|
8
8
|
|
9
9
|
# Attempt Travis/Cassandra fix re: https://github.com/travis-ci/travis-ci/issues/1484
|
10
10
|
before_install:
|
11
|
-
- echo "
|
12
|
-
- sudo
|
11
|
+
# - sudo sh -c "echo 'JVM_OPTS=\"\${JVM_OPTS} -Djava.net.preferIPv4Stack=false\"' >> /usr/local/cassandra/conf/cassandra-env.sh"
|
12
|
+
# - echo "127.0.0.1 " `hostname` | sudo tee /etc/hosts
|
13
|
+
# - sudo service cassandra start
|
14
|
+
# - sleep 5
|
13
15
|
|
14
16
|
install:
|
15
17
|
- wget https://www.tracelytics.com/install_tracelytics.sh
|
16
18
|
- sudo sh ./install_tracelytics.sh f51e2a43-0ee5-4851-8a54-825773b3218e
|
17
19
|
|
18
20
|
before_script:
|
19
|
-
- bundle install
|
21
|
+
- bundle install --without development
|
20
22
|
- bundle exec rake compile
|
21
23
|
|
22
24
|
services:
|
data/CHANGELOG
CHANGED
data/Gemfile
CHANGED
@@ -4,13 +4,19 @@ source 'https://rubygems.org'
|
|
4
4
|
gemspec :name => 'oboe'
|
5
5
|
|
6
6
|
gem 'rake'
|
7
|
-
gem 'appraisal'
|
8
7
|
|
9
8
|
group :development, :test do
|
10
9
|
gem 'minitest'
|
11
10
|
gem 'minitest-reporters'
|
12
|
-
gem 'debugger' unless (RUBY_VERSION =~ /^1.8/) == 0
|
13
11
|
gem 'rack-test'
|
12
|
+
gem 'appraisal'
|
13
|
+
end
|
14
|
+
|
15
|
+
group :development do
|
16
|
+
gem 'ruby-debug', :platform => :mri_18
|
17
|
+
gem 'ruby-debug19', :platform => :mri_19, :require => 'ruby-debug'
|
18
|
+
gem 'debugger', :platform => :mri_20
|
19
|
+
gem 'perftools.rb', :platform => :mri, :require => 'perftools'
|
14
20
|
end
|
15
21
|
|
16
22
|
# Instrumented gems
|
data/lib/oboe.rb
CHANGED
data/lib/oboe/inst/http.rb
CHANGED
@@ -16,6 +16,10 @@ if Oboe::Config[:nethttp][:enabled]
|
|
16
16
|
|
17
17
|
Oboe::API.trace('net-http') do
|
18
18
|
opts = {}
|
19
|
+
context = Oboe::Context.toString()
|
20
|
+
task_id = Oboe::XTrace.task_id(context)
|
21
|
+
|
22
|
+
# Collect KVs to report in the info event
|
19
23
|
if args.length and args[0]
|
20
24
|
req = args[0]
|
21
25
|
|
@@ -26,21 +30,34 @@ if Oboe::Config[:nethttp][:enabled]
|
|
26
30
|
opts['HTTPMethod'] = req.method
|
27
31
|
opts['Blacklisted'] = true if blacklisted
|
28
32
|
opts['Backtrace'] = Oboe::API.backtrace if Oboe::Config[:nethttp][:collect_backtraces]
|
29
|
-
|
30
|
-
req['X-Trace'] =
|
33
|
+
|
34
|
+
req['X-Trace'] = context unless blacklisted
|
31
35
|
end
|
32
36
|
|
37
|
+
# The actual net::http call
|
33
38
|
resp = request_without_oboe(*args, &block)
|
34
39
|
|
35
|
-
|
36
|
-
Oboe::API.log('net-http', 'info', opts)
|
37
|
-
|
40
|
+
# Re-attach net::http edge unless blacklisted and is a valid X-Trace ID
|
38
41
|
unless blacklisted
|
39
42
|
xtrace = resp.get_fields('X-Trace')
|
40
|
-
|
41
|
-
|
43
|
+
xtrace = xtrace[0] if xtrace and xtrace.is_a?(Array)
|
44
|
+
|
45
|
+
if Oboe::XTrace.valid?(xtrace) and Oboe.tracing?
|
46
|
+
|
47
|
+
# Assure that we received back a valid X-Trace with the same task_id
|
48
|
+
if task_id == Oboe::XTrace.task_id(xtrace)
|
49
|
+
Oboe::Context.fromString(xtrace)
|
50
|
+
else
|
51
|
+
Oboe.logger.debug "Mismatched returned X-Trace ID : #{xtrace}"
|
52
|
+
end
|
42
53
|
end
|
43
54
|
end
|
55
|
+
|
56
|
+
opts['HTTPStatus'] = resp.code
|
57
|
+
|
58
|
+
# Log the info event with the KVs in opts
|
59
|
+
Oboe::API.log('net-http', 'info', opts)
|
60
|
+
|
44
61
|
next resp
|
45
62
|
end
|
46
63
|
end
|
data/lib/oboe/version.rb
CHANGED
data/lib/oboe/xtrace.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Copyright (c) 2013 AppNeta, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
module Oboe
|
5
|
+
module XTrace
|
6
|
+
class << self
|
7
|
+
|
8
|
+
##
|
9
|
+
# Oboe::XTrace.valid?
|
10
|
+
#
|
11
|
+
# Perform basic validation on a potential X-Trace ID
|
12
|
+
#
|
13
|
+
def valid?(xtrace)
|
14
|
+
begin
|
15
|
+
xtrace = xtrace.to_s
|
16
|
+
valid = true
|
17
|
+
|
18
|
+
# Valid X-Trace IDs have a length of 58 bytes and start with '1b'
|
19
|
+
valid = false unless xtrace.length == 58 and (xtrace =~ /^1b/i) == 0
|
20
|
+
|
21
|
+
# The X-Trace ID shouldn't be an initialized empty ID
|
22
|
+
valid = false if (xtrace =~ /^1b0000000/i) == 0
|
23
|
+
|
24
|
+
valid
|
25
|
+
rescue StandardError => e
|
26
|
+
Oboe.logger.debug e.message
|
27
|
+
Oboe.logger.debug e.backtrace
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Oboe::XTrace.task_id
|
34
|
+
#
|
35
|
+
# Extract and return the task_id portion of an X-Trace ID
|
36
|
+
#
|
37
|
+
def task_id(xtrace)
|
38
|
+
begin
|
39
|
+
return nil unless Oboe::XTrace.valid?(xtrace)
|
40
|
+
|
41
|
+
xtrace[2..41]
|
42
|
+
rescue StandardError => e
|
43
|
+
Oboe.logger.debug e.message
|
44
|
+
Oboe.logger.debug e.backtrace
|
45
|
+
return nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -1,377 +1,386 @@
|
|
1
1
|
require 'minitest_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
# Disable Cassandra tests until TravisCI issues are cleared up.
|
4
|
+
# https://github.com/travis-ci/travis-ci/issues/1053
|
5
|
+
# https://github.com/travis-ci/travis-ci/issues/840
|
6
|
+
# https://github.com/travis-ci/travis-ci/issues/1203
|
7
|
+
# https://github.com/travis-ci/travis-ci/issues/1053
|
8
|
+
if false
|
6
9
|
|
7
|
-
|
8
|
-
|
10
|
+
describe Oboe::Inst::Cassandra do
|
11
|
+
before do
|
12
|
+
clear_all_traces
|
9
13
|
|
10
|
-
|
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
|
-
|
30
|
-
# These are standard entry/exit KVs that are passed up with all mongo operations
|
31
|
-
@entry_kvs = {
|
32
|
-
'Layer' => 'cassandra',
|
33
|
-
'Label' => 'entry',
|
34
|
-
'RemoteHost' => '127.0.0.1',
|
35
|
-
'RemotePort' => '9160' }
|
36
|
-
|
37
|
-
@exit_kvs = { 'Layer' => 'cassandra', 'Label' => 'exit' }
|
38
|
-
@collect_backtraces = Oboe::Config[:cassandra][:collect_backtraces]
|
39
|
-
end
|
40
|
-
|
41
|
-
after do
|
42
|
-
Oboe::Config[:cassandra][:collect_backtraces] = @collect_backtraces
|
43
|
-
@client.disconnect!
|
44
|
-
end
|
14
|
+
@client = Cassandra.new("system", "127.0.0.1:9160", { :timeout => 10 })
|
15
|
+
@client.disable_node_auto_discovery!
|
45
16
|
|
46
|
-
|
47
|
-
|
48
|
-
|
17
|
+
@ks_name = "AppNetaCassandraTest"
|
18
|
+
|
19
|
+
ks_def = CassandraThrift::KsDef.new(:name => @ks_name,
|
20
|
+
:strategy_class => "SimpleStrategy",
|
21
|
+
:strategy_options => { 'replication_factor' => '2' },
|
22
|
+
:cf_defs => [])
|
23
|
+
|
24
|
+
@client.add_keyspace(ks_def) unless @client.keyspaces.include? @ks_name
|
25
|
+
@client.keyspace = @ks_name
|
26
|
+
|
27
|
+
unless @client.column_families.include? "Users"
|
28
|
+
cf_def = CassandraThrift::CfDef.new(:keyspace => @ks_name, :name => "Users")
|
29
|
+
@client.add_column_family(cf_def)
|
30
|
+
end
|
31
|
+
|
32
|
+
unless @client.column_families.include? "Statuses"
|
33
|
+
cf_def = CassandraThrift::CfDef.new(:keyspace => @ks_name, :name => "Statuses")
|
34
|
+
@client.add_column_family(cf_def)
|
35
|
+
end
|
36
|
+
|
37
|
+
# These are standard entry/exit KVs that are passed up with all mongo operations
|
38
|
+
@entry_kvs = {
|
39
|
+
'Layer' => 'cassandra',
|
40
|
+
'Label' => 'entry',
|
41
|
+
'RemoteHost' => '127.0.0.1',
|
42
|
+
'RemotePort' => '9160' }
|
43
|
+
|
44
|
+
@exit_kvs = { 'Layer' => 'cassandra', 'Label' => 'exit' }
|
45
|
+
@collect_backtraces = Oboe::Config[:cassandra][:collect_backtraces]
|
46
|
+
end
|
49
47
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
:create_index, :drop_index, :add_column_family, :drop_column_family,
|
54
|
-
:add_keyspace, :drop_keyspace ].each do |m|
|
55
|
-
::Cassandra.method_defined?("#{m}_with_oboe").must_equal true
|
48
|
+
after do
|
49
|
+
Oboe::Config[:cassandra][:collect_backtraces] = @collect_backtraces
|
50
|
+
@client.disconnect!
|
56
51
|
end
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
it 'should trace insert' do
|
62
|
-
Oboe::API.start_trace('cassandra_test', '', {}) do
|
63
|
-
user = {'screen_name' => 'larry', "blah" => "ok"}
|
64
|
-
@client.insert(:Users, '5', user, { :ttl => 600, :consistency => 1})
|
52
|
+
|
53
|
+
it 'Stock Cassandra should be loaded, defined and ready' do
|
54
|
+
defined?(::Cassandra).wont_match nil
|
65
55
|
end
|
66
|
-
|
67
|
-
traces = get_all_traces
|
68
|
-
|
69
|
-
traces.count.must_equal 4
|
70
|
-
validate_outer_layers(traces, 'cassandra_test')
|
71
|
-
|
72
|
-
validate_event_keys(traces[1], @entry_kvs)
|
73
|
-
traces[1]['Op'].must_equal "insert"
|
74
|
-
traces[1]['Cf'].must_equal "Users"
|
75
|
-
traces[1]['Key'].must_equal "\"5\""
|
76
|
-
traces[1]['Consistency'].must_equal "1"
|
77
|
-
traces[1]['Ttl'].must_equal "600"
|
78
|
-
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
79
|
-
validate_event_keys(traces[2], @exit_kvs)
|
80
|
-
end
|
81
56
|
|
82
|
-
|
83
|
-
|
84
|
-
|
57
|
+
it 'Cassandra should have oboe methods defined' do
|
58
|
+
[ :insert, :remove, :count_columns, :get_columns, :multi_get_columns, :get,
|
59
|
+
:multi_get, :get_range_single, :get_range_batch, :get_indexed_slices,
|
60
|
+
:create_index, :drop_index, :add_column_family, :drop_column_family,
|
61
|
+
:add_keyspace, :drop_keyspace ].each do |m|
|
62
|
+
::Cassandra.method_defined?("#{m}_with_oboe").must_equal true
|
63
|
+
end
|
64
|
+
# Special 'exists?' case
|
65
|
+
::Cassandra.method_defined?("exists_with_oboe?").must_equal true
|
85
66
|
end
|
86
67
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
68
|
+
it 'should trace insert' do
|
69
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
70
|
+
user = {'screen_name' => 'larry', "blah" => "ok"}
|
71
|
+
@client.insert(:Users, '5', user, { :ttl => 600, :consistency => 1})
|
72
|
+
end
|
73
|
+
|
74
|
+
traces = get_all_traces
|
75
|
+
|
76
|
+
traces.count.must_equal 4
|
77
|
+
validate_outer_layers(traces, 'cassandra_test')
|
78
|
+
|
79
|
+
validate_event_keys(traces[1], @entry_kvs)
|
80
|
+
traces[1]['Op'].must_equal "insert"
|
81
|
+
traces[1]['Cf'].must_equal "Users"
|
82
|
+
traces[1]['Key'].must_equal "\"5\""
|
83
|
+
traces[1]['Consistency'].must_equal "1"
|
84
|
+
traces[1]['Ttl'].must_equal "600"
|
85
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
86
|
+
validate_event_keys(traces[2], @exit_kvs)
|
105
87
|
end
|
106
|
-
|
107
|
-
traces = get_all_traces
|
108
|
-
|
109
|
-
traces.count.must_equal 4
|
110
|
-
validate_outer_layers(traces, 'cassandra_test')
|
111
|
-
|
112
|
-
validate_event_keys(traces[1], @entry_kvs)
|
113
|
-
traces[1]['Op'].must_equal "count_columns"
|
114
|
-
traces[1]['Cf'].must_equal "Statuses"
|
115
|
-
traces[1]['Key'].must_equal "\"12\""
|
116
|
-
traces[1]['Count'].must_equal "50"
|
117
|
-
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
118
|
-
validate_event_keys(traces[2], @exit_kvs)
|
119
|
-
end
|
120
88
|
|
121
|
-
|
122
|
-
|
123
|
-
|
89
|
+
it 'should trace remove' do
|
90
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
91
|
+
@client.remove(:Users, '5', 'blah')
|
92
|
+
end
|
93
|
+
|
94
|
+
traces = get_all_traces
|
95
|
+
|
96
|
+
traces.count.must_equal 4
|
97
|
+
validate_outer_layers(traces, 'cassandra_test')
|
98
|
+
|
99
|
+
validate_event_keys(traces[1], @entry_kvs)
|
100
|
+
traces[1]['Op'].must_equal "remove"
|
101
|
+
traces[1]['Cf'].must_equal "Users"
|
102
|
+
traces[1]['Key'].must_equal "\"5\""
|
103
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
104
|
+
validate_event_keys(traces[2], @exit_kvs)
|
124
105
|
end
|
125
106
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
107
|
+
it 'should trace count_columns' do
|
108
|
+
@client.insert(:Statuses, '12', {'body' => 'v1', 'user' => 'v2'})
|
109
|
+
|
110
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
111
|
+
@client.count_columns(:Statuses, '12', :count => 50)
|
112
|
+
end
|
113
|
+
|
114
|
+
traces = get_all_traces
|
115
|
+
|
116
|
+
traces.count.must_equal 4
|
117
|
+
validate_outer_layers(traces, 'cassandra_test')
|
118
|
+
|
119
|
+
validate_event_keys(traces[1], @entry_kvs)
|
120
|
+
traces[1]['Op'].must_equal "count_columns"
|
121
|
+
traces[1]['Cf'].must_equal "Statuses"
|
122
|
+
traces[1]['Key'].must_equal "\"12\""
|
123
|
+
traces[1]['Count'].must_equal "50"
|
124
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
125
|
+
validate_event_keys(traces[2], @exit_kvs)
|
126
|
+
end
|
138
127
|
|
139
|
-
|
140
|
-
|
141
|
-
|
128
|
+
it 'should trace get_columns' do
|
129
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
130
|
+
@client.get_columns(:Statuses, '12', ['body'])
|
131
|
+
end
|
132
|
+
|
133
|
+
traces = get_all_traces
|
134
|
+
|
135
|
+
traces.count.must_equal 4
|
136
|
+
validate_outer_layers(traces, 'cassandra_test')
|
137
|
+
|
138
|
+
validate_event_keys(traces[1], @entry_kvs)
|
139
|
+
traces[1]['Op'].must_equal "get_columns"
|
140
|
+
traces[1]['Cf'].must_equal "Statuses"
|
141
|
+
traces[1]['Key'].must_equal "\"12\""
|
142
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
143
|
+
validate_event_keys(traces[2], @exit_kvs)
|
142
144
|
end
|
143
|
-
|
144
|
-
traces = get_all_traces
|
145
|
-
|
146
|
-
traces.count.must_equal 4
|
147
|
-
validate_outer_layers(traces, 'cassandra_test')
|
148
|
-
|
149
|
-
validate_event_keys(traces[1], @entry_kvs)
|
150
|
-
traces[1]['Op'].must_equal "multi_get_columns"
|
151
|
-
traces[1]['Cf'].must_equal "Users"
|
152
|
-
traces[1]['Key'].must_equal "[\"12\", \"5\"]"
|
153
|
-
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
154
|
-
validate_event_keys(traces[2], @exit_kvs)
|
155
|
-
end
|
156
145
|
|
157
|
-
|
158
|
-
|
159
|
-
|
146
|
+
it 'should trace multi_get_columns' do
|
147
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
148
|
+
@client.multi_get_columns(:Users, ['12', '5'], ['body'])
|
149
|
+
end
|
150
|
+
|
151
|
+
traces = get_all_traces
|
152
|
+
|
153
|
+
traces.count.must_equal 4
|
154
|
+
validate_outer_layers(traces, 'cassandra_test')
|
155
|
+
|
156
|
+
validate_event_keys(traces[1], @entry_kvs)
|
157
|
+
traces[1]['Op'].must_equal "multi_get_columns"
|
158
|
+
traces[1]['Cf'].must_equal "Users"
|
159
|
+
traces[1]['Key'].must_equal "[\"12\", \"5\"]"
|
160
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
161
|
+
validate_event_keys(traces[2], @exit_kvs)
|
160
162
|
end
|
161
|
-
|
162
|
-
traces = get_all_traces
|
163
|
-
|
164
|
-
traces.count.must_equal 4
|
165
|
-
validate_outer_layers(traces, 'cassandra_test')
|
166
|
-
|
167
|
-
validate_event_keys(traces[1], @entry_kvs)
|
168
|
-
traces[1]['Op'].must_equal "get"
|
169
|
-
traces[1]['Cf'].must_equal "Statuses"
|
170
|
-
traces[1]['Key'].must_equal "\"12\""
|
171
|
-
traces[1]['Reversed'].must_equal "true"
|
172
|
-
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
173
|
-
validate_event_keys(traces[2], @exit_kvs)
|
174
|
-
end
|
175
163
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
164
|
+
it 'should trace get' do
|
165
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
166
|
+
@client.get(:Statuses, '12', :reversed => true)
|
167
|
+
end
|
168
|
+
|
169
|
+
traces = get_all_traces
|
170
|
+
|
171
|
+
traces.count.must_equal 4
|
172
|
+
validate_outer_layers(traces, 'cassandra_test')
|
173
|
+
|
174
|
+
validate_event_keys(traces[1], @entry_kvs)
|
175
|
+
traces[1]['Op'].must_equal "get"
|
176
|
+
traces[1]['Cf'].must_equal "Statuses"
|
177
|
+
traces[1]['Key'].must_equal "\"12\""
|
178
|
+
traces[1]['Reversed'].must_equal "true"
|
179
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
180
|
+
validate_event_keys(traces[2], @exit_kvs)
|
180
181
|
end
|
181
|
-
|
182
|
-
traces = get_all_traces
|
183
|
-
|
184
|
-
traces.count.must_equal 6
|
185
|
-
validate_outer_layers(traces, 'cassandra_test')
|
186
|
-
|
187
|
-
validate_event_keys(traces[1], @entry_kvs)
|
188
|
-
traces[1]['Op'].must_equal "exists?"
|
189
|
-
traces[1]['Cf'].must_equal "Statuses"
|
190
|
-
traces[1]['Key'].must_equal "\"12\""
|
191
|
-
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
192
|
-
validate_event_keys(traces[2], @exit_kvs)
|
193
|
-
|
194
|
-
traces[3]['Op'].must_equal "exists?"
|
195
|
-
traces[3]['Cf'].must_equal "Statuses"
|
196
|
-
traces[3]['Key'].must_equal "\"12\""
|
197
|
-
traces[3].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
198
|
-
end
|
199
182
|
|
200
|
-
|
201
|
-
|
202
|
-
|
183
|
+
it 'should trace exists?' do
|
184
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
185
|
+
@client.exists?(:Statuses, '12')
|
186
|
+
@client.exists?(:Statuses, '12', 'body')
|
187
|
+
end
|
188
|
+
|
189
|
+
traces = get_all_traces
|
190
|
+
|
191
|
+
traces.count.must_equal 6
|
192
|
+
validate_outer_layers(traces, 'cassandra_test')
|
193
|
+
|
194
|
+
validate_event_keys(traces[1], @entry_kvs)
|
195
|
+
traces[1]['Op'].must_equal "exists?"
|
196
|
+
traces[1]['Cf'].must_equal "Statuses"
|
197
|
+
traces[1]['Key'].must_equal "\"12\""
|
198
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
199
|
+
validate_event_keys(traces[2], @exit_kvs)
|
200
|
+
|
201
|
+
traces[3]['Op'].must_equal "exists?"
|
202
|
+
traces[3]['Cf'].must_equal "Statuses"
|
203
|
+
traces[3]['Key'].must_equal "\"12\""
|
204
|
+
traces[3].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
203
205
|
end
|
204
|
-
|
205
|
-
traces = get_all_traces
|
206
|
-
|
207
|
-
traces.count.must_equal 4
|
208
|
-
validate_outer_layers(traces, 'cassandra_test')
|
209
|
-
|
210
|
-
validate_event_keys(traces[1], @entry_kvs)
|
211
|
-
traces[1]['Op'].must_equal "get_range_batch"
|
212
|
-
traces[1]['Cf'].must_equal "Statuses"
|
213
|
-
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
214
|
-
validate_event_keys(traces[2], @exit_kvs)
|
215
|
-
end
|
216
206
|
|
217
|
-
|
218
|
-
|
219
|
-
|
207
|
+
it 'should trace get_range_keys' do
|
208
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
209
|
+
@client.get_range_keys(:Statuses, :key_count => 4)
|
210
|
+
end
|
211
|
+
|
212
|
+
traces = get_all_traces
|
213
|
+
|
214
|
+
traces.count.must_equal 4
|
215
|
+
validate_outer_layers(traces, 'cassandra_test')
|
216
|
+
|
217
|
+
validate_event_keys(traces[1], @entry_kvs)
|
218
|
+
traces[1]['Op'].must_equal "get_range_batch"
|
219
|
+
traces[1]['Cf'].must_equal "Statuses"
|
220
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
221
|
+
validate_event_keys(traces[2], @exit_kvs)
|
220
222
|
end
|
221
223
|
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
validate_event_keys(traces[1], @entry_kvs)
|
228
|
-
traces[1]['Op'].must_equal "create_index"
|
229
|
-
traces[1]['Cf'].must_equal "Statuses"
|
230
|
-
traces[1]['Keyspace'].must_equal @ks_name
|
231
|
-
traces[1]['Column_name'].must_equal "column_name"
|
232
|
-
traces[1]['Validation_class'].must_equal "LongType"
|
233
|
-
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
234
|
-
validate_event_keys(traces[2], @exit_kvs)
|
235
|
-
|
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')
|
224
|
+
it 'should trace create_index' do
|
225
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
226
|
+
@client.create_index(@ks_name, 'Statuses', 'column_name', 'LongType')
|
227
|
+
end
|
243
228
|
|
244
|
-
|
229
|
+
traces = get_all_traces
|
230
|
+
|
231
|
+
traces.count.must_equal 4
|
232
|
+
validate_outer_layers(traces, 'cassandra_test')
|
233
|
+
|
234
|
+
validate_event_keys(traces[1], @entry_kvs)
|
235
|
+
traces[1]['Op'].must_equal "create_index"
|
236
|
+
traces[1]['Cf'].must_equal "Statuses"
|
237
|
+
traces[1]['Keyspace'].must_equal @ks_name
|
238
|
+
traces[1]['Column_name'].must_equal "column_name"
|
239
|
+
traces[1]['Validation_class'].must_equal "LongType"
|
240
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
241
|
+
validate_event_keys(traces[2], @exit_kvs)
|
242
|
+
|
243
|
+
# Clean up
|
245
244
|
@client.drop_index(@ks_name, 'Statuses', 'column_name')
|
246
245
|
end
|
247
246
|
|
248
|
-
|
249
|
-
|
250
|
-
|
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)
|
260
|
-
end
|
247
|
+
it 'should trace drop_index' do
|
248
|
+
# Prep
|
249
|
+
@client.create_index(@ks_name, 'Statuses', 'column_name', 'LongType')
|
261
250
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
251
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
252
|
+
@client.drop_index(@ks_name, 'Statuses', 'column_name')
|
253
|
+
end
|
254
|
+
|
255
|
+
traces = get_all_traces
|
256
|
+
|
257
|
+
traces.count.must_equal 4
|
258
|
+
validate_outer_layers(traces, 'cassandra_test')
|
259
|
+
|
260
|
+
validate_event_keys(traces[1], @entry_kvs)
|
261
|
+
traces[1]['Op'].must_equal "drop_index"
|
262
|
+
traces[1]['Cf'].must_equal "Statuses"
|
263
|
+
traces[1]['Keyspace'].must_equal @ks_name
|
264
|
+
traces[1]['Column_name'].must_equal "column_name"
|
265
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
266
|
+
validate_event_keys(traces[2], @exit_kvs)
|
273
267
|
end
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
@
|
268
|
+
|
269
|
+
it 'should trace get_indexed_slices' do
|
270
|
+
@client.create_index(@ks_name, 'Statuses', 'x', 'LongType')
|
271
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
272
|
+
expressions = [
|
273
|
+
{ :column_name => 'x',
|
274
|
+
:value => [0,20].pack("NN"),
|
275
|
+
:comparison => "=="},
|
276
|
+
{ :column_name => 'non_indexed',
|
277
|
+
:value => [5].pack("N*"),
|
278
|
+
:comparison => ">"} ]
|
279
|
+
@client.get_indexed_slices(:Statuses, expressions).length
|
280
|
+
end
|
281
|
+
|
282
|
+
traces = get_all_traces
|
283
|
+
|
284
|
+
traces.count.must_equal 4
|
285
|
+
validate_outer_layers(traces, 'cassandra_test')
|
286
|
+
|
287
|
+
validate_event_keys(traces[1], @entry_kvs)
|
288
|
+
traces[1]['Op'].must_equal "get_indexed_slices"
|
289
|
+
traces[1]['Cf'].must_equal "Statuses"
|
290
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
291
|
+
validate_event_keys(traces[2], @exit_kvs)
|
294
292
|
end
|
295
293
|
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
validate_outer_layers(traces, 'cassandra_test')
|
294
|
+
it 'should trace add and remove of column family' do
|
295
|
+
cf_name = (0...10).map{ ('a'..'z').to_a[rand(26)] }.join
|
296
|
+
cf_def = CassandraThrift::CfDef.new(:keyspace => @ks_name, :name => cf_name)
|
300
297
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
Oboe::API.start_trace('cassandra_test', '', {}) do
|
320
|
-
@client.add_keyspace(ks_def)
|
321
|
-
@client.keyspace = ks_name
|
298
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
299
|
+
@client.add_column_family(cf_def)
|
300
|
+
@client.drop_column_family(cf_name)
|
301
|
+
end
|
302
|
+
|
303
|
+
traces = get_all_traces
|
304
|
+
|
305
|
+
traces.count.must_equal 6
|
306
|
+
validate_outer_layers(traces, 'cassandra_test')
|
307
|
+
|
308
|
+
validate_event_keys(traces[1], @entry_kvs)
|
309
|
+
traces[1]['Op'].must_equal "add_column_family"
|
310
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
311
|
+
validate_event_keys(traces[2], @exit_kvs)
|
312
|
+
|
313
|
+
traces[3]['Op'].must_equal "drop_column_family"
|
314
|
+
traces[3]['Cf'].must_equal cf_name
|
315
|
+
traces[3].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
322
316
|
end
|
323
317
|
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
318
|
+
it 'should trace adding a keyspace' do
|
319
|
+
ks_name = (0...10).map{ ('a'..'z').to_a[rand(26)] }.join
|
320
|
+
column_families = [{:name =>"a"}, {:name => "b", :type => :super}]
|
321
|
+
ks_def = CassandraThrift::KsDef.new(:name => ks_name,
|
322
|
+
:strategy_class => "org.apache.cassandra.locator.SimpleStrategy",
|
323
|
+
:strategy_options => { 'replication_factor' => '2' },
|
324
|
+
:cf_defs => [])
|
325
|
+
|
326
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
327
|
+
@client.add_keyspace(ks_def)
|
328
|
+
@client.keyspace = ks_name
|
329
|
+
end
|
330
|
+
|
331
|
+
traces = get_all_traces
|
332
|
+
|
333
|
+
traces.count.must_equal 4
|
334
|
+
validate_outer_layers(traces, 'cassandra_test')
|
335
|
+
|
336
|
+
validate_event_keys(traces[1], @entry_kvs)
|
337
|
+
traces[1]['Op'].must_equal "add_keyspace"
|
338
|
+
traces[1]['Name'].must_equal ks_name
|
339
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
340
|
+
validate_event_keys(traces[2], @exit_kvs)
|
339
341
|
end
|
340
342
|
|
341
|
-
|
343
|
+
it 'should trace the removal of a keyspace' do
|
344
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
345
|
+
@client.drop_keyspace(@ks_name)
|
346
|
+
end
|
347
|
+
|
348
|
+
traces = get_all_traces
|
349
|
+
|
350
|
+
traces.count.must_equal 4
|
351
|
+
validate_outer_layers(traces, 'cassandra_test')
|
352
|
+
|
353
|
+
validate_event_keys(traces[1], @entry_kvs)
|
354
|
+
traces[1]['Op'].must_equal "drop_keyspace"
|
355
|
+
traces[1]['Name'].must_equal @ks_name
|
356
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:cassandra][:collect_backtraces]
|
357
|
+
validate_event_keys(traces[2], @exit_kvs)
|
358
|
+
end
|
342
359
|
|
343
|
-
|
344
|
-
|
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)
|
351
|
-
end
|
352
|
-
|
353
|
-
it "should obey :collect_backtraces setting when true" do
|
354
|
-
Oboe::Config[:cassandra][:collect_backtraces] = true
|
360
|
+
it "should obey :collect_backtraces setting when true" do
|
361
|
+
Oboe::Config[:cassandra][:collect_backtraces] = true
|
355
362
|
|
356
|
-
|
357
|
-
|
358
|
-
|
363
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
364
|
+
user = {'screen_name' => 'larry', "blah" => "ok"}
|
365
|
+
@client.insert(:Users, '5', user, { :ttl => 600, :consistency => 1})
|
366
|
+
end
|
367
|
+
|
368
|
+
traces = get_all_traces
|
369
|
+
layer_has_key(traces, 'cassandra', 'Backtrace')
|
359
370
|
end
|
360
371
|
|
361
|
-
|
362
|
-
|
363
|
-
end
|
372
|
+
it "should obey :collect_backtraces setting when false" do
|
373
|
+
Oboe::Config[:cassandra][:collect_backtraces] = false
|
364
374
|
|
365
|
-
|
366
|
-
|
375
|
+
Oboe::API.start_trace('cassandra_test', '', {}) do
|
376
|
+
user = {'screen_name' => 'larry', "blah" => "ok"}
|
377
|
+
@client.insert(:Users, '5', user, { :ttl => 600, :consistency => 1})
|
378
|
+
end
|
367
379
|
|
368
|
-
|
369
|
-
|
370
|
-
@client.insert(:Users, '5', user, { :ttl => 600, :consistency => 1})
|
380
|
+
traces = get_all_traces
|
381
|
+
layer_doesnt_have_key(traces, 'cassandra', 'Backtrace')
|
371
382
|
end
|
372
|
-
|
373
|
-
traces = get_all_traces
|
374
|
-
layer_doesnt_have_key(traces, 'cassandra', 'Backtrace')
|
383
|
+
|
375
384
|
end
|
376
|
-
|
377
|
-
end
|
385
|
+
|
386
|
+
end # false
|
@@ -21,7 +21,7 @@ describe Oboe::Inst do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
it "should trace a Net::HTTP request" do
|
24
|
+
it "should trace a Net::HTTP request to an instr'd app" do
|
25
25
|
Oboe::API.start_trace('net-http_test', '', {}) do
|
26
26
|
uri = URI('https://www.appneta.com')
|
27
27
|
http = Net::HTTP.new(uri.host, uri.port)
|
@@ -44,6 +44,29 @@ describe Oboe::Inst do
|
|
44
44
|
traces[2].has_key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
|
45
45
|
end
|
46
46
|
|
47
|
+
it "should trace a Net::HTTP request" do
|
48
|
+
Oboe::API.start_trace('net-http_test', '', {}) do
|
49
|
+
uri = URI('https://www.google.com')
|
50
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
51
|
+
http.use_ssl = true
|
52
|
+
http.get('/?q=test').read_body
|
53
|
+
end
|
54
|
+
|
55
|
+
traces = get_all_traces
|
56
|
+
traces.count.must_equal 5
|
57
|
+
|
58
|
+
validate_outer_layers(traces, 'net-http_test')
|
59
|
+
|
60
|
+
traces[1]['Layer'].must_equal 'net-http'
|
61
|
+
traces[2]['IsService'].must_equal "1"
|
62
|
+
traces[2]['RemoteProtocol'].must_equal "HTTPS"
|
63
|
+
traces[2]['RemoteHost'].must_equal "www.google.com"
|
64
|
+
traces[2]['ServiceArg'].must_equal "/?q=test"
|
65
|
+
traces[2]['HTTPMethod'].must_equal "GET"
|
66
|
+
traces[2]['HTTPStatus'].must_equal "200"
|
67
|
+
traces[2].has_key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
|
68
|
+
end
|
69
|
+
|
47
70
|
it "should obey :collect_backtraces setting when true" do
|
48
71
|
Oboe::Config[:nethttp][:collect_backtraces] = true
|
49
72
|
|
@@ -283,7 +283,7 @@ describe Oboe::Inst::Mongo do
|
|
283
283
|
traces[1]['Collection'].must_equal "testCollection"
|
284
284
|
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:mongo][:collect_backtraces]
|
285
285
|
traces[1]['QueryOp'].must_equal "find"
|
286
|
-
traces[1]
|
286
|
+
traces[1].has_key?('Query').must_equal true
|
287
287
|
traces[1]['Limit'].must_equal "1"
|
288
288
|
end
|
289
289
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Oboe::XTrace do
|
4
|
+
|
5
|
+
it 'should correctly validate X-Trace IDs' do
|
6
|
+
# Invalid X-Trace IDs
|
7
|
+
Oboe::XTrace.valid?("").must_equal false
|
8
|
+
Oboe::XTrace.valid?(nil).must_equal false
|
9
|
+
Oboe::XTrace.valid?("1B00000000000000000000000000000000000000000000000000000000").must_equal false
|
10
|
+
Oboe::XTrace.valid?("1b").must_equal false
|
11
|
+
Oboe::XTrace.valid?("29348209348").must_equal false
|
12
|
+
|
13
|
+
# Standard X-Trace IDs
|
14
|
+
Oboe::XTrace.valid?("1B7435A9FE510AE4533414D425DADF4E180D2B4E3649E60702469DB05F").must_equal true
|
15
|
+
Oboe::XTrace.valid?("1BA462ADE6CFE479081764CC476AA983351DC51B1BCB3468DA6F06EEFA").must_equal true
|
16
|
+
Oboe::XTrace.valid?("1BADFDFB3DBA36323B2E0975925D0DAE12D10BA5946809504DC4B81FF6").must_equal true
|
17
|
+
|
18
|
+
# X-Trace IDs with lower-case alpha chars
|
19
|
+
Oboe::XTrace.valid?("1bf9861cb12e2a257247a8195654e56d30b2f4e2d4fce67c321ad58495").must_equal true
|
20
|
+
Oboe::XTrace.valid?("1b258b2c1d6914f3c6085cb72e7cc93e145b401d4356aa24ef7294b2d6").must_equal true
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should correctly extract task IDs from X-Trace IDs' do
|
24
|
+
task_id = Oboe::XTrace.task_id("1BF86B3D3342FCECAECE33C6411379BB171505DB6A136DFAEBDF742362")
|
25
|
+
task_id.is_a?(String).must_equal true
|
26
|
+
task_id.must_equal "F86B3D3342FCECAECE33C6411379BB171505DB6A"
|
27
|
+
task_id.length.must_equal 40
|
28
|
+
|
29
|
+
task_id = Oboe::XTrace.task_id("1B77970F82332EE22FF04C249FCBA8F63E8AFA2C6730E209453259B2D6")
|
30
|
+
task_id.is_a?(String).must_equal true
|
31
|
+
task_id.must_equal "77970F82332EE22FF04C249FCBA8F63E8AFA2C67"
|
32
|
+
task_id.length.must_equal 40
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
metadata
CHANGED
@@ -1,66 +1,75 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: oboe
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 101
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 3
|
9
|
+
- 4
|
10
|
+
- 1
|
11
|
+
version: 2.3.4.1
|
5
12
|
platform: ruby
|
6
|
-
authors:
|
13
|
+
authors:
|
7
14
|
- Peter Giacomo Lombardo
|
8
15
|
- Spiros Eliopoulos
|
9
16
|
autorequire:
|
10
17
|
bindir: bin
|
11
18
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
19
|
+
|
20
|
+
date: 2013-11-22 00:00:00 Z
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
15
23
|
name: rake
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - '>='
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '0'
|
21
|
-
type: :development
|
22
24
|
prerelease: false
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
- - '>='
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '0'
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 3
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
version: "0"
|
35
34
|
type: :development
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: minitest
|
36
38
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
- - '>='
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
version: "0"
|
49
48
|
type: :development
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: bson
|
50
52
|
prerelease: false
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
type: :development
|
63
|
+
version_requirements: *id003
|
56
64
|
description: The oboe gem provides TraceView instrumentation for Ruby and Ruby frameworks.
|
57
65
|
email: traceviewsupport@appneta.com
|
58
66
|
executables: []
|
59
|
-
|
67
|
+
|
68
|
+
extensions:
|
60
69
|
- ext/oboe_metal/extconf.rb
|
61
|
-
extra_rdoc_files:
|
70
|
+
extra_rdoc_files:
|
62
71
|
- LICENSE
|
63
|
-
files:
|
72
|
+
files:
|
64
73
|
- .gitignore
|
65
74
|
- .travis.yml
|
66
75
|
- Appraisals
|
@@ -128,6 +137,7 @@ files:
|
|
128
137
|
- lib/oboe/ruby.rb
|
129
138
|
- lib/oboe/util.rb
|
130
139
|
- lib/oboe/version.rb
|
140
|
+
- lib/oboe/xtrace.rb
|
131
141
|
- lib/oboe_fu.rb
|
132
142
|
- lib/oboe_metal.rb
|
133
143
|
- lib/rails/generators/oboe/install_generator.rb
|
@@ -147,39 +157,51 @@ files:
|
|
147
157
|
- test/minitest_helper.rb
|
148
158
|
- test/profiling/method_test.rb
|
149
159
|
- test/support/config_test.rb
|
160
|
+
- test/support/xtrace_test.rb
|
150
161
|
homepage: http://www.appneta.com/application-performance-management
|
151
162
|
licenses: []
|
152
|
-
|
163
|
+
|
153
164
|
post_install_message:
|
154
165
|
rdoc_options: []
|
155
|
-
|
166
|
+
|
167
|
+
require_paths:
|
156
168
|
- lib
|
157
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
169
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
hash: 3
|
175
|
+
segments:
|
176
|
+
- 0
|
177
|
+
version: "0"
|
178
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
180
|
+
requirements:
|
181
|
+
- - ">="
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
hash: 3
|
184
|
+
segments:
|
185
|
+
- 0
|
186
|
+
version: "0"
|
167
187
|
requirements: []
|
188
|
+
|
168
189
|
rubyforge_project:
|
169
|
-
rubygems_version:
|
190
|
+
rubygems_version: 1.8.15
|
170
191
|
signing_key:
|
171
|
-
specification_version:
|
192
|
+
specification_version: 3
|
172
193
|
summary: AppNeta TraceView performance instrumentation gem for Ruby
|
173
|
-
test_files:
|
194
|
+
test_files:
|
174
195
|
- test/minitest_helper.rb
|
175
|
-
- test/
|
196
|
+
- test/support/config_test.rb
|
197
|
+
- test/support/xtrace_test.rb
|
198
|
+
- test/profiling/method_test.rb
|
199
|
+
- test/instrumentation/memcached_test.rb
|
200
|
+
- test/instrumentation/memcache_test.rb
|
176
201
|
- test/instrumentation/dalli_test.rb
|
177
202
|
- test/instrumentation/http_test.rb
|
203
|
+
- test/instrumentation/cassandra_test.rb
|
178
204
|
- test/instrumentation/resque_test.rb
|
179
|
-
- test/instrumentation/moped_test.rb
|
180
205
|
- test/instrumentation/rack_test.rb
|
181
|
-
- test/instrumentation/
|
182
|
-
- test/instrumentation/
|
183
|
-
- test/instrumentation/memcached_test.rb
|
184
|
-
- test/profiling/method_test.rb
|
185
|
-
- test/support/config_test.rb
|
206
|
+
- test/instrumentation/moped_test.rb
|
207
|
+
- test/instrumentation/mongo_test.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 45fc7604fa67548997b691856dbd87e2e769a1a6
|
4
|
-
data.tar.gz: 4c1b623a594db6e3894482f018af8c68dea5562c
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: ce0e2ad674ade428b114ab3f3431d57cd573bb59110e49ebde9ccf55804076632190b904174ef3a511cf260e8f651765aa0591544073df5fba7164de311b3334
|
7
|
-
data.tar.gz: 89e7abdfa4c4d0a0adae647b5ac231043e9620097cd97c158bdea3071f02759c95a970554b5b35c5b9eaedaa568596deda634c17231f7844291aa0826cb8a6ef
|