diff -r 703f1af889d1 -r 013953be0f3b CrashTest.pl --- a/CrashTest.pl Thu Aug 07 23:56:47 2014 +0200 +++ b/CrashTest.pl Fri Aug 08 00:00:49 2014 +0200 @@ -15,15 +15,11 @@ use Mojolicious::Lite; use UUID; -use Mojo::JSON; -use Mojo::ByteStream 'b'; -use Mojo::UserAgent; use lib 'lib'; -my @valid_params = qw/Add-ons Distributor ProductName ReleaseChannel StartupTime UserID Version BuildID CrashTime Comments/; -my $config = plugin 'Config'; - -plugin 'TagHelpers::BootstrapPagination'; +use CrashTest::Models::Frame; +use CrashTest::Models::Thread; +use CrashTest::StackFilter; app->attr(storage => sub { my $self = shift; @@ -53,54 +49,6 @@ ); }); -helper scm_file_link => sub { - my ($self, $file, $line) = @_; - - return "" unless(defined($file)); - - if($file =~ qr{([a-z]+):([a-z/.]+):(.+):(\d+)}) - { - my ($scm, $repo, $scmpath, $rev) = ($1, $2, $3, $4); - my $filename = File::Spec->splitpath($scmpath); - my $scmrepo = "$scm:$repo"; - if(exists($config->{ScmLinks}->{$scmrepo})) { - return b($self->link_to("$filename:$line" => - $self->render(inline => $config->{ScmLinks}->{$scmrepo}, - repo => $repo, scmpath => $scmpath, rev => $rev, line => $line, partial => 1) - )); - } - #return $file; - } - my $filebase = (File::Spec->splitpath($file))[-1]; - if(defined($line) && $line ne "") { - return "$filebase:$line"; - } - return $filebase; -}; - -helper shorten_signature => sub { - my ($self, $signature) = @_; - - return "" if(!defined($signature) || $signature eq ""); - - my $short_signature = $signature; - if($signature =~ qr{([^<]+)<.+>::([^()]+)\(.*\)(.*)}) { - # c++ with template - $short_signature = "$1<>::$2()$3"; - } elsif($signature =~ qr{([^()]+)\(.*\)(.*)}) { - # c/c++ - $short_signature = "$1()$2"; - } - return b($self->t(span => (title => $signature, class => "shortened-signature") => $short_signature)); -}; - -helper xml_escape_block => sub { - my ($c, $block) = @_; - my $result = $block->(); - $result = xml_escape $result; - return Mojo::ByteStream->new($result); -}; - get '/' => sub { my $self = shift; my $page = 1; @@ -116,13 +64,32 @@ get '/report/:uuid' => [ uuid => qr/[0-9a-fA-F-]+/ ] => sub { my $self = shift; - $self->stash(processed_data => $self->app->storage->get_processed_data($self->param('uuid'))); + + my $data = $self->app->storage->get_processed_data($self->param('uuid')); + $self->stash(processed_data => $data); + + my $stackfilter = CrashTest::StackFilter->new(config => $self->app->config, app => $self->app); + + my $crashing_thread = CrashTest::Models::Thread->new($data->{crashing_thread}); + $crashing_thread = $stackfilter->apply($crashing_thread); + $self->stash(crashing_thread => $crashing_thread); + + my $threads = []; + foreach my $raw_thread(@{$data->{threads}}) { + my $thread = CrashTest::Models::Thread->new($raw_thread); + $thread = $stackfilter->apply($thread); + push $threads, $thread; + } + $self->stash(threads => $threads); + $self->render('report/crash'); } => 'report'; post '/submit' => sub { my $self = shift; + #my @valid_params = qw/Add-ons Distributor ProductName ReleaseChannel StartupTime UserID Version BuildID CrashTime Comments/; + # save the dump in a file my $file = $self->req->upload('upload_file_minidump'); my %paramshash = map { $_ => $self->req->param($_) } $self->req->param; @@ -139,12 +106,17 @@ $self->render(text => $pjson->{status}); } ); - -}; +} => 'submit'; app->secrets([ 'My secret passphrase here' ]); push @{app->commands->namespaces}, 'CrashTest::Commands'; +push @{app->plugins->namespaces}, 'CrashTest::Helpers'; + +plugin 'Config'; +plugin 'TagHelpers::BootstrapPagination'; +plugin 'CrashTestHelpers'; + app->start;