Browse Source

added detection of empty fields

Rashid Khan 13 years ago
parent
commit
9c7cd28023
4 changed files with 11 additions and 67 deletions
  1. 9 1
      common/lib/shared.js
  2. 1 4
      panels/fields/module.js
  3. 1 3
      panels/table/module.js
  4. 0 59
      sharable.json

+ 9 - 1
common/lib/shared.js

@@ -134,7 +134,7 @@ function get_field_value(object,field,opt) {
 function get_all_values_for_field(docs,field) {
   var field_array = [];
   _.each(docs, function(doc,k) {
-    var value = doc[field]
+    var value = doc[field] || ""
     if(typeof value === 'object' && value != null) {
       field_array.push.apply(field_array,value);
     } else {
@@ -149,6 +149,14 @@ function top_field_values(docs,field,count) {
   return _.pairs(counts).sort(function(a, b) {return a[1] - b[1]}).reverse().slice(0,count)
 }
 
+function add_to_query(original,field,value) {
+  if(value !== '')
+    var query = field + ":" + "\"" + addslashes(value.toString()) + "\"";
+  else
+    var query = "_missing_:" + field;
+  var glue = original != "" ? " AND " : "";
+  return original + glue + query;
+}
  /**
    * Calculate a graph interval
    *

+ 1 - 4
panels/fields/module.js

@@ -24,7 +24,6 @@ angular.module('kibana.fields', [])
   }
 
   $scope.toggle_micropanel = function(field) {
-    //console.log(top_field_values($scope.docs,field,10))
     $scope.micropanel = {
       field: field,
       values : top_field_values($scope.docs,field,10)
@@ -45,9 +44,7 @@ angular.module('kibana.fields', [])
   }
 
   $scope.build_search = function(field, value) {
-    var query = field + ":" + "\"" + addslashes(value.toString()) + "\"";
-    var glue = $scope.panel.query != "" ? " AND " : "";
-    $scope.panel.query = $scope.panel.query + glue + query;
+    $scope.panel.query = add_to_query($scope.panel.query,field,value)
     eventBus.broadcast($scope.$id,$scope.panel.group,'query',$scope.panel.query);
   }
 

+ 1 - 3
panels/table/module.js

@@ -68,9 +68,7 @@ angular.module('kibana.table', [])
   }
 
   $scope.build_search = function(field, value) {
-    var query = field + ":" + "\"" + addslashes(value.toString()) + "\"";
-    var glue = $scope.panel.query != "" ? " AND " : "";
-    $scope.panel.query = $scope.panel.query + glue + query;
+    $scope.panel.query = add_to_query($scope.panel.query,field,value)
     $scope.panel.offset = 0;
     $scope.get_data();
     eventBus.broadcast($scope.$id,$scope.panel.group,'query',$scope.panel.query);

+ 0 - 59
sharable.json

@@ -1,59 +0,0 @@
-{
-   "title":"Monkey Showdown",
-   "rows":{
-      "row2":{
-         "height":"270px",
-         "panels":{
-            "Hamlet vs macbeth":{
-               "type":"stackedquery",
-               "span":8,
-               "queries":[
-                  "play_name:Hamlet",
-                  "play_name:macbeth"
-               ],
-               "show": [ "lines", "fill" ]
-            },
-            "Hamlet vs Macbeth":{
-               "type":"piequery",
-               "span":4,
-               "donut":true,
-               "queries":[
-                  "play_name:Hamlet",
-                  "play_name:macbeth"
-               ],
-               "colors":[
-                  "#B07737",
-                  "#85004B",
-                  "#7BA4AF"
-               ],
-               "field":"@message"
-            }
-         }
-      },
-      "row3":{
-         "height":"130px",
-         "panels":{
-            "Hamlet's Lines":{
-               "type":"histogram",
-               "span":8,
-               "show":[
-                  "bars"
-               ],
-               "label":"lines",
-               "query":"speaker:HAMLET",
-               "color":"#4A8737"
-            },
-            "Speakers":{
-               "type":"pieterms",
-               "donut":false,
-               "tilt":false,
-               "legend":true,
-               "field":"speaker",
-               "span":4,
-               "size":6,
-               "query":"play_name:Hamlet OR play_name:macbeth"
-            }
-         }
-      }
-   }
-}