فهرست منبع

Added comments to default dashboard, added multi group binding to timepicker, added text panel

Rashid Khan 13 سال پیش
والد
کامیت
4b9310ea88
4فایلهای تغییر یافته به همراه181 افزوده شده و 31 حذف شده
  1. 1 1
      config.js
  2. 140 23
      dashboards.js
  3. 28 2
      panels/pie/module.js
  4. 12 5
      panels/timepicker/module.js

+ 1 - 1
config.js

@@ -30,7 +30,7 @@ var config = new Settings(
     timefield:      '@timestamp', 
     indexpattern:   '"shakespeare"', 
     modules:        ['histogram','map','pie','table','stringquery','sort',
-                    'timepicker'], 
+                    'timepicker','text'], 
 
     defaultfields:  ['line_text'],
     perpage:        50,

+ 140 - 23
dashboards.js

@@ -29,64 +29,181 @@ var dashboards =
           },
           timespan : '1h',
           timefield: '@timestamp',
+          group: ['default','pies'],
         },
         {
           type    : "sort",
           span    : 4,
-        }
+        },
+        {
+          type    : "text",
+          fontsize : "85%",
+          span: 3,
+          content : "Panels can send events to other panels. In the case of" +
+            " the sort panel, it also receives a field event that it uses" +
+            " to populate its list of fields from the table panel"
+        },
       ]
     },
     {
-      title:  "Monkey Monitoring",
+      title:  "Top 3 Characters",
       collapse: false,
-      height: "300px",
+      height: "160px",
       panels: [
         {
-          title   : "Monkey Shakespeare Lines",
-          type    : "histogram",
-          span    : 6,
-          show    : ['lines'],
-          fill    : 0.3,
-          query   : [
-            { label : "Query", query : "*", color: '#86B32D' },
-            { label : "Hamlet", query : "play_name:Hamlet" },
-            { label : "Macbeth", query : "play_name:macbeth" },
-          ],
+          type    : "text",
+          title   : "About",
+          fontsize : "85%",
+          span: 2,
+          content : "These pies demonstrate configurable binding. They are" +
+            " bound only to the time selector, not to the query input. Thus" +
+            " they will change when you select a new time range, but not if" +
+            " you enter a search. Try hovering over a pie slice.",
         },
         {
-          title   : "Monkey Typists Worldwide",
-          type    : "map",
-          map     : 'world',
-          field   : "country",
-          span    : 6,
-          size    : 500,
-          query   : "*",
-        }
+          title   : "Hamlet",
+          type    : "pie",
+          span    : 2,
+          size    : 3,
+          legend  : false,
+          labels  : false,
+          donut   : true,
+          colors  : ['#20805E','#26527C','#BF8530','#A60000','#006363','#679B00'],
+          field   : 'country',
+          //query   : { query: "*", field: "country"}
+          query   : { field : "speaker", query : "play_name:Hamlet" },
+          group   : "pies"
+        },
+        {
+          title   : "Othello",
+          type    : "pie",
+          span    : 2,
+          size    : 3,
+          legend  : false,
+          labels  : false,
+          donut   : true,
+          colors  : ['#35D59D','#FFB140','#F43D6B','#A60000','#006363','#679B00'],
+          field   : 'country',
+          //query   : { query: "*", field: "country"}
+          query   : { field : "speaker", query : "play_name:Othello" },
+          group   : "pies"
+        },
+        {
+          title   : "A Winters Tale",
+          type    : "pie",
+          span    : 2,
+          size    : 3,
+          legend  : false,
+          labels  : false,
+          donut   : true,
+          colors  : ['#78AF2C','#BF4630','#6A237E','#A60000','#006363','#679B00'],
+          field   : 'country',
+          //query   : { query: "*", field: "country"}
+          query   : { field : "speaker", query : 'play_name:"A Winters Tale"' },
+          group   : "pies"
+        },
+        {
+          title   : "The Tempest",
+          type    : "pie",
+          span    : 2,
+          size    : 3,
+          legend  : false,
+          labels  : false,
+          donut   : true,
+          colors  : ['#2A4480','#BFA730','#BF7130','#A60000','#006363','#679B00'],
+          field   : 'country',
+          //query   : { query: "*", field: "country"}
+          query   : { field : "speaker", query : 'play_name:"The Tempest"' },
+          group   : "pies"
+        },
+        {
+          title   : "King Lear",
+          type    : "pie",
+          span    : 2,
+          size    : 3,
+          legend  : false,
+          labels  : false,
+          donut   : true,
+          colors  : ['#01939A','#FFAB00','#FF0700','#A60000','#006363','#679B00'],
+          field   : 'country',
+          //query   : { query: "*", field: "country"}
+          query   : { field : "speaker", query : 'play_name:"King Lear"' },
+          group   : "pies"
+        },
       ]
     },
     {
       title:  "Lines of Plays",
       height: "250px",
+      collapse: true,
       panels: [
         {
           title   : "Plays",
           type    : "pie",
           span    : 4,
           size    : 8,
-          donut   : true,
           colors  : ['#BF3030','#1D7373','#86B32D','#A60000','#006363','#679B00'],
           field   : 'country',
           //query   : { query: "*", field: "country"}
           query   : { field : "play_name", query : "*" },
         },
+        {
+          type    : "text",
+          title   : "About",
+          fontsize : "85%",
+          span: 2,
+          content : "The table panel can be sorted via a sort panel, or by" +
+            " clicking the table header. Unlike the pie charts above, this" +
+            " pie is bound to the query input. Try searching for a speaker" +
+            " (eg, FALSTAFF) to see a break down of the plays they appear in.", 
+        },
         {
           title   : "Newest Lines",
           type    : "table",
-          span    : 8,
+          span    : 6,
           query   : "*",
           fields  : ['@timestamp','play_name','speaker','text_entry'],
         }
       ]
+    },
+    {
+      title:  "Monkey Monitoring",
+      collapse: false,
+      height: "275px",
+      panels: [
+        {
+          title   : "Monkey Shakespeare Lines",
+          type    : "histogram",
+          span    : 5,
+          show    : ['lines','stack'],
+          fill    : 0.3,
+          query   : [
+            { label : "Query Hits", query : "*", color: '#86B32D' },
+            { label : "Hamlet", query : "play_name:Hamlet" },
+            { label : "Macbeth", query : "play_name:macbeth" },
+          ],
+        },
+        {
+          title   : "Monkey Typists Worldwide",
+          type    : "map",
+          map     : 'world',
+          field   : "country",
+          span    : 5,
+          size    : 500,
+          query   : "*",
+        },
+        {
+          type    : "text",
+          title   : "About",
+          fontsize : "85%",
+          span: 2,
+          content : "Histograms can show multiple queries. In the case that a" +
+            " multi-query histogram is bound to a query input, only the first" +
+            " data series will be altered. All panels exist in the 'default'" +
+            " group by default. The map panel can be used to visualize events" +
+            " with attached geo data.", 
+        },
+      ]
     }
   ]
 };

