lib/hotch.rb in hotch-0.0.3 vs lib/hotch.rb in hotch-0.1.0
- old
+ new
@@ -2,14 +2,16 @@
require 'tmpdir'
require 'hotch/monkey_patches'
class Hotch
- attr_reader :name
+ attr_reader :name, :viewer, :filter
- def initialize(name)
+ def initialize(name, viewer: nil, filter: nil)
@name = name
+ @viewer = viewer
+ @filter = filter
@reports = []
end
def start(*args)
StackProf.start(*args) unless StackProf.running?
@@ -43,21 +45,22 @@
svg = convert_svg(dir, dot, "profile.svg")
yield svg
end
- def report_at_exit(viewer=ENV['HOTCH_VIEWER'])
+ def report_at_exit
return if defined? @at_exit_installed
at_exit do
stop
report do |svg|
- puts "Profile SVG: #{svg}"
-
if viewer
+ puts "Profile SVG: #{svg}"
Kernel.system viewer, svg
+ else
+ puts "Profile SVG: view #{svg} # no HOTCH_VIEWER set"
end
end
end
@at_exit_installed = true
@@ -78,11 +81,11 @@
end
def report_dot(report, dir, file)
path = File.join(dir, file)
File.open(path, 'wb') do |fh|
- report.print_graphviz(nil, fh)
+ report.print_graphviz(filter && Regexp.new(filter), fh)
end
path
end
def convert_svg(dir, dot, file)
@@ -90,15 +93,15 @@
system("dot", "-Tsvg", "-o", svg, dot) or raise "dot failed"
svg
end
end
-def Hotch(aggregate: true)
+def Hotch(name: $0, aggregate: true, viewer: ENV['HOTCH_VIEWER'], filter: ENV['HOTCH_FILTER'])
hotch = if aggregate
- $hotch ||= Hotch.new($0)
+ $hotch ||= Hotch.new(name, viewer: viewer, filter: filter)
else
caller = Kernel.caller_locations(1).first
- Hotch.new("#$0:#{caller.path}:#{caller.lineno}")
+ Hotch.new("#{name}:#{caller.path}:#{caller.lineno}", viewer: viewer, filter: filter)
end
hotch.report_at_exit
hotch.run do
yield