Skip to content
Snippets Groups Projects
Commit 8a919a46 authored by cmaeder's avatar cmaeder
Browse files

use fewer routes and search in all columns

parent cd10ee01
No related branches found
No related tags found
1 merge request!2Search all fields and start with an overview by grouping identical short messages
...@@ -19,12 +19,7 @@ ...@@ -19,12 +19,7 @@
<form ng-submit="search()"> <form ng-submit="search()">
<p>restrict the number of displayed entries to support fast searches in <p>restrict the number of displayed entries to support fast searches in
every column</p> every column. Click "search" to reload choice (revealing undisplayed entries).</p>
<input type="text" ng-model="searchText" size="30"
placeholder="search"/>
in:
<select ng-model="field" ng-init="columns[shortMsg].long"
ng-options="columns[key].long for key in colProps | filter : '!id'"></select>
<input class="btn-primary" type="submit" value="search"/> <input class="btn-primary" type="submit" value="search"/>
<span> <span>
maximal entries: maximal entries:
...@@ -36,7 +31,7 @@ ...@@ -36,7 +31,7 @@
<br> <br>
<table> <table>
<thead> <thead>
<tr ng-if="results.length != 0"> <tr>
<th ng-repeat="key in colProps" ng-if="columns[key].x"> <th ng-repeat="key in colProps" ng-if="columns[key].x">
<span ng-click="sort.col = key; sort.asc = !sort.asc" <span ng-click="sort.col = key; sort.asc = !sort.asc"
style="cursor:pointer"> style="cursor:pointer">
......
...@@ -18,18 +18,21 @@ angular.module('searchApp', []).controller('SearchController', ...@@ -18,18 +18,21 @@ angular.module('searchApp', []).controller('SearchController',
$scope.number = 0; $scope.number = 0;
$scope.maxNumber = 100; $scope.maxNumber = 100;
$scope.searchText = ''; $scope.searchText = '';
$scope.query = function () { return '/' + $scope.field + $scope.query = function () {
'?limit=' + $scope.maxNumber + var res = '';
'&text=' + $scope.searchText; for (k in $scope.columns) {
res = res + '&' + k + "=" + $scope.columns[k].search;
};
return '?limit=' + $scope.maxNumber + res;
}; };
$scope.search = function() { $scope.search = function() {
$http.get('/sally/error/search' + $scope.query()).success(function(data) { $http.get('/sally/error/search2' + $scope.query()).success(function(data) {
$scope.results = data; $scope.results = data;
}); });
$scope.count(); $scope.count();
}; };
$scope.count = function() { $scope.count = function() {
$http.get('/sally/error/count' + $scope.query()).success(function(data) { $http.get('/sally/error/count2' + $scope.query()).success(function(data) {
$scope.number = data[0].count; $scope.number = data[0].count;
}); });
}; };
......
...@@ -9,12 +9,23 @@ import org.apache.camel.scala.dsl.builder.RouteBuilder ...@@ -9,12 +9,23 @@ import org.apache.camel.scala.dsl.builder.RouteBuilder
import org.apache.camel.util.jndi.JndiContext import org.apache.camel.util.jndi.JndiContext
import org.eclipse.jetty.server.handler.ResourceHandler import org.eclipse.jetty.server.handler.ResourceHandler
import scala.collection.JavaConverters._
class SearchDB(inPrefix: String, addStaticRoute: Boolean) extends RouteBuilder { class SearchDB(inPrefix: String, addStaticRoute: Boolean) extends RouteBuilder {
def query2HashMap(ex: Exchange): util.HashMap[String, String] = { def query2HashMap2(ex: Exchange): util.HashMap[String, String] = {
val hm = new util.HashMap[String, String]() val hm = new util.HashMap[String, String]()
hm.put("text", "%" + ex.getIn.getHeader("text") + "%") val inMap = ex.getIn.getHeaders.asScala
hm.put("limit", ex.getIn.getHeader("limit").toString) Table.columns map { col =>
hm.put(col, inMap.get(col) match {
case Some(v: String) if v.nonEmpty => "%" + v + "%"
case _ => "%"
})
}
hm.put("limit", inMap.get("limit") match {
case Some(v) => v.toString
case _ => "100000"
})
hm hm
} }
...@@ -25,15 +36,14 @@ class SearchDB(inPrefix: String, addStaticRoute: Boolean) extends RouteBuilder { ...@@ -25,15 +36,14 @@ class SearchDB(inPrefix: String, addStaticRoute: Boolean) extends RouteBuilder {
("log:lll" + this.getClass + "?showHeaders=true") ("log:lll" + this.getClass + "?showHeaders=true")
prefix = inPrefix + "sally/error/" prefix = inPrefix + "sally/error/"
} }
Table.columns.map { col => ((prefix + "search2") transform query2HashMap2) -->
((prefix + "count/" + col) transform ("db:SELECT * FROM errors WHERE " +
(ex => "%" + ex.getIn.getHeader("text") + "%")) --> Table.columns.map(col => col + " LIKE :#" + col).mkString(" AND ") +
("db:SELECT COUNT(*) as count FROM errors WHERE " + col + " LIKE #") marshal " LIMIT :#limit") marshal new DataFormatDefinition(new JacksonDataFormat())
((prefix + "count2") transform query2HashMap2) -->
("db:SELECT COUNT(*) as count FROM errors WHERE " +
Table.columns.map(col => col + " LIKE :#" + col).mkString(" AND ")) marshal
new DataFormatDefinition(new JacksonDataFormat()) new DataFormatDefinition(new JacksonDataFormat())
((prefix + "search/" + col) transform query2HashMap) -->
("db:SELECT * FROM errors WHERE " + col + " LIKE :#text LIMIT :#limit") marshal
new DataFormatDefinition(new JacksonDataFormat())
}
} }
object SearchDB { object SearchDB {
...@@ -42,9 +52,9 @@ object SearchDB { ...@@ -42,9 +52,9 @@ object SearchDB {
val (context, _) = Table.initArgs(args) val (context, _) = Table.initArgs(args)
val resHandler = new ResourceHandler() val resHandler = new ResourceHandler()
resHandler.setResourceBase("src/main/resource") resHandler.setResourceBase("src/main/resource")
val jdni = new JndiContext() val jndiContext = new JndiContext()
jdni.bind("staticHandler", resHandler) jndiContext.bind("staticHandler", resHandler)
context.setJndiContext(jdni) context.setJndiContext(jndiContext)
context.addRoutes(new SearchDB("jetty:http://localhost:8383/", true)) context.addRoutes(new SearchDB("jetty:http://localhost:8383/", true))
context.start() context.start()
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment