lib/stackprof-webnav/server.rb in stackprof-webnav-0.0.2 vs lib/stackprof-webnav/server.rb in stackprof-webnav-0.0.3
- old
+ new
@@ -10,23 +10,37 @@
class Server < NYNY::App
register Sprockets::NYNY
config.assets.paths << File.join(__dir__, 'css')
class << self
- attr_accessor :report_dump_path, :report_dump_url
+ attr_accessor :cmd_options, :report_dump_path, :report_dump_uri, :report_dump_listing
- def presenter
- return @presenter unless @presenter.nil?
- content = if report_dump_path.nil?
- Net::HTTP.get(URI.parse(report_dump_url))
- else
- File.open(report_dump_path).read
- end
+ def presenter regenerate=false
+ return @presenter unless regenerate || @presenter.nil?
+ process_options
+ if self.report_dump_path || self.report_dump_uri
+ report_contents = if report_dump_path.nil?
+ Net::HTTP.get(URI.parse(report_dump_uri))
+ else
+ File.open(report_dump_path).read
+ end
+ report = StackProf::Report.new(Marshal.load(report_contents))
+ end
+ @presenter = Presenter.new(report)
+ end
- report = StackProf::Report.new(Marshal.load(content))
- @presenter ||= Presenter.new(report)
+ private
+ def process_options
+ if cmd_options[:filepath]
+ self.report_dump_path = cmd_options[:filepath]
+ elsif cmd_options[:uri]
+ self.report_dump_uri = cmd_options[:uri]
+ elsif cmd_options[:bucket]
+ self.report_dump_listing = cmd_options[:bucket]
+ end
end
+
end
helpers do
def template_path name
File.join(__dir__, name)
@@ -46,17 +60,41 @@
end
def file_url path
"/file?path=#{URI.escape(path)}"
end
+
+ def overview_url path
+ "/overview?path=#{URI.escape(path)}"
+ end
end
get '/' do
- @file = Server.report_dump_path || Server.report_dump_url
+ presenter
+ if Server.report_dump_listing
+ redirect_to '/listing'
+ else
+ redirect_to '/overview'
+ end
+ end
+
+ get '/overview' do
+ if params[:path]
+ Server.report_dump_uri = params[:path]
+ Server.presenter(true)
+ end
+ @file = Server.report_dump_path || Server.report_dump_uri
@action = "overview"
@frames = presenter.overview_frames
render_with_layout :overview
end
+
+ get '/listing' do
+ @file = Server.report_dump_listing
+ @action = "listing"
+ @dumps = presenter.listing_dumps
+ render_with_layout :listing
+ end
get '/method' do
@action = params[:name]
@frames = presenter.method_info(params[:name])
render_with_layout :method