# HG changeset patch # User Vincent Tondellier # Date 1422229695 -3600 # Node ID cebbfcd7deffa56384efdc1073c7f96349afdca2 # Parent 2a4d977411555dc9868f6c9fb8f090f249a78b8b Add search box, using perl Search::Query syntax diff -r 2a4d97741155 -r cebbfcd7deff CrashTest.conf --- a/CrashTest.conf Sun Jan 25 22:48:47 2015 +0100 +++ b/CrashTest.conf Mon Jan 26 00:48:15 2015 +0100 @@ -3,15 +3,15 @@ JSONStackwalker => './stackwalker', SymbolsPath => 'breakpad-debug-symbols/*', }, +# Storage => { +# Type => "CrashTest::Storage::FileSystem", +# DataDir => 'data/', +# }, Storage => { - Type => "CrashTest::Storage::FileSystem", + Type => "CrashTest::Storage::Sql", + DSN => "dbi:SQLite:dbname=data/db.sqlite", DataDir => 'data/', }, -# Storage => { -# Type => "CrashTest::Storage::Sql", -# DSN => "dbi:SQLite:dbname=data/db.sqlite", -# DataDir => 'data/', -# }, DecodeQueue => { Type => "CrashTest::Decode::Queue::NoQueue" }, diff -r 2a4d97741155 -r cebbfcd7deff CrashTest.pl --- a/CrashTest.pl Sun Jan 25 22:48:47 2015 +0100 +++ b/CrashTest.pl Mon Jan 26 00:48:15 2015 +0100 @@ -63,7 +63,7 @@ $self->validation->required('page')->like(qr/^[0-9]+$/); $page = scalar $self->validation->param("page") if $self->validation->is_valid('page'); - my $result = $self->app->storage->index($page, $crashs_per_page); + my $result = $self->app->storage->index($page, $crashs_per_page, $self->req->param('search')); $self->stash(files => $result->{crashs}); $self->stash(pager => $result->{pager}); @@ -100,6 +100,8 @@ # save the dump in a file my $file = $self->req->upload('upload_file_minidump'); + + # TODO check for authorised values ... my %paramshash = map { $_ => $self->req->param($_) } $self->req->param; my ($uuid, $uuidstr); diff -r 2a4d97741155 -r cebbfcd7deff dist.ini --- a/dist.ini Sun Jan 25 22:48:47 2015 +0100 +++ b/dist.ini Mon Jan 26 00:48:15 2015 +0100 @@ -21,8 +21,8 @@ format = %-9v %{yyyy-MM-dd}d [Prereqs] -Mojolicious = >= 5.48 -Mojolicious::Plugin::BootstrapPagination = 0.0.9 +Mojolicious = 5.48 +Mojolicious::Plugin::BootstrapPagination = 0.12 UUID = 0.0.3 [Prereqs / RuntimeRecommends] ; Gearman Queue (also contains the Worker class) @@ -31,6 +31,9 @@ DBIx::Class::DeploymentHandler = 0.002000 DBIx::Class = 0.08196 DBIx::Class::Candy = 0.002100 +; For search field (only for SQL) +Search::Query = 0.300 +Search::Query::Dialect::DBIxClass = 0.005 ; PostgreSQL DateTime::Format::Pg = 0 DBD::Pg = 0 diff -r 2a4d97741155 -r cebbfcd7deff lib/CrashTest/Storage/Sql.pm --- a/lib/CrashTest/Storage/Sql.pm Sun Jan 25 22:48:47 2015 +0100 +++ b/lib/CrashTest/Storage/Sql.pm Mon Jan 26 00:48:15 2015 +0100 @@ -16,6 +16,7 @@ use Mojo::JSON qw/j/; use DateTime; use CrashTest::Storage::Sql::Schema; +use Search::Query; sub new { my $self = shift->SUPER::new(@_); @@ -26,10 +27,30 @@ } sub index { - my ($self, $page, $nperpage) = @_; + my ($self, $page, $nperpage, $search_str) = @_; + + my $dbic_query = {}; - my $dbcrashs = $self->{schema}->resultset('CrashReport')->search( - undef, + if(defined($search_str) && $search_str ne "") { + my $search_fields = { + user_id => { alias_for => 'crash_user.user_id' }, + product => { alias_for => 'product.name' }, + version => { alias_for => 'product.version' }, + channel => { alias_for => 'product.release_channel' }, + }; + my $query = Search::Query->parser( + dialect => 'DBIxClass', + fields => $search_fields, + default_field => [qw( product.name product.version )], + )->parse($search_str); + + if(defined($query)) { + $dbic_query = $query->as_dbic_query; + } + } + + my $dbcrashs = $self->{schema}->resultset('CrashReport')->search_rs( + $dbic_query, { prefetch => [ 'product', 'crash_user' ], order_by => { -desc => 'crash_time' }, diff -r 2a4d97741155 -r cebbfcd7deff templates/layouts/main.html.ep --- a/templates/layouts/main.html.ep Sun Jan 25 22:48:47 2015 +0100 +++ b/templates/layouts/main.html.ep Mon Jan 26 00:48:15 2015 +0100 @@ -25,6 +25,12 @@