+ 28 - 2
panels/pie/module.js

@@ -14,6 +14,7 @@ angular.module('kibana.pie', [])
     donut   : false,
     tilt    : false,
     legend  : true,
+    labels  : true,
     group   : "default"
   }
   _.defaults($scope.panel,_d)
@@ -152,7 +153,7 @@ angular.module('kibana.pie', [])
                 label: 'The Rest'
               },
               label: { 
-                show: true,
+                show: scope.panel.labels,
                 radius: 2/3,
                 formatter: function(label, series){
                   return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">'+
@@ -163,6 +164,7 @@ angular.module('kibana.pie', [])
             }
           },
           //grid: { hoverable: true, clickable: true },
+          grid:   { hoverable: true, clickable: true },
           legend: { show: scope.panel.legend }
         };
 
@@ -170,7 +172,31 @@ angular.module('kibana.pie', [])
         if(elem.is(":visible")){
           $.plot(elem, scope.data, pie);
         }
-        //elem.show();
+        
+        function piett(x, y, contents) {
+          var tooltip = $('#pie-tooltip').length ? 
+            $('#pie-tooltip') : $('<div id="pie-tooltip"></div>');
+          //var tooltip = $('#pie-tooltip')
+          tooltip.text(contents).css({
+            position: 'absolute',
+            top     : y + 5,
+            left    : x + 5,
+            color   : "#FFF",
+            border  : '1px solid #FFF',
+            padding : '2px',
+            'font-size': '8pt',
+            'background-color': '#000',
+          }).appendTo("body");
+        }
+
+        elem.bind("plothover", function (event, pos, item) {
+          if (item) {
+            var percent = parseFloat(item.series.percent).toFixed(2) + "%";
+            piett(pos.pageX, pos.pageY, percent + " " + item.series.label);
+          } else {
+            $("#pie-tooltip").remove();
+          }
+        });
       }
     }
   };

+ 12 - 5
panels/timepicker/module.js

@@ -43,6 +43,9 @@ angular.module('kibana.timepicker', [])
   }
   _.defaults($scope.panel,_d)
 
+  var _groups = _.isArray($scope.panel.group) ? 
+    $scope.panel.group : [$scope.panel.group];
+
   $scope.init = function() {
     // Private refresh interval that we can use for view display without causing
     // unnecessary refreshes during changes
@@ -74,11 +77,13 @@ angular.module('kibana.timepicker', [])
 
     // In the case that a panel is not ready to receive a time event, it may
     // request one be sent by broadcasting a 'get_time' with its _id to its group
-    $scope.$on($scope.panel.group+"-get_time", function(event,id) {
-      console.log('time request: '+id)
-      $rootScope.$broadcast(id+"-time", $scope.time)
+    // This panel can handle multiple groups
+    _.each(_groups,function(group){
+      $scope.$on(group+"-get_time", function(event,id) {
+        $rootScope.$broadcast(id+"-time", $scope.time)
+      });
     });
-        
+
     $scope.$watch('panel.refresh.enable', function() {$scope.refresh()});
     $scope.$watch('panel.refresh.interval', function() {
       $timeout(function(){
@@ -170,7 +175,9 @@ angular.module('kibana.timepicker', [])
     indices($scope.time.from,$scope.time.to).then(function (p) {
       $scope.time.index = p.join();
       // Broadcast time
-      $rootScope.$broadcast($scope.panel.group+"-time", $scope.time)
+      _.each(_groups,function(group){
+        $rootScope.$broadcast(group+"-time", $scope.time)
+      });
     });
 
     // Update panel's string representation of the time object