--- 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"
},
--- 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);
--- 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
--- 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' },
--- 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 @@
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid">
%= link_to 'Crash test' => url_for('index') => (class => 'navbar-brand')
+ <form id="search-box" class="navbar-form navbar-right" method="get" action="<%= url_for("index") %>" role="search">
+ <div class="form-group">
+ <input name="search" type="text" class="form-control" placeholder="Search" value="<%= param("search") %>">
+ </div>
+ <button type="submit" class="btn btn-default">Submit</button>
+ </form>
</div>
</div>
<div class="container-fluid">