oboe 2.7.5.1 → 2.7.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/lib/joboe_metal.rb +3 -3
- data/lib/oboe/api/layerinit.rb +12 -0
- data/lib/oboe/api/logging.rb +4 -3
- data/lib/oboe/base.rb +68 -3
- data/lib/oboe/frameworks/rails/inst/active_record.rb +1 -1
- data/lib/oboe/inst/http.rb +3 -0
- data/lib/oboe/inst/moped.rb +2 -1
- data/lib/oboe/inst/rack.rb +17 -2
- data/lib/oboe/version.rb +2 -2
- data/test/instrumentation/faraday_test.rb +9 -8
- data/test/instrumentation/http_test.rb +12 -11
- data/test/instrumentation/memcache_test.rb +2 -2
- data/test/instrumentation/memcached_test.rb +1 -1
- data/test/instrumentation/moped_test.rb +21 -0
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bbafabb39decad386dc3d7f69fe5bf05c37f871
|
4
|
+
data.tar.gz: cdc1a52a1853ed4a41e0293deb13393659b667c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a67d61562e9906c6cdd62fba61e35a5461525a422fcc18cdc52b84fffed0537b4f6477310e961a2e42775ec603db1e6ff24f4c42429ed30518e7fbb3ed5d5d5
|
7
|
+
data.tar.gz: 2109d23dffb9c361964fdcecf459a2ca0e4d07991d6c217c91c693480c7f9715d980986f2416472d440181a78458611c087e6f70ab1519a8d2282d906e5e288d
|
data/Gemfile
CHANGED
@@ -11,7 +11,7 @@ group :development do
|
|
11
11
|
gem 'ruby-debug', :platforms => [ :mri_18, :jruby ]
|
12
12
|
gem 'debugger', :platform => :mri_19
|
13
13
|
gem 'byebug', :platforms => [ :mri_20, :mri_21 ]
|
14
|
-
gem 'perftools.rb', :platforms => [ :mri_20, :mri_21 ], :require => 'perftools'
|
14
|
+
# gem 'perftools.rb', :platforms => [ :mri_20, :mri_21 ], :require => 'perftools'
|
15
15
|
if RUBY_VERSION > '1.8.7'
|
16
16
|
gem 'pry'
|
17
17
|
gem 'pry-byebug', :platforms => [ :mri_20, :mri_21 ]
|
@@ -32,7 +32,7 @@ gem 'excon'
|
|
32
32
|
gem 'typhoeus'
|
33
33
|
|
34
34
|
if RUBY_VERSION >= '1.9'
|
35
|
-
gem 'moped'
|
35
|
+
gem 'moped', '1.3.2'
|
36
36
|
gem 'eventmachine'
|
37
37
|
gem 'em-synchrony'
|
38
38
|
gem 'em-http-request'
|
data/lib/joboe_metal.rb
CHANGED
@@ -12,7 +12,7 @@ module Oboe_metal
|
|
12
12
|
class Context
|
13
13
|
class << self
|
14
14
|
def toString
|
15
|
-
|
15
|
+
getMetadata.toHexString
|
16
16
|
end
|
17
17
|
|
18
18
|
def fromString(xtrace)
|
@@ -71,9 +71,9 @@ module Oboe_metal
|
|
71
71
|
Oboe::Config.tracing_mode = 'never'
|
72
72
|
end
|
73
73
|
|
74
|
-
Oboe.sample_rate = cfg.
|
74
|
+
Oboe.sample_rate = cfg.getSampleRate
|
75
75
|
Oboe::Config.sample_rate = cfg.sampleRate
|
76
|
-
Oboe::Config.sample_source = cfg.
|
76
|
+
Oboe::Config.sample_source = cfg.sampleRateSourceValue
|
77
77
|
rescue => e
|
78
78
|
Oboe.logger.debug "[oboe/debug] Couldn't retrieve/acces joboe sampleRateCfg"
|
79
79
|
Oboe.logger.debug "[oboe/debug] #{e.message}"
|
data/lib/oboe/api/layerinit.rb
CHANGED
@@ -18,7 +18,19 @@ module Oboe
|
|
18
18
|
return unless Oboe.loaded
|
19
19
|
|
20
20
|
platform_info = Oboe::Util.build_init_report
|
21
|
+
|
22
|
+
# If already tracing, save and clear the context. Restore it after
|
23
|
+
# the __Init is sent
|
24
|
+
context = nil
|
25
|
+
|
26
|
+
if Oboe.tracing?
|
27
|
+
context = Oboe::Context.toString
|
28
|
+
Oboe::Context.clear
|
29
|
+
end
|
30
|
+
|
21
31
|
start_trace(layer, nil, platform_info.merge('Force' => true)) {}
|
32
|
+
|
33
|
+
Oboe::Context.fromString(context) if context
|
22
34
|
end
|
23
35
|
|
24
36
|
##
|
data/lib/oboe/api/logging.rb
CHANGED
@@ -63,12 +63,13 @@ module Oboe
|
|
63
63
|
#
|
64
64
|
# Returns nothing.
|
65
65
|
def log_start(layer, xtrace, opts = {})
|
66
|
-
return if !Oboe.loaded || Oboe.never? ||
|
66
|
+
return if !Oboe.loaded || Oboe.never? ||
|
67
67
|
(opts.key?(:URL) && ::Oboe::Util.static_asset?(opts[:URL]))
|
68
68
|
|
69
|
-
Oboe::Context.fromString(xtrace) if
|
69
|
+
Oboe::Context.fromString(xtrace) if Oboe.pickup_context?(xtrace)
|
70
70
|
|
71
71
|
if Oboe.tracing?
|
72
|
+
Oboe.is_continued_trace = true
|
72
73
|
log_entry(layer, opts)
|
73
74
|
elsif opts.key?('Force') || Oboe.sample?(opts.merge(:layer => layer, :xtrace => xtrace))
|
74
75
|
log_event(layer, 'entry', Oboe::Context.startTrace, opts)
|
@@ -84,7 +85,7 @@ module Oboe
|
|
84
85
|
if Oboe.loaded
|
85
86
|
log_event(layer, 'exit', Oboe::Context.createEvent, opts)
|
86
87
|
xtrace = Oboe::Context.toString
|
87
|
-
Oboe::Context.clear
|
88
|
+
Oboe::Context.clear unless Oboe.has_incoming_context?
|
88
89
|
xtrace
|
89
90
|
end
|
90
91
|
end
|
data/lib/oboe/base.rb
CHANGED
@@ -35,14 +35,79 @@ module OboeBase
|
|
35
35
|
attr_accessor :sample_rate
|
36
36
|
thread_local :layer_op
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
# The following accessors indicate the incoming tracing state received
|
39
|
+
# by the rack layer. These are primarily used to identify state
|
40
|
+
# between the Ruby and JOboe instrumentation under JRuby.
|
41
|
+
#
|
42
|
+
# This is because that even though there may be an incoming
|
43
|
+
# X-Trace request header, tracing may have already been started
|
44
|
+
# by Joboe. Such a scenario occurs when the application is being
|
45
|
+
# hosted by a Java container (such as Tomcat or Glassfish) and
|
46
|
+
# JOboe has already initiated tracing. In this case, we shouldn't
|
47
|
+
# pickup the X-Trace context in the X-Trace header and we shouldn't
|
48
|
+
# set the outgoing response X-Trace header or clear context.
|
49
|
+
# Yeah I know. Yuck.
|
50
|
+
|
51
|
+
# Occurs only on Jruby. Indicates that Joboe (the java instrumentation)
|
52
|
+
# has already started tracing before it hit the JRuby instrumentation.
|
53
|
+
thread_local :has_incoming_context
|
54
|
+
|
55
|
+
# Indicates the existence of a valid X-Trace request header
|
56
|
+
thread_local :has_xtrace_header
|
57
|
+
|
58
|
+
# This indicates that this trace was continued from
|
59
|
+
# an incoming X-Trace request header or in the case
|
60
|
+
# of JRuby, a trace already started by JOboe.
|
61
|
+
thread_local :is_continued_trace
|
41
62
|
|
63
|
+
##
|
64
|
+
# extended
|
65
|
+
#
|
66
|
+
# Invoked when this module is extended.
|
67
|
+
# e.g. extend OboeBase
|
68
|
+
#
|
42
69
|
def self.extended(cls)
|
43
70
|
cls.loaded = true
|
71
|
+
|
72
|
+
# This gives us pretty accessors with questions marks at the end
|
73
|
+
# e.g. is_continued_trace --> is_continued_trace?
|
74
|
+
Oboe.methods.select{ |m| m =~ /^is_|^has_/ }.each do |c|
|
75
|
+
unless c =~ /\?$|=$/
|
76
|
+
# Oboe.logger.debug "aliasing #{c}? to #{c}"
|
77
|
+
alias_method "#{c}?", c
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# pickup_context
|
84
|
+
#
|
85
|
+
# Determines whether we should pickup context
|
86
|
+
# from an incoming X-Trace request header. The answer
|
87
|
+
# is generally yes but there are cases in JRuby under
|
88
|
+
# Tomcat (or Glassfish etc.) where tracing may have
|
89
|
+
# been already started by the Java instrumentation (Joboe)
|
90
|
+
# in which case we don't want to do this.
|
91
|
+
#
|
92
|
+
def pickup_context?(xtrace)
|
93
|
+
return false unless Oboe::XTrace.valid?(xtrace)
|
94
|
+
|
95
|
+
if defined?(JRUBY_VERSION) && Oboe.tracing?
|
96
|
+
return false
|
97
|
+
else
|
98
|
+
return true
|
99
|
+
end
|
44
100
|
end
|
45
101
|
|
102
|
+
##
|
103
|
+
# tracing_layer_op?
|
104
|
+
#
|
105
|
+
# Queries the thread local variable about the current
|
106
|
+
# operation being traced. This is used in cases of recursive
|
107
|
+
# operation tracing or one instrumented operation calling another.
|
108
|
+
#
|
109
|
+
# In such cases, we only want to trace the outermost operation.
|
110
|
+
#
|
46
111
|
def tracing_layer_op?(operation)
|
47
112
|
if operation.is_a?(Array)
|
48
113
|
return operation.include?(Oboe.layer_op)
|
@@ -7,7 +7,7 @@ require 'oboe/frameworks/rails/inst/connection_adapters/mysql2'
|
|
7
7
|
require 'oboe/frameworks/rails/inst/connection_adapters/postgresql'
|
8
8
|
require 'oboe/frameworks/rails/inst/connection_adapters/oracle'
|
9
9
|
|
10
|
-
if Oboe::Config[:active_record][:enabled]
|
10
|
+
if Oboe::Config[:active_record][:enabled] && !defined?(JRUBY_VERSION)
|
11
11
|
begin
|
12
12
|
adapter = ActiveRecord::Base.connection.adapter_name.downcase
|
13
13
|
|
data/lib/oboe/inst/http.rb
CHANGED
@@ -11,6 +11,9 @@ if Oboe::Config[:nethttp][:enabled]
|
|
11
11
|
return request_without_oboe(*args, &block)
|
12
12
|
end
|
13
13
|
|
14
|
+
# If we're not tracing, just do a fast return
|
15
|
+
return request_without_oboe(*args, &block) unless Oboe.tracing?
|
16
|
+
|
14
17
|
# Avoid cross host tracing for blacklisted domains
|
15
18
|
blacklisted = Oboe::API.blacklisted?(addr_port)
|
16
19
|
|
data/lib/oboe/inst/moped.rb
CHANGED
@@ -450,10 +450,11 @@ if defined?(::Moped) && Oboe::Config[:moped][:enabled]
|
|
450
450
|
end
|
451
451
|
end
|
452
452
|
|
453
|
-
def aggregate_with_oboe(pipeline)
|
453
|
+
def aggregate_with_oboe(*pipeline)
|
454
454
|
return aggregate_without_oboe(pipeline) unless Oboe.tracing?
|
455
455
|
|
456
456
|
report_kvs = extract_trace_details(:aggregate)
|
457
|
+
report_kvs[:Query] = pipeline
|
457
458
|
|
458
459
|
Oboe::API.trace('mongo', report_kvs) do
|
459
460
|
aggregate_without_oboe(pipeline)
|
data/lib/oboe/inst/rack.rb
CHANGED
@@ -52,14 +52,24 @@ module Oboe
|
|
52
52
|
|
53
53
|
if Oboe.always?
|
54
54
|
# Only report these KVs under tracing_mode 'always' (never for 'through')
|
55
|
+
# These KVs need to be in the entry event for server side.
|
55
56
|
report_kvs[:SampleRate] = Oboe.sample_rate
|
56
57
|
report_kvs[:SampleSource] = Oboe.sample_source
|
57
58
|
end
|
58
59
|
|
60
|
+
# Under JRuby, JOboe may have already started a trace. Make note of this
|
61
|
+
# if so and don't clear context on log_end (see oboe/api/logging.rb)
|
62
|
+
Oboe.has_incoming_context = Oboe.tracing?
|
63
|
+
|
64
|
+
# Check for and validate X-Trace request header to pick up tracing context
|
59
65
|
xtrace = env.is_a?(Hash) ? env['HTTP_X_TRACE'] : nil
|
66
|
+
xtrace_header = xtrace if xtrace && Oboe::XTrace.valid?(xtrace)
|
67
|
+
Oboe.has_xtrace_header = xtrace_header
|
60
68
|
|
61
|
-
|
69
|
+
Oboe.is_continued_trace = Oboe.has_incoming_context or Oboe.has_xtrace_header
|
62
70
|
|
71
|
+
# The actual block of work to instrument
|
72
|
+
result, xtrace = Oboe::API.start_trace('rack', xtrace_header, report_kvs) do
|
63
73
|
status, headers, response = @app.call(env)
|
64
74
|
|
65
75
|
if Oboe.tracing?
|
@@ -73,8 +83,13 @@ module Oboe
|
|
73
83
|
xtrace = e.instance_variable_get(:@xtrace)
|
74
84
|
raise
|
75
85
|
ensure
|
76
|
-
|
86
|
+
if result && Oboe::XTrace.valid?(xtrace)
|
87
|
+
unless defined?(JRUBY_VERSION) && Oboe.is_continued_trace?
|
88
|
+
result[1]['X-Trace'] = xtrace
|
89
|
+
end
|
90
|
+
end
|
77
91
|
return result
|
78
92
|
end
|
79
93
|
end
|
80
94
|
end
|
95
|
+
|
data/lib/oboe/version.rb
CHANGED
@@ -22,10 +22,11 @@ describe Oboe::Inst::FaradayConnection do
|
|
22
22
|
|
23
23
|
it "should trace a Faraday request to an instr'd app" do
|
24
24
|
Oboe::API.start_trace('faraday_test') do
|
25
|
-
conn = Faraday.new(:url => 'http://www.
|
25
|
+
conn = Faraday.new(:url => 'http://www.gameface.in') do |faraday|
|
26
26
|
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
27
27
|
end
|
28
|
-
response = conn.get '
|
28
|
+
response = conn.get '/games?q=1'
|
29
|
+
response.headers["x-trace"].wont_match nil
|
29
30
|
end
|
30
31
|
|
31
32
|
traces = get_all_traces
|
@@ -39,8 +40,8 @@ describe Oboe::Inst::FaradayConnection do
|
|
39
40
|
traces[3]['Layer'].must_equal 'net-http'
|
40
41
|
traces[3]['IsService'].must_equal '1'
|
41
42
|
traces[3]['RemoteProtocol'].must_equal 'HTTP'
|
42
|
-
traces[3]['RemoteHost'].must_equal 'www.
|
43
|
-
traces[3]['ServiceArg'].must_equal '
|
43
|
+
traces[3]['RemoteHost'].must_equal 'www.gameface.in'
|
44
|
+
traces[3]['ServiceArg'].must_equal '/games?q=1'
|
44
45
|
traces[3]['HTTPMethod'].must_equal 'GET'
|
45
46
|
traces[3]['HTTPStatus'].must_equal '200'
|
46
47
|
|
@@ -118,10 +119,10 @@ describe Oboe::Inst::FaradayConnection do
|
|
118
119
|
|
119
120
|
it 'should trace a Faraday with an alternate adapter' do
|
120
121
|
Oboe::API.start_trace('faraday_test') do
|
121
|
-
conn = Faraday.new(:url => 'http://www.
|
122
|
+
conn = Faraday.new(:url => 'http://www.curlmyip.com') do |faraday|
|
122
123
|
faraday.adapter :excon
|
123
124
|
end
|
124
|
-
response = conn.get '/?q=
|
125
|
+
response = conn.get '/?q=1'
|
125
126
|
end
|
126
127
|
|
127
128
|
traces = get_all_traces
|
@@ -134,8 +135,8 @@ describe Oboe::Inst::FaradayConnection do
|
|
134
135
|
|
135
136
|
traces[2]['IsService'].must_equal '1'
|
136
137
|
traces[2]['RemoteProtocol'].must_equal 'HTTP'
|
137
|
-
traces[2]['RemoteHost'].must_equal 'www.
|
138
|
-
traces[2]['ServiceArg'].must_equal '/?q=
|
138
|
+
traces[2]['RemoteHost'].must_equal 'www.curlmyip.com'
|
139
|
+
traces[2]['ServiceArg'].must_equal '/?q=1'
|
139
140
|
traces[2]['HTTPMethod'].downcase.must_equal 'get'
|
140
141
|
|
141
142
|
traces[2]['Layer'].must_equal 'faraday'
|
@@ -23,10 +23,12 @@ describe Oboe::Inst do
|
|
23
23
|
|
24
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
|
-
uri = URI('http://www.
|
26
|
+
uri = URI('http://www.gameface.in/games?q=1')
|
27
27
|
http = Net::HTTP.new(uri.host, uri.port)
|
28
|
-
|
29
|
-
http.
|
28
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
29
|
+
response = http.request(request)
|
30
|
+
# The HTTP response should have an X-Trace header inside of it
|
31
|
+
response["x-trace"].wont_match nil
|
30
32
|
end
|
31
33
|
|
32
34
|
traces = get_all_traces
|
@@ -37,8 +39,8 @@ describe Oboe::Inst do
|
|
37
39
|
traces[1]['Layer'].must_equal 'net-http'
|
38
40
|
traces[2]['IsService'].must_equal "1"
|
39
41
|
traces[2]['RemoteProtocol'].must_equal "HTTP"
|
40
|
-
traces[2]['RemoteHost'].must_equal "www.
|
41
|
-
traces[2]['ServiceArg'].must_equal "
|
42
|
+
traces[2]['RemoteHost'].must_equal "www.gameface.in"
|
43
|
+
traces[2]['ServiceArg'].must_equal "/games?q=1"
|
42
44
|
traces[2]['HTTPMethod'].must_equal "GET"
|
43
45
|
traces[2]['HTTPStatus'].must_equal "200"
|
44
46
|
traces[2].has_key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
|
@@ -46,10 +48,9 @@ describe Oboe::Inst do
|
|
46
48
|
|
47
49
|
it "should trace a Net::HTTP request" do
|
48
50
|
Oboe::API.start_trace('net-http_test', '', {}) do
|
49
|
-
uri = URI('
|
51
|
+
uri = URI('http://www.curlmyip.com')
|
50
52
|
http = Net::HTTP.new(uri.host, uri.port)
|
51
|
-
http.
|
52
|
-
http.get('/?q=ruby_test_suite').read_body
|
53
|
+
http.get('/?q=1').read_body
|
53
54
|
end
|
54
55
|
|
55
56
|
traces = get_all_traces
|
@@ -59,9 +60,9 @@ describe Oboe::Inst do
|
|
59
60
|
|
60
61
|
traces[1]['Layer'].must_equal 'net-http'
|
61
62
|
traces[2]['IsService'].must_equal "1"
|
62
|
-
traces[2]['RemoteProtocol'].must_equal "
|
63
|
-
traces[2]['RemoteHost'].must_equal "www.
|
64
|
-
traces[2]['ServiceArg'].must_equal "/?q=
|
63
|
+
traces[2]['RemoteProtocol'].must_equal "HTTP"
|
64
|
+
traces[2]['RemoteHost'].must_equal "www.curlmyip.com"
|
65
|
+
traces[2]['ServiceArg'].must_equal "/?q=1"
|
65
66
|
traces[2]['HTTPMethod'].must_equal "GET"
|
66
67
|
traces[2]['HTTPStatus'].must_equal "200"
|
67
68
|
traces[2].has_key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
|
@@ -4,7 +4,7 @@ require 'memcache'
|
|
4
4
|
describe Oboe::API::Memcache do
|
5
5
|
before do
|
6
6
|
clear_all_traces
|
7
|
-
@mc = ::MemCache.new('
|
7
|
+
@mc = ::MemCache.new('127.0.0.1')
|
8
8
|
|
9
9
|
# These are standard entry/exit KVs that are passed up with all mongo operations
|
10
10
|
@entry_kvs = {
|
@@ -77,7 +77,7 @@ describe Oboe::API::Memcache do
|
|
77
77
|
|
78
78
|
validate_event_keys(traces[2], @info_kvs)
|
79
79
|
traces[2]['KVKey'].must_equal "msg"
|
80
|
-
traces[2]['RemoteHost'].must_equal "
|
80
|
+
traces[2]['RemoteHost'].must_equal "127.0.0.1"
|
81
81
|
traces[2].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
|
82
82
|
|
83
83
|
traces[3].has_key?('KVHit').must_equal true
|
@@ -7,7 +7,7 @@ if RUBY_VERSION < '2.0' and not defined?(JRUBY_VERSION)
|
|
7
7
|
|
8
8
|
before do
|
9
9
|
clear_all_traces
|
10
|
-
@mc = ::Memcached::Rails.new(:servers => ['
|
10
|
+
@mc = ::Memcached::Rails.new(:servers => ['127.0.0.1'])
|
11
11
|
|
12
12
|
# These are standard entry/exit KVs that are passed up with all mongo operations
|
13
13
|
@entry_kvs = {
|
@@ -449,6 +449,27 @@ if RUBY_VERSION >= '1.9.3'
|
|
449
449
|
validate_event_keys(traces[4], @exit_kvs)
|
450
450
|
end
|
451
451
|
|
452
|
+
it 'should trace aggregate' do
|
453
|
+
Oboe::API.start_trace('moped_test', '', {}) do
|
454
|
+
@users.aggregate(
|
455
|
+
{'$match' => {:name => "Mary"}},
|
456
|
+
{'$group' => {"_id" => "$name"}}
|
457
|
+
)
|
458
|
+
end
|
459
|
+
|
460
|
+
traces = get_all_traces
|
461
|
+
|
462
|
+
traces.count.must_equal 4
|
463
|
+
validate_outer_layers(traces, 'moped_test')
|
464
|
+
|
465
|
+
validate_event_keys(traces[1], @entry_kvs)
|
466
|
+
traces[1]['QueryOp'].must_equal "aggregate"
|
467
|
+
traces[1]['Query'].must_equal "[{\"$match\"=>{:name=>\"Mary\"}}, {\"$group\"=>{\"_id\"=>\"$name\"}}]"
|
468
|
+
traces[1]['Collection'].must_equal "users"
|
469
|
+
traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
|
470
|
+
validate_event_keys(traces[2], @exit_kvs)
|
471
|
+
end
|
472
|
+
|
452
473
|
it "should obey :collect_backtraces setting when true" do
|
453
474
|
Oboe::Config[:moped][:collect_backtraces] = true
|
454
475
|
|
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: 2.7.
|
4
|
+
version: 2.7.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Giacomo Lombardo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-12-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -213,4 +213,3 @@ test_files:
|
|
213
213
|
- test/support/liboboe_settings_test.rb
|
214
214
|
- test/support/config_test.rb
|
215
215
|
- test/support/xtrace_test.rb
|
216
|
-
has_rdoc:
|