tracing 2.0.0
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.
- checksums.yaml +7 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +19 -0
- data/README.rdoc +86 -0
- data/Rakefile +89 -0
- data/VERSION +1 -0
- data/lib/tracing/version.rb +3 -0
- data/lib/tracing.rb +281 -0
- data/tracing.gemspec +44 -0
- metadata +141 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 20ef811dadb9ee19941f4848e9ba99ae47f705c1
|
4
|
+
data.tar.gz: a6f2ee9abc71081e56b8f1a1c6d85e526952d284
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b7f5e1d033b5d162496945ba150ebb692f89766bd902e5629a2bd8dac33f1aecacbf17d6bc60988d8d3e91771bd21fab82b42a3e58e5610723be1e2b01ad4915
|
7
|
+
data.tar.gz: d68c6e4611334cb883756fefeeeb36cb4768461aaffdc4fdaf34f51ee87cb5f247b2d655b16164c708f5eb674ef0bff6ccf42a4c975255b093f5893a2d40ae15
|
data/Gemfile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
group :test do
|
6
|
+
# rcov 1.0.0 is broken for jruby, so 0.9.11 is the only one available.
|
7
|
+
#gem 'rcov', '~> 0.9.11', :platforms => [:jruby, :mri_18], :require => false
|
8
|
+
#gem 'simplecov', '~> 0.6', '>= 0.6.4', :platforms => :mri_19, :require => false
|
9
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2015 Clifford Heath.
|
2
|
+
|
3
|
+
This software is provided 'as-is', without any express or implied warranty.
|
4
|
+
In no event will the authors be held liable for any damages arising from the
|
5
|
+
use of this software.
|
6
|
+
|
7
|
+
Permission is granted to anyone to use this software for any purpose,
|
8
|
+
including commercial applications, and to alter it and redistribute it
|
9
|
+
freely, subject to the following restrictions:
|
10
|
+
|
11
|
+
1. The origin of this software must not be misrepresented; you must not
|
12
|
+
claim that you wrote the original software. If you use this software
|
13
|
+
in a product, an acknowledgment in the product documentation would be
|
14
|
+
appreciated but is not required.
|
15
|
+
|
16
|
+
2. Altered source versions must be plainly marked as such, and must not be
|
17
|
+
misrepresented as being the original software.
|
18
|
+
|
19
|
+
3. This notice may not be removed or altered from any source distribution.
|
data/README.rdoc
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
= tracing
|
2
|
+
|
3
|
+
Tracing provides a single method call *trace* which is used in a number of ways
|
4
|
+
to generated highly configurable nested tracing output from your program.
|
5
|
+
Each trace key is defined by a symbolic keyword, which is enabled by
|
6
|
+
including it in a comma-separated list in the TRACE environment variable.
|
7
|
+
|
8
|
+
== INSTALL:
|
9
|
+
|
10
|
+
* sudo gem install tracing
|
11
|
+
|
12
|
+
== USAGE:
|
13
|
+
|
14
|
+
require 'tracing'
|
15
|
+
|
16
|
+
When *trace* is called with no arguments, it returns the Tracer singleton object.
|
17
|
+
The API of this object is defined below. You probably don't need to use this.
|
18
|
+
|
19
|
+
If called with one argument, that should be a Symbol, which is the trace key.
|
20
|
+
Nothing is printed, and the return value is true if this trace key is enabled.
|
21
|
+
|
22
|
+
Normal calls to *trace* take two or more arguments, and an optional block.
|
23
|
+
|
24
|
+
The first argument is a Symbol, which is the trace key.
|
25
|
+
|
26
|
+
The second and any subsequent arguments are either a String (or anything that can be *join*ed)
|
27
|
+
or a Proc (or anything which can be called), which is evaluated and printed
|
28
|
+
if the trace key is enabled.
|
29
|
+
|
30
|
+
If a block is passed, the nesting level is increased (if this key was enabled),
|
31
|
+
the block is called, and *trace* returns its return value (restoring the nesting).
|
32
|
+
|
33
|
+
== SPECIAL TRACE KEYS
|
34
|
+
|
35
|
+
Specific TRACE keys configure internal behaviour:
|
36
|
+
|
37
|
+
* *debug* pre-loads a Ruby debugger at the start of the run, so it has the full context available
|
38
|
+
|
39
|
+
* *help* runs the program, and at exit, prints all trace keys that were available during that run.
|
40
|
+
|
41
|
+
* *keys* causes each output line to be prefixed by its trace key
|
42
|
+
|
43
|
+
* *all* enables all trace keys (this also enables *keys*)
|
44
|
+
|
45
|
+
* *firstaid* enter the debugger inside the Exception constructor so you can inspect the local context
|
46
|
+
|
47
|
+
* *trap* trap SIGINT (^C) in a block that allows inspecting or continuing execution (not all debuggers support this)
|
48
|
+
|
49
|
+
* *flame* - use ruby-prof-flamegraph to display the performance profile as a flame graph using SVG
|
50
|
+
|
51
|
+
The debugger is chosen from ENV['DEBUG_PREFERENCE'] or the first to load of: byebug, pry. debugger, ruby-trace
|
52
|
+
|
53
|
+
== TRACER API
|
54
|
+
|
55
|
+
The Tracer supports the following methods:
|
56
|
+
|
57
|
+
* *reinitialize*() clear all trace keys and re-initialise from the TRACE enfironment variable
|
58
|
+
|
59
|
+
* *available_keys*() returns an array of the keys seen so far this run
|
60
|
+
|
61
|
+
* *enabled?*(key) returns true if key is enabled
|
62
|
+
|
63
|
+
* *enabled*() returns an array of all enabked keys
|
64
|
+
|
65
|
+
* *enable*(key) enables that key
|
66
|
+
|
67
|
+
* *disable*(key) disables that key
|
68
|
+
|
69
|
+
* *toggle*(key) toggles that key
|
70
|
+
|
71
|
+
* *display*(string) prints the string to standard output. You can monkey-patch this to divert the output.
|
72
|
+
|
73
|
+
== Contributing to tracing
|
74
|
+
|
75
|
+
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
76
|
+
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
|
77
|
+
* Fork the project
|
78
|
+
* Start a feature/bugfix branch
|
79
|
+
* Commit and push until you are happy with your contribution
|
80
|
+
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
81
|
+
* Please try not to mess with the Rakefile or gem version.rb
|
82
|
+
|
83
|
+
== Copyright
|
84
|
+
|
85
|
+
Copyright (c) 2016 Clifford Heath. See LICENSE.txt for further details.
|
86
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
require 'rdoc/task'
|
4
|
+
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
|
7
|
+
task :default => :spec
|
8
|
+
|
9
|
+
desc "Bump gem version patch number"
|
10
|
+
task :bump do
|
11
|
+
path = File.expand_path('../lib/activefacts/api/version.rb', __FILE__)
|
12
|
+
lines = File.open(path) do |fp| fp.readlines; end
|
13
|
+
File.open(path, "w") do |fp|
|
14
|
+
fp.write(
|
15
|
+
lines.map do |line|
|
16
|
+
line.gsub(/(VERSION *= *"[0-9.]*\.)([0-9]+)"\n/) do
|
17
|
+
version = "#{$1}#{$2.to_i+1}"
|
18
|
+
puts "Version bumped to #{version}\""
|
19
|
+
version+"\"\n"
|
20
|
+
end
|
21
|
+
end*''
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Run Rspec tests"
|
27
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
28
|
+
t.rspec_opts = %w{-f d}
|
29
|
+
end
|
30
|
+
|
31
|
+
namespace :spec do
|
32
|
+
namespace :rubies do
|
33
|
+
SUPPORTED_RUBIES = %w{ 1.9.2 1.9.3 2.0.0 jruby-1.7.0 }
|
34
|
+
|
35
|
+
desc "Run Rspec tests on all supported rubies"
|
36
|
+
task :all_tasks => [:install_gems, :exec]
|
37
|
+
|
38
|
+
desc "Run `bundle install` on all rubies"
|
39
|
+
task :install_gems do
|
40
|
+
sh %{ rvm #{SUPPORTED_RUBIES.join(',')} exec bundle install }
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "Run `bundle exec rake` on all rubies"
|
44
|
+
task :exec do
|
45
|
+
sh %{ rvm #{SUPPORTED_RUBIES.join(',')} exec bundle exec rake spec }
|
46
|
+
end
|
47
|
+
|
48
|
+
SUPPORTED_RUBIES.each do |ruby|
|
49
|
+
desc "Run `bundle install` on #{ruby}"
|
50
|
+
task :"install_gems_#{ruby}" do
|
51
|
+
sh %{ rvm #{ruby} exec bundle install }
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "Run `bundle exec rake` on #{ruby}"
|
55
|
+
task :"exec_#{ruby}" do
|
56
|
+
sh %{ rvm #{ruby} exec bundle exec rake spec }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "Run RSpec tests and produce coverage files (results viewable in coverage/index.html)"
|
64
|
+
RSpec::Core::RakeTask.new(:coverage) do |spec|
|
65
|
+
if RUBY_VERSION < '1.9'
|
66
|
+
spec.rcov_opts = %{ --exclude spec --exclude lib/activefacts/tracer.rb --exclude gem/* }
|
67
|
+
spec.rcov = true
|
68
|
+
else
|
69
|
+
spec.rspec_opts = %w{ --require simplecov_helper }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
task :cov => :coverage
|
74
|
+
task :rcov => :coverage
|
75
|
+
task :simplecov => :coverage
|
76
|
+
|
77
|
+
Rake::RDocTask.new do |rdoc|
|
78
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
79
|
+
|
80
|
+
rdoc.rdoc_dir = 'rdoc'
|
81
|
+
rdoc.title = "activefacts-api #{version}"
|
82
|
+
rdoc.rdoc_files.include('README*')
|
83
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
84
|
+
end
|
85
|
+
|
86
|
+
task :wait do
|
87
|
+
print "Waiting for you to hit Enter"
|
88
|
+
$stdin.gets
|
89
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.8.2
|
data/lib/tracing.rb
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
#
|
2
|
+
# Tracer.
|
3
|
+
#
|
4
|
+
# The trace() method supports indented tracing.
|
5
|
+
#
|
6
|
+
# Trace keys:
|
7
|
+
# The first argument is normally a symbol which is the key for related trace calls.
|
8
|
+
# Set the TRACE environment variable to enable it, or add trace.enable(:key) to a CLI.
|
9
|
+
# A call to trace without a first symbol argument is always enabled (as if by :all)
|
10
|
+
#
|
11
|
+
# Message arguments:
|
12
|
+
# Each subsequent argument is either
|
13
|
+
# - a String (or anything that can be join()ed), or
|
14
|
+
# - a Proc (or anything that can be called) that returns such a string.
|
15
|
+
# Proc arguments will be called only if the trace key is enabled.
|
16
|
+
# If the key is enabled (or not present) the Trace strings will be joined and emitted.
|
17
|
+
#
|
18
|
+
# Trace blocks:
|
19
|
+
# A block passed to the trace method will always be called, and trace will always return its value.
|
20
|
+
# Any trace emitted from within such a block will be indented if the current trace key is enabled.
|
21
|
+
#
|
22
|
+
# Special trace key options for nesting blocks:
|
23
|
+
# - A trace key ending in ! is enabled if the base key is enabled, but enables all
|
24
|
+
# nested trace calls whether or not their key is enabled.
|
25
|
+
# - A trace key ending in ? is enabled if the base key is enabled, but is emitted
|
26
|
+
# only if (and just before) the nested block emits a trace message
|
27
|
+
#
|
28
|
+
# Testing whether a trace key is enabled:
|
29
|
+
# A call to trace with a key but without a block will return true if the key is enabled
|
30
|
+
#
|
31
|
+
# A call to trace with no arguments returns the Tracer object itself.
|
32
|
+
#
|
33
|
+
# Built-in trace keys and behaviour:
|
34
|
+
# help - list (at exit) all trace keys that became available during the run
|
35
|
+
# all - enable all trace keys
|
36
|
+
# keys - display the trace key for every trace message (automatically enabled by :all)
|
37
|
+
# debug - prepare a Ruby debugger at the start of the run, so it has the full context available
|
38
|
+
# firstaid - enter the debugger inside the Exception constructor so you can inspect the local context
|
39
|
+
# trap - trap SIGINT (^C) in a block that allows inspecting or continuing execution (not all debuggers support this)
|
40
|
+
# flame - use ruby-prof-flamegraph to display the performance profile as a flame graph using SVG
|
41
|
+
#
|
42
|
+
# The debugger is chosen from ENV['DEBUG_PREFERENCE'] or the first to load of: byebug, pry. debugger, ruby-trace
|
43
|
+
#
|
44
|
+
# Copyright (c) 2009-2015 Clifford Heath. Read the LICENSE file.
|
45
|
+
#
|
46
|
+
module Tracing
|
47
|
+
(class << self; self; end).class_eval do
|
48
|
+
attr_accessor :tracer
|
49
|
+
end
|
50
|
+
|
51
|
+
class Tracer
|
52
|
+
def initialize
|
53
|
+
reinitialize
|
54
|
+
end
|
55
|
+
|
56
|
+
def reinitialize
|
57
|
+
@indent = 0 # Current nesting level of enabled trace blocks
|
58
|
+
@nested = false # Set when a block enables all enclosed tracing
|
59
|
+
@available = {} # Hash of available trace keys, accumulated during the run
|
60
|
+
@delayed = nil # A delayed message, emitted only if the enclosed block emits tracing
|
61
|
+
|
62
|
+
@keys = {}
|
63
|
+
if (e = ENV["TRACE"])
|
64
|
+
e.split(/[^_a-zA-Z0-9]/).each{|k| enable(k) }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def trace(*args, &block)
|
69
|
+
begin
|
70
|
+
old_indent, old_nested, old_delayed, enabled = @indent, @nested, @delayed, show(*args)
|
71
|
+
# This monstrosity reduces the steps when single-stepping:
|
72
|
+
block ? yield : (args.size == 0 ? self : enabled)
|
73
|
+
ensure
|
74
|
+
@indent, @nested, @delayed = old_indent, old_nested, old_delayed
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def available_keys
|
79
|
+
@available.keys
|
80
|
+
end
|
81
|
+
|
82
|
+
def enabled? key
|
83
|
+
!key.empty? && @keys[key.to_sym]
|
84
|
+
end
|
85
|
+
|
86
|
+
def enabled
|
87
|
+
@keys.keys
|
88
|
+
end
|
89
|
+
|
90
|
+
def enable key
|
91
|
+
if !key.empty? && !@keys[s = key.to_sym]
|
92
|
+
@keys[s] = true
|
93
|
+
setup_help if s == :help
|
94
|
+
setup_flame if s == :flame
|
95
|
+
else
|
96
|
+
true
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def disable key
|
101
|
+
!key.empty? and @keys.delete(key.to_sym)
|
102
|
+
end
|
103
|
+
|
104
|
+
def toggle key
|
105
|
+
if !key.empty?
|
106
|
+
if enabled?(key)
|
107
|
+
disable(key)
|
108
|
+
false
|
109
|
+
else
|
110
|
+
enable(key)
|
111
|
+
true
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def setup_help
|
117
|
+
at_exit {
|
118
|
+
$stderr.puts "---\nTracing keys available: #{@available.keys.map{|s| s.to_s}.sort*", "}"
|
119
|
+
}
|
120
|
+
end
|
121
|
+
|
122
|
+
def setup_flame
|
123
|
+
require 'ruby-prof'
|
124
|
+
require 'ruby-prof-flamegraph'
|
125
|
+
profile_result = RubyProf.start
|
126
|
+
at_exit {
|
127
|
+
profile_result2 = RubyProf.stop
|
128
|
+
printer = RubyProf::FlameGraphPrinter.new(profile_result2)
|
129
|
+
data_file = "/tmp/flamedata_#{Process.pid}.txt"
|
130
|
+
svg_file = "/tmp/flamedata_#{Process.pid}.svg"
|
131
|
+
flamegraph = File.dirname(__FILE__)+"/flamegraph.pl"
|
132
|
+
File.popen("tee #{data_file} | perl #{flamegraph} --countname=ms --width=4800 > #{svg_file}", "w") { |f|
|
133
|
+
printer.print(f, {})
|
134
|
+
}
|
135
|
+
STDERR.puts("Flame graph dumped to file:///#{svg_file}")
|
136
|
+
}
|
137
|
+
end
|
138
|
+
|
139
|
+
def setup_debugger
|
140
|
+
begin
|
141
|
+
require 'ruby-trace '
|
142
|
+
Debugger.start # (:post_mortem => true) # Some Ruby versions crash on post-mortem debugging
|
143
|
+
rescue LoadError
|
144
|
+
# Ok, no debugger, tough luck.
|
145
|
+
end
|
146
|
+
|
147
|
+
if trace :trap
|
148
|
+
trap('SIGINT') do
|
149
|
+
puts "Stopped at:\n\t"+caller*"\n\t"
|
150
|
+
debugger
|
151
|
+
true # Stopped on SIGINT
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
errors = []
|
156
|
+
(
|
157
|
+
[ENV["DEBUG_PREFERENCE"]].compact +
|
158
|
+
[
|
159
|
+
'byebug',
|
160
|
+
'pry',
|
161
|
+
'debugger',
|
162
|
+
'ruby-trace '
|
163
|
+
]
|
164
|
+
).each do |debugger|
|
165
|
+
begin
|
166
|
+
require debugger
|
167
|
+
if debugger == 'byebug'
|
168
|
+
Kernel.class_eval do
|
169
|
+
alias_method :debugger, :byebug
|
170
|
+
end
|
171
|
+
end
|
172
|
+
::Debugger.start if (const_get(::Debugger) rescue nil)
|
173
|
+
return
|
174
|
+
rescue LoadError => e
|
175
|
+
errors << e
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
# Report when we couldn't load any debugger
|
180
|
+
$stderr.p errors
|
181
|
+
end
|
182
|
+
|
183
|
+
def setup_firstaid
|
184
|
+
if trace :firstaid
|
185
|
+
puts "Preparing first aid kit"
|
186
|
+
::Exception.class_eval do
|
187
|
+
alias_method :firstaid_initialize, :initialize
|
188
|
+
|
189
|
+
def initialize *args, &b
|
190
|
+
send(:firstaid_initialize, *args, &b)
|
191
|
+
return if NoMethodError === self && message =~ /^undefined method `to_ary' for \#<Gem::Specification/
|
192
|
+
return if LoadError == self
|
193
|
+
puts "Stopped due to #{self.class}: #{message} at "+caller*"\n\t"
|
194
|
+
debugger
|
195
|
+
true # Stopped in Exception constructor
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def display key, msg
|
202
|
+
puts msg
|
203
|
+
end
|
204
|
+
|
205
|
+
private
|
206
|
+
def show(*args)
|
207
|
+
key, enabled_prefix = *selected?(args)
|
208
|
+
|
209
|
+
# Emit the message if enabled or a parent is:
|
210
|
+
if enabled_prefix && args.size > 0
|
211
|
+
message =
|
212
|
+
"\##{enabled_prefix} " +
|
213
|
+
' '*@indent +
|
214
|
+
args.
|
215
|
+
map{|a| a.respond_to?(:call) ? a.call : a}.
|
216
|
+
join(' ')
|
217
|
+
|
218
|
+
if @delayed == true
|
219
|
+
@delayed = message # Arrange to display this message later, if necessary
|
220
|
+
elsif @delayed
|
221
|
+
display key, @delayed # Display a delayed message, then the current one
|
222
|
+
@delayed = nil
|
223
|
+
display key, message
|
224
|
+
else
|
225
|
+
display key, message
|
226
|
+
end
|
227
|
+
end
|
228
|
+
@indent += (enabled_prefix ? 1 : 0)
|
229
|
+
!!enabled_prefix
|
230
|
+
end
|
231
|
+
|
232
|
+
def selected?(args)
|
233
|
+
# Figure out whether this trace is enabled (itself or by :all), if it nests, and if we should print the key:
|
234
|
+
key =
|
235
|
+
if Symbol === args[0]
|
236
|
+
control = args.shift
|
237
|
+
case s = control.to_s
|
238
|
+
when /!\Z/ # Enable all nested trace calls
|
239
|
+
nested = true
|
240
|
+
s.sub(/!\Z/, '').to_sym
|
241
|
+
when /\?\Z/ # Delay this message until a nested active trace
|
242
|
+
@delayed = true
|
243
|
+
s.sub(/\?\Z/, '').to_sym
|
244
|
+
else
|
245
|
+
control
|
246
|
+
end
|
247
|
+
else
|
248
|
+
:all
|
249
|
+
end
|
250
|
+
|
251
|
+
@available[key] ||= key # Remember that this trace was requested, for help
|
252
|
+
if @nested || # This trace is enabled because it's in a nested block
|
253
|
+
@keys[key] || # This trace is enabled in its own right
|
254
|
+
@keys[:all] # This trace is enabled because all are
|
255
|
+
if @keys[:keys] || @keys[:all] # Use a formatting prefix?
|
256
|
+
enabled_prefix = " %-15s"%key
|
257
|
+
@keys[key] = enabled_prefix if @keys[key] == true # Save the formatting prefix
|
258
|
+
else
|
259
|
+
enabled_prefix = ''
|
260
|
+
end
|
261
|
+
@nested ||= nested # Activate nesting, if requested
|
262
|
+
end
|
263
|
+
|
264
|
+
[key, enabled_prefix]
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
# Make the trace method globally available:
|
271
|
+
class Object
|
272
|
+
def trace *args, &block
|
273
|
+
(Tracing.tracer ||= Tracing::Tracer.new).trace(*args, &block)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
# Load the ruby debugger before everything else, if requested
|
278
|
+
if trace(:debug) or trace(:firstaid) or trace(:trap)
|
279
|
+
trace.setup_debugger
|
280
|
+
trace.setup_firstaid
|
281
|
+
end
|
data/tracing.gemspec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'tracing/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "tracing"
|
8
|
+
spec.version = Tracing::VERSION
|
9
|
+
spec.authors = ["Clifford Heath"]
|
10
|
+
spec.email = ["clifford.heath@gmail.com"]
|
11
|
+
spec.date = "2015-10-02"
|
12
|
+
|
13
|
+
spec.summary = "A nested tracing API for user defined trace classes"
|
14
|
+
spec.description = %q{
|
15
|
+
Enable tracing by setting the TRACE environment variable to a list of the
|
16
|
+
names of trace classes you want to investigate. The enabled tracing is
|
17
|
+
generated in a nested format, with significant support for exceptions and
|
18
|
+
debugging.
|
19
|
+
}
|
20
|
+
spec.homepage = "https://github.com/cjheath/tracing"
|
21
|
+
spec.license = "MIT"
|
22
|
+
|
23
|
+
spec.bindir = "exe"
|
24
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
|
+
spec.require_paths = ["lib"]
|
26
|
+
|
27
|
+
spec.extra_rdoc_files = [
|
28
|
+
"LICENSE.txt",
|
29
|
+
"README.rdoc"
|
30
|
+
]
|
31
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
32
|
+
|
33
|
+
spec.add_runtime_dependency(%q<rbtree-pure>, [">= 0.1.1", "~> 0"])
|
34
|
+
|
35
|
+
spec.add_development_dependency "bundler", ">= 1.10", "~> 1.10.6"
|
36
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
37
|
+
spec.add_development_dependency "rspec", "~> 3.3"
|
38
|
+
|
39
|
+
spec.add_runtime_dependency(%q<ruby-debug>, ["~> 0"]) if RUBY_VERSION < "1.9"
|
40
|
+
spec.add_runtime_dependency(%q<debugger>, ["~> 1"]) if RUBY_VERSION =~ /^1\.9/ or RUBY_VERSION =~ /^2\.0/
|
41
|
+
spec.add_runtime_dependency(%q<byebug>, ["~> 1"]) if RUBY_VERSION =~ /^2\.1/
|
42
|
+
# spec.add_development_dependency(%q<pry>, ["~> 0"]) # rbx, jruby
|
43
|
+
end
|
44
|
+
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tracing
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Clifford Heath
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rbtree-pure
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.1
|
20
|
+
- - "~>"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.1.1
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: bundler
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.10'
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.10.6
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.10'
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.10.6
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rake
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '10.0'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '10.0'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rspec
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '3.3'
|
74
|
+
type: :development
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '3.3'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: byebug
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '1'
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '1'
|
95
|
+
description: |2
|
96
|
+
|
97
|
+
Enable tracing by setting the TRACE environment variable to a list of the
|
98
|
+
names of trace classes you want to investigate. The enabled tracing is
|
99
|
+
generated in a nested format, with significant support for exceptions and
|
100
|
+
debugging.
|
101
|
+
email:
|
102
|
+
- clifford.heath@gmail.com
|
103
|
+
executables: []
|
104
|
+
extensions: []
|
105
|
+
extra_rdoc_files:
|
106
|
+
- LICENSE.txt
|
107
|
+
- README.rdoc
|
108
|
+
files:
|
109
|
+
- Gemfile
|
110
|
+
- LICENSE.txt
|
111
|
+
- README.rdoc
|
112
|
+
- Rakefile
|
113
|
+
- VERSION
|
114
|
+
- lib/tracing.rb
|
115
|
+
- lib/tracing/version.rb
|
116
|
+
- tracing.gemspec
|
117
|
+
homepage: https://github.com/cjheath/tracing
|
118
|
+
licenses:
|
119
|
+
- MIT
|
120
|
+
metadata: {}
|
121
|
+
post_install_message:
|
122
|
+
rdoc_options: []
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
requirements: []
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 2.2.2
|
138
|
+
signing_key:
|
139
|
+
specification_version: 4
|
140
|
+
summary: A nested tracing API for user defined trace classes
|
141
|
+
test_files: []
|