You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by ce...@apache.org on 2016/06/17 14:37:34 UTC
[29/46] incubator-metron git commit: METRON-237 Remove metron-ui from
the code base. (mmiklavcic via cestella) closes apache/incubator-metron#159
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/dasheditor.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/dasheditor.html b/metron-ui/lib/public/app/partials/dasheditor.html
deleted file mode 100755
index e9aaa8c..0000000
--- a/metron-ui/lib/public/app/partials/dasheditor.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<div class="modal-body">
- <div class="pull-right editor-title">Dashboard settings</div>
-
- <div ng-model="editor.index" bs-tabs style="text-transform:capitalize;">
- <div ng-repeat="tab in ['General','Index','Rows','Controls']" data-title="{{tab}}">
- </div>
- <div ng-repeat="tab in dashboard.current.nav|editable" data-title="{{tab.title || tab.type}}">
- </div>
- </div>
-
- <div ng-if="editor.index == 0">
- <div class="editor-row">
- <div class="section">
- <div class="editor-option">
- <label class="small">Title</label><input type="text" class="input-large" ng-model='dashboard.current.title'></input>
- </div>
- <div class="editor-option">
- <label class="small">Style</label><select class="input-small" ng-model="dashboard.current.style" ng-options="f for f in ['dark','light']"></select>
- </div>
- <div class="editor-option">
- <label class="small"> Editable </label><input type="checkbox" ng-model="dashboard.current.editable" ng-checked="dashboard.current.editable" />
- </div>
- <div class="editor-option">
- <label class="small"> Hints <tip>Show 'Add panel' hints in empty spaces</tip></label><input type="checkbox" ng-model="dashboard.current.panel_hints" ng-checked="dashboard.current.panel_hints" />
- </div>
- <!-- <div class="editor-option">
- <label class="small"> Real-Time <tip>Enables real-time alerts</tip></label><input type="checkbox" ng-model="" ng-checked="dashboard.current.realtime" />
- </div> -->
- </div>
- </div>
- </div>
- <div ng-if="editor.index == 1">
- <div class="editor-row">
- <div class="section">
- <h5>Index Settings</h5>
- <div ng-show="dashboard.current.index.interval != 'none'" class="row-fluid">
- <div class="editor-option">
- <p class="small">
- Time stamped indices use your selected time range to create a list of
- indices that match a specified timestamp pattern. This can be very
- efficient for some data sets (eg, logs) For example, to match the
- default logstash index pattern you might use
- <code>[logstash-]YYYY.MM.DD</code>. The [] in "[logstash-]" are
- important as they instruct Kibana not to treat those letters as a
- pattern. You may also specify multiple indices by seperating them with a comma(,).
- For example <code>[web-]YYYY.MM.DD,[mail-]YYYY.MM.DD</code>
- Please also note that indices should rollover at midnight <strong>UTC</strong>.
- </p>
- <p class="small">
- See <a href="http://momentjs.com/docs/#/displaying/format/">http://momentjs.com/docs/#/displaying/format/</a>
- for documentation on date formatting.
- </p>
- </div>
- </div>
- </div>
- </div>
- <div class="editor-row">
- <div class="section">
- <div class="editor-option">
- <h6>Timestamping</h6><select class="input-small" ng-model="dashboard.current.index.interval" ng-options="f for f in ['none','hour','day','week','month','year']"></select>
- </div>
- <div class="editor-option" ng-show="dashboard.current.index.interval != 'none'">
- <h6>Index pattern <small>Absolutes in []</small></h6>
- <input type="text" class="input-large" ng-model="dashboard.current.index.pattern">
- </div>
- <div class="editor-option" ng-show="dashboard.current.index.interval != 'none'">
- <h6>Failover <i class="icon-question-sign" bs-tooltip="'If no indices match the pattern, failover to default index *NOT RECOMMENDED*'"></i></h6>
- <input type="checkbox" ng-model="dashboard.current.failover" ng-checked="dashboard.current.failover" />
- </div>
- <div class="editor-option" ng-show="dashboard.current.failover || dashboard.current.index.interval == 'none'">
- <h6>Default Index <small ng-show="dashboard.current.index.interval != 'none'">If index not found</small></h6>
- <input type="text" class="input-medium" ng-model="dashboard.current.index.default">
- </div>
- <div class="editor-option">
- <h6>Preload Fields <i class="icon-question-sign" bs-tooltip="'Preload available fields for the purpose of autocomplete. Turn this off if you have many fields'"></i></h6>
- <input type="checkbox" ng-model="dashboard.current.index.warm_fields" ng-checked="dashboard.current.index.warm_fields" />
- </div>
- </div>
- </div>
- </div>
-
- <div ng-if="editor.index == 2">
- <div class="row-fluid">
- <div class="span8">
- <h4>Rows</h4>
- <table class="table table-striped">
- <thead>
- <th width="1%"></th>
- <th width="1%"></th>
- <th width="1%"></th>
- <th width="97%">Title</th>
- </thead>
- <tr ng-repeat="row in dashboard.current.rows">
- <td><i ng-click="_.move(dashboard.current.rows,$index,$index-1)" ng-hide="$first" class="pointer icon-arrow-up"></i></td>
- <td><i ng-click="_.move(dashboard.current.rows,$index,$index+1)" ng-hide="$last" class="pointer icon-arrow-down"></i></td>
- <td><i ng-click="dashboard.current.rows = _.without(dashboard.current.rows,row)" class="pointer icon-remove"></i></td>
- <td>{{row.title||'Untitled'}}</td>
- </tr>
- </table>
- </div>
- <div class="span4">
- <h4>Add Row</h4>
- <label class="small">Title</label>
- <input type="text" class="input-medium" ng-model='row.title' placeholder="New row"></input>
- <label class="small">Height</label>
- <input type="text" class="input-mini" ng-model='row.height'></input>
- </div>
- </div>
- <div class="row-fluid">
-
- </div>
- </div>
-
- <div ng-if="editor.index == 3" ng-controller="dashLoader">
- <div class="editor-row">
- <div class="section">
- <h5>Save to</h5>
- <div class="editor-option">
- <label class="small">Export</label><input type="checkbox" ng-model="dashboard.current.loader.save_local" ng-checked="dashboard.current.loader.save_local">
- </div>
- <div class="editor-option">
- <label class="small">Browser</label><input type="checkbox" ng-model="dashboard.current.loader.save_default" ng-checked="dashboard.current.loader.save_default">
- </div>
- <div class="editor-option">
- <label class="small">Gist <tip>Requires your domain to be OAUTH registered with Github<tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_gist" ng-checked="dashboard.current.loader.save_gist">
- </div>
- <div class="editor-option">
- <label class="small">Elasticsearch</label><input type="checkbox" ng-model="dashboard.current.loader.save_elasticsearch" ng-checked="dashboard.current.loader.save_elasticsearch">
- </div>
- </div>
- <div class="section">
- <h5>Load from</h5>
- <div class="editor-option">
- <label class="small">Local file</label><input type="checkbox" ng-model="dashboard.current.loader.load_local" ng-checked="dashboard.current.loader.load_local">
- </div>
- <div class="editor-option">
- <label class="small">Gist</label><input type="checkbox" ng-model="dashboard.current.loader.load_gist" ng-checked="dashboard.current.loader.load_gist">
- </div>
- <div class="editor-option">
- <label class="small">Elasticsearch</label><input type="checkbox" ng-model="dashboard.current.loader.load_elasticsearch" ng-checked="dashboard.current.loader.load_elasticsearch">
- </div>
- <div class="editor-option" ng-show="dashboard.current.loader.load.elasticsearch">
- <label class="small">ES list size</label><input class="input-mini" type="number" ng-model="dashboard.current.loader.load_elasticsearch_size">
- </div>
- </div>
- <div class="section">
- <h5>Sharing</h5>
- <div class="editor-option" >
- <label class="small">Allow Sharing <tip>Allow generating adhoc links to dashboards</tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_temp" ng-checked="dashboard.current.loader.save_temp">
- </div>
- <div class="editor-option" ng-show="dashboard.current.loader.save_temp">
- <label class="small">TTL <tip>Expire temp urls</tip></label><input type="checkbox" ng-model="dashboard.current.loader.save_temp_ttl_enable">
- </div>
- <div class="editor-option" ng-show="dashboard.current.loader.save_temp && dashboard.current.loader.save_temp_ttl_enable">
- <label class="small">TTL Duration <tip>Elasticsearch date math, eg: 1m,1d,1w,30d </tip></label><input class="input-small" type="text" ng-model="dashboard.current.loader.save_temp_ttl">
- </div>
- </div>
- </div>
- </div>
-
- <div ng-if="editor.index == 3">
- <div class="editor-row">
- <div class="section">
- <h5>Pulldowns</h5>
- <div class="editor-option" ng-repeat="pulldown in dashboard.current.pulldowns">
- <label class="small" style="text-transform:capitalize;">{{pulldown.type}}</label><input type="checkbox" ng-model="pulldown.enable" ng-checked="pulldown.enable">
- </div>
- <div class="editor-option" ng-repeat="pulldown in dashboard.current.nav|editable">
- <label class="small" style="text-transform:capitalize;">{{pulldown.type}}</label><input type="checkbox" ng-model="pulldown.enable" ng-checked="pulldown.enable">
- </div>
- </div>
- </div>
- </div>
-
- <div ng-repeat="pulldown in dashboard.current.nav|editable" ng-controller="PulldownCtrl" ng-show="editor.index == 4+$index">
- <ng-include ng-show="pulldown.enable" src="edit_path(pulldown.type)"></ng-include>
- <button ng-hide="pulldown.enable" class="btn" ng-click="pulldown.enable = true">Enable the {{pulldown.type}}</button>
- </div>
-
-
-</div>
-
-<div class="modal-footer">
- <button type="button" ng-click="add_row(dashboard.current,row); reset_row();" class="btn btn-info" ng-show="editor.index == 2">Create Row</button>
- <button type="button" class="btn btn-success" ng-click="editor.index=0;editSave(dashboard);dismiss();reset_panel();dashboard.refresh()">Save</button>
- <button type="button" class="btn btn-danger" ng-click="editor.index=0;dismiss();reset_panel();dashboard.refresh()">Cancel</button>
-</div>
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/inspector.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/inspector.html b/metron-ui/lib/public/app/partials/inspector.html
deleted file mode 100755
index 0b2ebe6..0000000
--- a/metron-ui/lib/public/app/partials/inspector.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">�</button>
- <h3>Last Elasticsearch Query</h3>
-</div>
-<div class="modal-body">
-
- <div>
- <pre>curl -XGET '{{config.elasticsearch}}/{{dashboard.indices|stringify}}/_search?pretty' -d '{{inspector}}'
- </pre>
- </div>
-
-</div>
-<div class="modal-footer">
- <button type="button" class="btn btn-success" ng-click="dismiss()">Close</button>
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/load.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/load.html b/metron-ui/lib/public/app/partials/load.html
deleted file mode 100755
index 27d012b..0000000
--- a/metron-ui/lib/public/app/partials/load.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div style="margin-top:50px" ng-controller="dashcontrol">
- <strong>type: </strong>{{type}} <br>
- <strong>id: </strong>{{id}} <br>
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/modal.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/modal.html b/metron-ui/lib/public/app/partials/modal.html
deleted file mode 100755
index 38d86cd..0000000
--- a/metron-ui/lib/public/app/partials/modal.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">�</button>
- <h3>{{modal.title}}</h3>
-</div>
-<div class="modal-body">
-
- <div ng-bind-html='modal.body'></div>
-
-</div>
-<div class="modal-footer">
- <button type="button" class="btn btn-danger" ng-click="dismiss()">Close</button>
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/paneladd.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/paneladd.html b/metron-ui/lib/public/app/partials/paneladd.html
deleted file mode 100755
index 5b780fb..0000000
--- a/metron-ui/lib/public/app/partials/paneladd.html
+++ /dev/null
@@ -1,6 +0,0 @@
- <div ng-include="'app/partials/panelgeneral.html'"></div>
- <div ng-include="edit_path(panel.type)"></div>
- <div ng-repeat="tab in panelMeta.editorTabs">
- <h5>{{tab.title}}</h5>
- <div ng-include="tab.src"></div>
- </div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/paneleditor.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/paneleditor.html b/metron-ui/lib/public/app/partials/paneleditor.html
deleted file mode 100755
index d66070b..0000000
--- a/metron-ui/lib/public/app/partials/paneleditor.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<div bindonce class="modal-body">
- <div class="pull-right editor-title" bo-text="panel.type+' settings'"></div>
- <div ng-model="editor.index" bs-tabs>
- <div ng-repeat="tab in setEditorTabs(panelMeta)" data-title="{{tab}}">
- </div>
- </div>
- <div ng-show="editorTabs[editor.index] == 'General'">
- <div ng-include src="'app/partials/panelgeneral.html'"></div>
- </div>
-
- <div ng-show="editorTabs[editor.index] == 'Panel'">
- <div ng-include src="edit_path(panel.type)"></div>
- </div>
-
- <div ng-repeat="tab in panelMeta.editorTabs" ng-show="editorTabs[editor.index] == tab.title">
- <div ng-include src="tab.src"></div>
- </div>
-</div>
-
-<div class="modal-footer">
- <!-- close_edit() is provided here to allow for a scope to perform action on dismiss -->
- <button type="button" class="btn btn-success" ng-click="editor.index=0;editSave(panel);close_edit();dismiss()">Save</button>
- <button type="button" class="btn btn-danger" ng-click="editor.index=0;dismiss()">Cancel</button>
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/panelgeneral.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/panelgeneral.html b/metron-ui/lib/public/app/partials/panelgeneral.html
deleted file mode 100755
index 22e7494..0000000
--- a/metron-ui/lib/public/app/partials/panelgeneral.html
+++ /dev/null
@@ -1,24 +0,0 @@
- <div class="editor-row">
- <div class="section">
- <strong>{{panelMeta.status}}</strong> // <span ng-bind-html="panelMeta.description"></span>
- </div>
- </div>
- <div class="editor-row">
- <div class="section">
- <div class="editor-option">
- <label class="small">Title</label><input type="text" class="input-medium" ng-model='panel.title'></input>
- </div>
- <div class="editor-option" ng-hide="panel.sizeable == false">
- <label class="small">Span</label> <select class="input-mini" ng-model="panel.span" ng-options="f for f in [1,2,3,4,5,6,7,8,9,10,11,12]"></select>
- </div>
- <div class="editor-option">
- <label class="small">Editable</label><input type="checkbox" ng-model="panel.editable" ng-checked="panel.editable">
- </div>
- <div class="editor-option" ng-show="!_.isUndefined(panel.spyable)">
- <label class="small">
- Inspect <i class="icon-question-sign" bs-tooltip="'Allow query reveal via <i class=icon-info-sign></i>'"></i>
- </label>
- <input type="checkbox" ng-model="panel.spyable" ng-checked="panel.spyable">
- </div>
- </div>
- </div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/querySelect.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/querySelect.html b/metron-ui/lib/public/app/partials/querySelect.html
deleted file mode 100755
index a580a48..0000000
--- a/metron-ui/lib/public/app/partials/querySelect.html
+++ /dev/null
@@ -1,28 +0,0 @@
- <div class="row-fluid">
- <style>
- .querySelect .query {
- margin-right: 5px;
- }
- .querySelect .selected {
- border: 3px solid;
- }
- .querySelect .unselected {
- border: 0px solid;
- }
- </style>
- <div class="span2" style="margin-left:0px">
- <label class="small">Queries</label>
- <select class="input-small" ng-change="set_refresh(true);" ng-model="panel.queries.mode" ng-options="f for f in ['all','pinned','unpinned','selected']"></select>
- </div>
- <div class="span2">
- <label class="small">Locked</label>
- <input type="checkbox" ng-change="set_refresh(true);" ng-model="panel.locked">
- </div>
- <div class="span7 querySelect" ng-show="panel.queries.mode == 'selected'">
- <label class="small">Selected Queries</label>
- <span ng-style="{'border-color': querySrv.list()[id].color}" ng-class="{selected:_.contains(panel.queries.ids,id),unselected:!_.contains(panel.queries.ids,id)}" ng-repeat="id in querySrv.ids()" ng-click="panel.queries.ids = _.toggleInOut(panel.queries.ids,id);set_refresh(true);" class="query pointer badge">
- <i class="icon-circle" ng-style="{color: querySrv.list()[id].color}"></i>
- <span> {{querySrv.list()[id].alias || querySrv.list()[id].query}}</span>
- </span>
- </div>
- </div>
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/partials/roweditor.html
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/partials/roweditor.html b/metron-ui/lib/public/app/partials/roweditor.html
deleted file mode 100755
index b2240e7..0000000
--- a/metron-ui/lib/public/app/partials/roweditor.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<div class="modal-body">
- <div class="pull-right editor-title">Row settings</div>
-
- <div ng-model="editor.index" bs-tabs>
- <div ng-repeat="tab in ['General','Panels','Add Panel']" data-title="{{tab}}">
- </div>
- </div>
-
- <div class="editor-row" ng-if="editor.index == 0">
- <div class="editor-option">
- <label class="small">Title</label><input type="text" class="input-medium" ng-model='row.title'></input>
- </div>
- <div class="editor-option">
- <label class="small">Height</label><input type="text" class="input-mini" ng-model='row.height'></input>
- </div>
- <div class="editor-option">
- <label class="small"> Editable </label><input type="checkbox" ng-model="row.editable" ng-checked="row.editable" />
- </div>
- <div class="editor-option">
- <label class="small"> Collapsable </label><input type="checkbox" ng-model="row.collapsable" ng-checked="row.collapsable" />
- </div>
- </div>
- <div class="row-fluid" ng-if="editor.index == 1">
- <div class="span12">
- <h4>Panels</h4>
- <table class="table table-condensed table-striped">
- <thead>
- <th>Title</th>
- <th>Type</th>
- <th>Span <span class="small">({{rowSpan(row)}}/12)</span></th>
- <th>Delete</th>
- <th>Move</th>
- <th></th>
- <th>Hide</th>
- </thead>
- <tr ng-repeat="panel in row.panels">
- <td>{{panel.title}}</td>
- <td>{{panel.type}}</td>
- <td><select ng-hide="panel.sizeable == false" class="input-mini" ng-model="panel.span" ng-options="size for size in [1,2,3,4,5,6,7,8,9,10,11,12]"></select></td>
- <td><i ng-click="row.panels = _.without(row.panels,panel)" class="pointer icon-remove"></i></td>
- <td><i ng-click="_.move(row.panels,$index,$index-1)" ng-hide="$first" class="pointer icon-arrow-up"></i></td>
- <td><i ng-click="_.move(row.panels,$index,$index+1)" ng-hide="$last" class="pointer icon-arrow-down"></i></td>
- <td><input type="checkbox" ng-model="panel.hide" ng-checked="panel.hide"></td>
- </tr>
- </table>
- </div>
- </div>
- <div class="row-fluid" ng-if="editor.index == 2">
- <h4>Select Panel Type</h4>
- <form class="form-inline">
- <select class="input-medium" ng-model="panel.type" ng-options="panelType for panelType in dashboard.availablePanels|stringSort"></select>
- <small ng-show="rowSpan(row) > 11">
- Note: This row is full, new panels will wrap to a new line. You should add another row.
- </small>
- </form>
-
- <div ng-show="!(_.isUndefined(panel.type))">
- <div add-panel="{{panel.type}}"></div>
- </div>
- </div>
-</div>
-<div class="modal-footer">
- <button ng-show="editor.index == 1" ng-click="editor.index = 2;" class="btn btn-info" ng-disabled="panel.loadingEditor">Add Panel</button>
- <button ng-show="panel.type && editor.index == 2" ng-click="editSave(row);add_panel(row,panel);reset_panel();editor.index = 0;dismiss();" class="btn btn-success" ng-disabled="panel.loadingEditor">Save</button>
- <button ng-hide="panel.type && editor.index == 2" ng-click="editor.index=0;editSave(row);dismiss();reset_panel();close_edit()" class="btn btn-success">Save</button>
- <button type="button" class="btn btn-danger" ng-click="editor.index=0;dismiss();reset_panel();close_edit()">Cancel</button>
-</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/alertSrv.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/alertSrv.js b/metron-ui/lib/public/app/services/alertSrv.js
deleted file mode 100755
index 8d3d095..0000000
--- a/metron-ui/lib/public/app/services/alertSrv.js
+++ /dev/null
@@ -1,49 +0,0 @@
-define([
- 'angular',
- 'lodash'
-],
-function (angular, _) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('alertSrv', function($timeout) {
- var self = this;
-
- // List of all alert objects
- this.list = [];
-
- this.set = function(title,text,severity,timeout) {
- var
- _a = {
- title: title || '',
- text: text || '',
- severity: severity || 'info',
- },
- _ca = angular.toJson(_a),
- _clist = _.map(self.list,function(alert){return angular.toJson(alert);});
-
- // If we already have this alert, remove it and add a new one
- // Why do this instead of skipping the add because it resets the timer
- if(_.contains(_clist,_ca)) {
- _.remove(self.list,_.indexOf(_clist,_ca));
- }
-
- self.list.push(_a);
- if (timeout > 0) {
- $timeout(function() {
- self.list = _.without(self.list,_a);
- }, timeout);
- }
- return(_a);
- };
-
- this.clear = function(alert) {
- self.list = _.without(self.list,alert);
- };
-
- this.clearAll = function() {
- self.list = [];
- };
- });
-});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/all.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/all.js b/metron-ui/lib/public/app/services/all.js
deleted file mode 100755
index fdc5408..0000000
--- a/metron-ui/lib/public/app/services/all.js
+++ /dev/null
@@ -1,12 +0,0 @@
-define([
- './alertSrv',
- './dashboard',
- './fields',
- './filterSrv',
- './kbnIndex',
- './querySrv',
- './timer',
- './panelMove',
- './esVersion'
-],
-function () {});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/dashboard.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/dashboard.js b/metron-ui/lib/public/app/services/dashboard.js
deleted file mode 100755
index 6b4634c..0000000
--- a/metron-ui/lib/public/app/services/dashboard.js
+++ /dev/null
@@ -1,529 +0,0 @@
-define([
- 'angular',
- 'jquery',
- 'kbn',
- 'lodash',
- 'config',
- 'moment',
- 'modernizr',
- 'filesaver',
- 'blob'
-],
-function (angular, $, kbn, _, config, moment, Modernizr) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('dashboard', function(
- $routeParams, $http, $rootScope, $injector, $location, $timeout,
- ejsResource, timer, kbnIndex, alertSrv, esVersion, esMinVersion
- ) {
- // A hash of defaults to use when loading a dashboard
-
- var _dash = {
- title: "",
- style: "dark",
- editable: true,
- realtime: true, // defaults to false
- failover: false,
- panel_hints: true,
- rows: [],
- pulldowns: [
- {
- type: 'query',
- },
- {
- type: 'filtering'
- }
- ],
- nav: [
- {
- type: 'timepicker'
- }
- ],
- services: {},
- loader: {
- save_gist: false,
- save_elasticsearch: true,
- save_local: true,
- save_default: true,
- save_temp: true,
- save_temp_ttl_enable: true,
- save_temp_ttl: '30d',
- load_gist: false,
- load_elasticsearch: true,
- load_elasticsearch_size: 20,
- load_local: false,
- hide: false
- },
- index: {
- interval: 'none',
- pattern: '_all',
- default: 'INDEX_MISSING',
- warm_fields: true
- },
- refresh: false
- };
-
- // An elasticJS client to use
- var ejs = ejsResource(config.elasticsearch);
-
- var gist_pattern = /(^\d{5,}$)|(^[a-z0-9]{10,}$)|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;
-
- // Store a reference to this
- var self = this;
- var filterSrv,querySrv;
-
- this.current = _.clone(_dash);
- this.last = {};
- this.availablePanels = [];
-
- $rootScope.$on('$routeChangeSuccess',function(){
- // Clear the current dashboard to prevent reloading
- self.current = {};
- self.indices = [];
- esVersion.isMinimum().then(function(isMinimum) {
- if(isMinimum) {
- route();
- } else {
- alertSrv.set('Upgrade Required',"Your version of Elasticsearch is too old. Kibana requires" +
- " Elasticsearch " + esMinVersion + " or above.", "error");
- }
- });
- });
-
- var route = function() {
- // Is there a dashboard type and id in the URL?
- if(!(_.isUndefined($routeParams.kbnType)) && !(_.isUndefined($routeParams.kbnId))) {
- var _type = $routeParams.kbnType;
- var _id = $routeParams.kbnId;
-
- switch(_type) {
- case ('elasticsearch'):
- self.elasticsearch_load('dashboard',_id);
- break;
- case ('temp'):
- self.elasticsearch_load('temp',_id);
- break;
- case ('file'):
- self.file_load(_id);
- break;
- case('script'):
- self.script_load(_id);
- break;
- case('local'):
- self.local_load();
- break;
- default:
- $location.path(config.default_route);
- }
- // No dashboard in the URL
- } else {
- // Check if browser supports localstorage, and if there's an old dashboard. If there is,
- // inform the user that they should save their dashboard to Elasticsearch and then set that
- // as their default
- if (Modernizr.localstorage) {
- if(!(_.isUndefined(window.localStorage['dashboard'])) && window.localStorage['dashboard'] !== '') {
- $location.path(config.default_route);
- alertSrv.set('Saving to browser storage has been replaced',' with saving to Elasticsearch.'+
- ' Click <a href="#/dashboard/local/deprecated">here</a> to load your old dashboard anyway.');
- } else if(!(_.isUndefined(window.localStorage.kibanaDashboardDefault))) {
- $location.path(window.localStorage.kibanaDashboardDefault);
- } else {
- $location.path(config.default_route);
- }
- // No? Ok, grab the default route, its all we have now
- } else {
- $location.path(config.default_route);
- }
- }
- };
-
- // Since the dashboard is responsible for index computation, we can compute and assign the indices
- // here before telling the panels to refresh
- this.refresh = function() {
- if(self.current.index.interval !== 'none') {
- if(_.isUndefined(filterSrv)) {
- return;
- }
- if(filterSrv.idsByType('time').length > 0) {
- var _range = filterSrv.timeRange('last');
- kbnIndex.indices(_range.from,_range.to,
- self.current.index.pattern,self.current.index.interval
- ).then(function (p) {
- if(p.length > 0) {
- self.indices = p;
- } else {
- // Option to not failover
- if(self.current.failover) {
- self.indices = [self.current.index.default];
- } else {
- // Do not issue refresh if no indices match. This should be removed when panels
- // properly understand when no indices are present
- alertSrv.set('No results','There were no results because no indices were found that match your'+
- ' selected time span','info',5000);
- return false;
- }
- }
- // Don't resolve queries until indices are updated
- querySrv.resolve().then(function(){$rootScope.$broadcast('refresh');});
- });
- } else {
- if(self.current.failover) {
- self.indices = [self.current.index.default];
- querySrv.resolve().then(function(){$rootScope.$broadcast('refresh');});
- } else {
- alertSrv.set("No time filter",
- 'Timestamped indices are configured without a failover. Waiting for time filter.',
- 'info',5000);
- }
- }
- } else {
- self.indices = [self.current.index.default];
- querySrv.resolve().then(function(){$rootScope.$broadcast('refresh');});
- }
- };
-
- var dash_defaults = function(dashboard) {
- _.defaults(dashboard,_dash);
- _.defaults(dashboard.index,_dash.index);
- _.defaults(dashboard.loader,_dash.loader);
- return _.cloneDeep(dashboard);
- };
-
- this.dash_load = function(dashboard) {
- // Cancel all timers
- timer.cancel_all();
-
- // Make sure the dashboard being loaded has everything required
- dashboard = dash_defaults(dashboard);
-
- // If not using time based indices, use the default index
- if(dashboard.index.interval === 'none') {
- self.indices = [dashboard.index.default];
- }
-
- // Set the current dashboard
- self.current = _.clone(dashboard);
-
- // Delay this until we're sure that querySrv and filterSrv are ready
- $timeout(function() {
- // Ok, now that we've setup the current dashboard, we can inject our services
- if(!_.isUndefined(self.current.services.query)) {
- querySrv = $injector.get('querySrv');
- querySrv.init();
- }
- if(!_.isUndefined(self.current.services.filter)) {
- filterSrv = $injector.get('filterSrv');
- filterSrv.init();
- }
- },0).then(function() {
- // Call refresh to calculate the indices and notify the panels that we're ready to roll
- self.refresh();
- });
-
- if(dashboard.refresh) {
- self.set_interval(dashboard.refresh);
- }
-
- // Set the available panels for the "Add Panel" drop down
- self.availablePanels = _.difference(config.panel_names,
- _.pluck(_.union(self.current.nav,self.current.pulldowns),'type'));
-
- // Take out any that we're not allowed to add from the gui.
- self.availablePanels = _.difference(self.availablePanels,config.hidden_panels);
-
- return true;
- };
-
- this.gist_id = function(string) {
- if(self.is_gist(string)) {
- return string.match(gist_pattern)[0].replace(/.*\//, '');
- }
- };
-
- this.is_gist = function(string) {
- if(!_.isUndefined(string) && string !== '' && !_.isNull(string.match(gist_pattern))) {
- return string.match(gist_pattern).length > 0 ? true : false;
- } else {
- return false;
- }
- };
-
- this.to_file = function() {
- var blob = new Blob([angular.toJson(self.current,true)], {type: "application/json;charset=utf-8"});
- // from filesaver.js
- window.saveAs(blob, self.current.title+"-"+new Date().getTime());
- return true;
- };
-
- this.set_default = function(route) {
- if (Modernizr.localstorage) {
- // Purge any old dashboards
- if(!_.isUndefined(window.localStorage['dashboard'])) {
- delete window.localStorage['dashboard'];
- }
- window.localStorage.kibanaDashboardDefault = route;
- return true;
- } else {
- return false;
- }
- };
-
- this.purge_default = function() {
- if (Modernizr.localstorage) {
- // Purge any old dashboards
- if(!_.isUndefined(window.localStorage['dashboard'])) {
-
- delete window.localStorage['dashboard'];
- }
- delete window.localStorage.kibanaDashboardDefault;
- return true;
- } else {
- return false;
- }
- };
-
- // TOFIX: Pretty sure this breaks when you're on a saved dashboard already
- this.share_link = function(title,type,id) {
- return {
- location : window.location.href.replace(window.location.hash,""),
- type : type,
- id : id,
- link : window.location.href.replace(window.location.hash,"")+"#dashboard/"+type+"/"+encodeURIComponent(id),
- title : title
- };
- };
-
- var renderTemplate = function(json,params) {
- var _r;
- _.templateSettings = {interpolate : /\{\{(.+?)\}\}/g};
- var template = _.template(json);
- var rendered = template({ARGS:params});
- try {
- _r = angular.fromJson(rendered);
- } catch(e) {
- _r = false;
- }
- return _r;
- };
-
- this.local_load = function() {
- var dashboard = JSON.parse(window.localStorage['dashboard']);
- dashboard.rows.unshift({
- height: "30",
- title: "Deprecation Notice",
- panels: [
- {
- title: 'WARNING: Legacy dashboard',
- type: 'text',
- span: 12,
- mode: 'html',
- content: 'This dashboard has been loaded from the browsers local cache. If you use '+
- 'another brower or computer you will not be able to access it! '+
- '\n\n <h4>Good news!</h4> Kibana'+
- ' now stores saved dashboards in Elasticsearch. Click the <i class="icon-save"></i> '+
- 'button in the top left to save this dashboard. Then select "Set as Home" from'+
- ' the "advanced" sub menu to automatically use the stored dashboard as your Kibana '+
- 'landing page afterwards'+
- '<br><br><strong>Tip:</strong> You may with to remove this row before saving!'
- }
- ]
- });
- self.dash_load(dashboard);
- };
-
- this.file_load = function(file) {
- return $http({
- url: "app/dashboards/"+file.replace(/\.(?!json)/,"/")+'?' + new Date().getTime(),
- method: "GET",
- transformResponse: function(response) {
- return renderTemplate(response,$routeParams);
- }
- }).then(function(result) {
- if(!result) {
- return false;
- }
- self.dash_load(dash_defaults(result.data));
- return true;
- },function() {
- alertSrv.set('Error',"Could not load <i>dashboards/"+file+"</i>. Please make sure it exists" ,'error');
- return false;
- });
- };
-
- this.elasticsearch_load = function(type,id) {
- var successcb = function(data) {
- var response = renderTemplate(angular.fromJson(data)._source.dashboard, $routeParams);
- self.dash_load(response);
- };
- var errorcb = function(data, status) {
- if(status === 0) {
- alertSrv.set('Error',"Could not contact Elasticsearch at "+ejs.config.server+
- ". Please ensure that Elasticsearch is reachable from your system." ,'error');
- } else {
- alertSrv.set('Error',"Could not find "+id+". If you"+
- " are using a proxy, ensure it is configured correctly",'error');
- }
- return false;
- };
-
- ejs.client.get(
- "/" + config.kibana_index + "/"+type+"/"+id+'?' + new Date().getTime(),
- null, successcb, errorcb);
-
- };
-
- this.script_load = function(file) {
- return $http({
- url: "app/dashboards/"+file.replace(/\.(?!js)/,"/"),
- method: "GET",
- transformResponse: function(response) {
- /*jshint -W054 */
- var _f = new Function('ARGS','kbn','_','moment','window','document','angular','require','define','$','jQuery',response);
- return _f($routeParams,kbn,_,moment);
- }
- }).then(function(result) {
- if(!result) {
- return false;
- }
- self.dash_load(dash_defaults(result.data));
- return true;
- },function() {
- alertSrv.set('Error',
- "Could not load <i>scripts/"+file+"</i>. Please make sure it exists and returns a valid dashboard" ,
- 'error');
- return false;
- });
- };
-
- this.elasticsearch_save = function(type,title,ttl) {
- // Clone object so we can modify it without influencing the existing obejct
- var save = _.clone(self.current);
- var id;
-
- // Change title on object clone
- if (type === 'dashboard') {
- id = save.title = _.isUndefined(title) ? self.current.title : title;
- }
-
- // Create request with id as title. Rethink this.
- var request = ejs.Document(config.kibana_index,type,id).source({
- user: 'guest',
- group: 'guest',
- title: save.title,
- dashboard: angular.toJson(save)
- });
-
- request = type === 'temp' && ttl ? request.ttl(ttl) : request;
-
- return request.doIndex(
- // Success
- function(result) {
- if(type === 'dashboard') {
- $location.path('/dashboard/elasticsearch/'+title);
- }
- return result;
- },
- // Failure
- function() {
- return false;
- }
- );
- };
-
- this.elasticsearch_delete = function(id) {
- return ejs.Document(config.kibana_index,'dashboard',id).doDelete(
- // Success
- function(result) {
- return result;
- },
- // Failure
- function() {
- return false;
- }
- );
- };
-
- this.elasticsearch_list = function(query,count) {
- var request = ejs.Request().indices(config.kibana_index).types('dashboard');
- return request.query(
- ejs.QueryStringQuery(query || '*')
- ).size(count).doSearch(
- // Success
- function(result) {
- return result;
- },
- // Failure
- function() {
- return false;
- }
- );
- };
-
- this.save_gist = function(title,dashboard) {
- var save = _.clone(dashboard || self.current);
- save.title = title || self.current.title;
- return $http({
- url: "https://api.github.com/gists",
- method: "POST",
- data: {
- "description": save.title,
- "public": false,
- "files": {
- "kibana-dashboard.json": {
- "content": angular.toJson(save,true)
- }
- }
- }
- }).then(function(data) {
- return data.data.html_url;
- }, function() {
- return false;
- });
- };
-
- this.gist_list = function(id) {
- return $http.jsonp("https://api.github.com/gists/"+id+"?callback=JSON_CALLBACK"
- ).then(function(response) {
- var files = [];
- _.each(response.data.data.files,function(v) {
- try {
- var file = JSON.parse(v.content);
- files.push(file);
- } catch(e) {
- return false;
- }
- });
- return files;
- }, function() {
- return false;
- });
- };
-
- this.start_scheduled_refresh = function (after_ms) {
- timer.cancel(self.refresh_timer);
- self.refresh_timer = timer.register($timeout(function () {
- self.start_scheduled_refresh(after_ms);
- self.refresh();
- }, after_ms));
- };
-
- this.cancel_scheduled_refresh = function () {
- timer.cancel(self.refresh_timer);
- };
-
- this.set_interval = function (interval) {
- self.current.refresh = interval;
- if (interval) {
- var _i = kbn.interval_to_ms(interval);
- this.start_scheduled_refresh(_i);
- } else {
- this.cancel_scheduled_refresh();
- }
- };
-
-
- });
-
-});
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/esVersion.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/esVersion.js b/metron-ui/lib/public/app/services/esVersion.js
deleted file mode 100755
index 1a31e85..0000000
--- a/metron-ui/lib/public/app/services/esVersion.js
+++ /dev/null
@@ -1,195 +0,0 @@
-define([
- 'angular',
- 'lodash',
- 'config'
-],
-function (angular, _, config) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('esVersion', function($http, alertSrv, esMinVersion, $q, ejsResource) {
-
- this.versions = [];
-
- var ejs = ejsResource(config.elasticsearch);
-
-
- // save a reference to this
- var self = this,
- defer = $q.defer();
-
- this.init = function() {
- getVersions();
- };
-
- var getVersions = function() {
- if(self.versions.length !== 0) {
- defer.resolve(self.versions);
- return defer.promise;
- } else {
- var nodeInfo = ejs.client.get('/_nodes',
- undefined, undefined, function(data, status) {
- if(status === 0) {
- alertSrv.set('Error',"Could not contact Elasticsearch at "+ejs.client.server()+
- ". Please ensure that Elasticsearch is reachable from your system." ,'error');
- } else {
- alertSrv.set('Error',"Could not reach "+ejs.client.server()+"/_nodes. If you"+
- " are using a proxy, ensure it is configured correctly",'error');
- }
- return;
- });
-
- return nodeInfo.then(function(p) {
- _.each(p.nodes, function(v) {
- self.versions.push(v.version.split('-')[0]);
- });
- self.versions = sortVersions(_.uniq(self.versions));
- return self.versions;
- });
- }
-
- };
-
- // Get the max version in this cluster
- this.max = function(versions) {
- return _.last(versions);
- };
-
- // Return the lowest version in the cluster
- this.min = function(versions) {
- return _.first(versions);
- };
-
- // Sort versions from lowest to highest
- var sortVersions = function(versions) {
- var _versions = _.clone(versions),
- _r = [];
-
- while(_r.length < versions.length) {
- var _h = "0";
- /*jshint -W083 */
- _.each(_versions,function(v){
- if(self.compare(_h,v)) {
- _h = v;
- }
- });
- _versions = _.without(_versions,_h);
- _r.push(_h);
- }
- return _r.reverse();
- };
-
- /*
- Takes a version string with one of the following optional comparison prefixes: >,>=,<.<=
- and evaluates if the cluster meets the requirement. If the prefix is omitted exact match
- is assumed
- */
- this.is = function(equation) {
- var _v = equation,
- _cf;
-
- if(_v.charAt(0) === '>') {
- _cf = _v.charAt(1) === '=' ? self.gte(_v.slice(2)) : self.gt(_v.slice(1));
- } else if (_v.charAt(0) === '<') {
- _cf = _v.charAt(1) === '=' ? self.lte(_v.slice(2)) : self.lt(_v.slice(1));
- } else {
- _cf = self.eq(_v);
- }
-
- return _cf;
- };
-
- this.isMinimum = function() {
- return self.gte(esMinVersion);
- };
-
- // check if lowest version in cluster = `version`
- this.eq = function(version) {
- return getVersions().then(function(v) {
- return version === self.min(v) ? true : false;
- });
-
- };
-
- // version > lowest version in cluster?
- this.gt = function(version) {
- return getVersions().then(function(v) {
- return version === self.min(v) ? false : self.gte(version);
- });
-
- };
-
- // version < highest version in cluster?
- this.lt = function(version) {
- return getVersions().then(function(v) {
- return version === self.max(v) ? false : self.lte(version);
- });
-
- };
-
- // Check if the lowest version in the cluster is >= to `version`
- this.gte = function(version) {
- return getVersions().then(function(v) {
- return self.compare(version,self.min(v));
- });
-
- };
-
- // Check if the highest version in the cluster is <= to `version`
- this.lte = function(version) {
- return getVersions().then(function(v) {
- return self.compare(self.max(v),version);
- });
- };
-
- // Determine if a specific version is greater than or equal to another
- this.compare = function (required,installed) {
- if(!required || !installed) {
- return undefined;
- }
-
- var a = installed.split('.');
- var b = required.split('.');
- var i;
-
- // leave suffixes as is ("RC1 or -SNAPSHOT")
- for (i = 0; i < Math.min(a.length, 3); ++i) {
- a[i] = Number(a[i]);
- }
- for (i = 0; i < Math.min(b.length, 3); ++i) {
- b[i] = Number(b[i]);
- }
- if (a.length === 2) {
- a[2] = 0;
- }
-
- if (a[0] > b[0]){return true;}
- if (a[0] < b[0]){return false;}
-
- if (a[1] > b[1]){return true;}
- if (a[1] < b[1]){return false;}
-
- if (a[2] > b[2]){return true;}
- if (a[2] < b[2]){return false;}
-
- if (a.length > 3) {
- // rc/beta suffix
- if (b.length <= 3) {
- return false;
- } // no suffix on b -> a<b
- return a[3] >= b[3];
- }
- if (b.length > 3) {
- // b has a suffix but a not -> a>b
- return true;
- }
-
- return true;
- };
-
- this.init();
-
- });
-
-});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/fields.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/fields.js b/metron-ui/lib/public/app/services/fields.js
deleted file mode 100755
index 3d01490..0000000
--- a/metron-ui/lib/public/app/services/fields.js
+++ /dev/null
@@ -1,111 +0,0 @@
-define([
- 'angular',
- 'lodash',
- 'config'
-],
-function (angular, _, config) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('fields', function(dashboard, $rootScope, $http, esVersion, alertSrv, ejsResource) {
-
- // Save a reference to this
- var self = this;
-
- var ejs = ejsResource(config.elasticsearch);
-
-
- this.list = ['_type'];
- this.indices = [];
-
- // Stop tracking the full mapping, too expensive, instead we only remember the index names
- // we've already seen.
- //
- $rootScope.$watch(function(){return dashboard.indices;},function(n) {
- if(!_.isUndefined(n) && n.length && dashboard.current.index.warm_fields) {
- // Only get the mapping for indices we don't know it for
- var indices = _.difference(n,_.keys(self.indices));
- // Only get the mapping if there are new indices
- if(indices.length > 0) {
- self.map(indices).then(function(result) {
- self.indices = _.union(self.indices,_.keys(result));
- self.list = mapFields(result);
- });
- }
- }
- });
-
- var mapFields = function (m) {
- var fields = [];
- _.each(m, function(types) {
- _.each(types, function(type) {
- fields = _.difference(_.union(fields,_.keys(type)),
- ['_parent','_routing','_size','_ttl','_all','_uid','_version','_boost','_source']);
- });
- });
- return fields;
- };
-
- this.map = function(indices) {
- var request = ejs.client.get('/' + indices.join(',') + "/_mapping",
- undefined, undefined, function(data, status) {
- if(status === 0) {
- alertSrv.set('Error',"Could not contact Elasticsearch at "+ejs.config.server+
- ". Please ensure that Elasticsearch is reachable from your system." ,'error');
- } else {
- alertSrv.set('Error',"No index found at "+ejs.config.server+"/" +
- indices.join(',')+"/_mapping. Please create at least one index." +
- "If you're using a proxy ensure it is configured correctly.",'error');
- }
- });
-
- // Flatten the mapping of each index into dot notated keys.
- return request.then(function(p) {
- var mapping = {};
- return esVersion.gte('1.0.0.RC1').then(function(version) {
- _.each(p, function(indexMap,index) {
- mapping[index] = {};
- _.each((version ? indexMap.mappings : indexMap), function (typeMap,type) {
- mapping[index][type] = flatten(typeMap);
- });
- });
- return mapping;
- });
- });
- };
-
- // This should understand both the 1.0 format and the 0.90 format for mappings. Ugly.
- var flatten = function(obj,prefix) {
- var propName = (prefix) ? prefix : '',
- dot = (prefix) ? '.':'',
- ret = {};
- for(var attr in obj){
- if(attr === 'dynamic_templates' || attr === '_default_') {
- continue;
- }
- // For now only support multi field on the top level
- // and if there is a default field set.
- if(obj[attr]['type'] === 'multi_field') {
- ret[attr] = obj[attr]['fields'][attr] || obj[attr];
- var keys = _.without(_.keys(obj[attr]['fields']),attr);
- for(var key in keys) {
- ret[attr+'.'+keys[key]] = obj[attr]['fields'][keys[key]];
- }
- } else if (attr === 'properties' || attr ==='fields') {
- _.extend(ret,flatten(obj[attr], propName));
- } else if(typeof obj[attr] === 'object' &&
- (!_.isUndefined(obj[attr].type) || !_.isUndefined(obj[attr].properties))){
- _.extend(ret,flatten(obj[attr], propName + dot + attr));
- } else {
- if(propName !== '') {
- ret[propName] = obj;
- }
- }
- }
- return ret;
- };
-
- });
-
-});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/filterSrv.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/filterSrv.js b/metron-ui/lib/public/app/services/filterSrv.js
deleted file mode 100755
index 7201946..0000000
--- a/metron-ui/lib/public/app/services/filterSrv.js
+++ /dev/null
@@ -1,249 +0,0 @@
-define([
- 'angular',
- 'lodash',
- 'config',
- 'kbn'
-], function (angular, _, config, kbn) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('filterSrv', function(dashboard, ejsResource, $rootScope, $timeout) {
- // Create an object to hold our service state on the dashboard
- dashboard.current.services.filter = dashboard.current.services.filter || {};
-
- // Defaults for it
- var _d = {
- list : {},
- ids : []
- };
-
- // For convenience
- var ejs = ejsResource(config.elasticsearch);
-
- // Save a reference to this
- var self = this;
-
- // Call this whenever we need to reload the important stuff
- this.init = function() {
- // Populate defaults
- _.defaults(dashboard.current.services.filter,_d);
-
- _.each(dashboard.current.services.filter.list,function(f) {
- self.set(f,f.id,true);
- });
-
- };
-
- this.ids = function() {
- return dashboard.current.services.filter.ids;
- };
-
- this.list = function() {
- return dashboard.current.services.filter.list;
- };
-
- // This is used both for adding filters and modifying them.
- // If an id is passed, the filter at that id is updated
- this.set = function(filter,id,noRefresh) {
- var _r;
-
- _.defaults(filter,{
- mandate:'must',
- active: true
- });
-
- if(!_.isUndefined(id)) {
- if(!_.isUndefined(dashboard.current.services.filter.list[id])) {
- _.extend(dashboard.current.services.filter.list[id],filter);
- _r = id;
- } else {
- _r = false;
- }
- } else {
- if(_.isUndefined(filter.type)) {
- _r = false;
- } else {
- var _id = nextId();
- var _filter = {
- alias: '',
- id: _id,
- mandate: 'must'
- };
- _.defaults(filter,_filter);
- dashboard.current.services.filter.list[_id] = filter;
- dashboard.current.services.filter.ids.push(_id);
- _r = _id;
- }
- }
- if(!$rootScope.$$phase) {
- $rootScope.$apply();
- }
- if(noRefresh !== true) {
- $timeout(function(){
- dashboard.refresh();
- },0);
- }
- dashboard.current.services.filter.ids = dashboard.current.services.filter.ids =
- _.intersection(_.map(dashboard.current.services.filter.list,
- function(v,k){return parseInt(k,10);}),dashboard.current.services.filter.ids);
- $rootScope.$broadcast('filter');
-
- return _r;
- };
-
- this.remove = function(id,noRefresh) {
- var _r;
- if(!_.isUndefined(dashboard.current.services.filter.list[id])) {
- delete dashboard.current.services.filter.list[id];
- // This must happen on the full path also since _.without returns a copy
- dashboard.current.services.filter.ids = dashboard.current.services.filter.ids = _.without(dashboard.current.services.filter.ids,id);
- _r = true;
- } else {
- _r = false;
- }
- if(!$rootScope.$$phase) {
- $rootScope.$apply();
- }
- if(noRefresh !== true) {
- $timeout(function(){
- dashboard.refresh();
- },0);
- }
- $rootScope.$broadcast('filter');
- return _r;
- };
-
- this.removeByType = function(type,noRefresh) {
- var ids = self.idsByType(type);
- _.each(ids,function(id) {
- self.remove(id,true);
- });
- if(noRefresh !== true) {
- $timeout(function(){
- dashboard.refresh();
- },0);
- }
- return ids;
- };
-
- this.getBoolFilter = function(ids) {
- var bool = ejs.BoolFilter();
- // there is no way to introspect the BoolFilter and find out if it has a filter. We must keep note.
- var added_a_filter = false;
-
- _.each(ids,function(id) {
- if(dashboard.current.services.filter.list[id].active) {
- added_a_filter = true;
-
- switch(dashboard.current.services.filter.list[id].mandate)
- {
- case 'mustNot':
- bool.mustNot(self.getEjsObj(id));
- break;
- case 'either':
- bool.should(self.getEjsObj(id));
- break;
- default:
- bool.must(self.getEjsObj(id));
- }
- }
- });
- // add a match filter so we'd get some data
- if (!added_a_filter) {
- bool.must(ejs.MatchAllFilter());
- }
- return bool;
- };
-
- this.getEjsObj = function(id) {
- return self.toEjsObj(dashboard.current.services.filter.list[id]);
- };
-
- this.toEjsObj = function (filter) {
- if(!filter.active) {
- return false;
- }
- switch(filter.type)
- {
- case 'time':
- var _f = ejs.RangeFilter(filter.field).from(kbn.parseDate(filter.from).valueOf());
- if(!_.isUndefined(filter.to)) {
- _f = _f.to(kbn.parseDate(filter.to).valueOf());
- }
- return _f;
- case 'range':
- return ejs.RangeFilter(filter.field)
- .from(filter.from)
- .to(filter.to);
- case 'querystring':
- return ejs.QueryFilter(ejs.QueryStringQuery(filter.query)).cache(true);
- case 'field':
- return ejs.QueryFilter(ejs.QueryStringQuery(filter.field+":("+filter.query+")")).cache(true);
- case 'terms':
- return ejs.TermsFilter(filter.field,filter.value);
- case 'exists':
- return ejs.ExistsFilter(filter.field);
- case 'missing':
- return ejs.MissingFilter(filter.field);
- default:
- return false;
- }
- };
-
- this.getByType = function(type,inactive) {
- return _.pick(dashboard.current.services.filter.list,self.idsByType(type,inactive));
- };
-
- this.idsByType = function(type,inactive) {
- var _require = inactive ? {type:type} : {type:type,active:true};
- return _.pluck(_.where(dashboard.current.services.filter.list,_require),'id');
- };
-
- // TOFIX: Error handling when there is more than one field
- this.timeField = function() {
- return _.pluck(self.getByType('time'),'field');
- };
-
- // Parse is used when you need to know about the raw filter
- this.timeRange = function(parse) {
- var _t = _.last(_.where(dashboard.current.services.filter.list,{type:'time',active:true}));
- if(_.isUndefined(_t)) {
- return false;
- }
- if(parse === false) {
- return {
- from: _t.from,
- to: _t.to
- };
- } else {
- var
- _from = _t.from,
- _to = _t.to || new Date();
-
- return {
- from : kbn.parseDate(_from),
- to : kbn.parseDate(_to)
- };
- }
- };
-
- var nextId = function() {
- var idCount = dashboard.current.services.filter.ids.length;
- if(idCount > 0) {
- // Make a sorted copy of the ids array
- var ids = _.sortBy(_.clone(dashboard.current.services.filter.ids),function(num){
- return num;
- });
- return kbn.smallestMissing(ids);
- } else {
- // No ids currently in list
- return 0;
- }
- };
-
- // Now init
- self.init();
- });
-
-});
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/kbnIndex.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/kbnIndex.js b/metron-ui/lib/public/app/services/kbnIndex.js
deleted file mode 100755
index 8dbdb85..0000000
--- a/metron-ui/lib/public/app/services/kbnIndex.js
+++ /dev/null
@@ -1,115 +0,0 @@
-define([
- 'angular',
- 'lodash',
- 'config',
- 'moment'
-],
-function (angular, _, config, moment) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('kbnIndex', function($http, alertSrv, ejsResource) {
- // returns a promise containing an array of all indices matching the index
- // pattern that exist in a given range
- this.indices = function(from,to,pattern,interval) {
- var possible = [];
- _.each(expand_range(from,to,interval),function(d){
- possible.push(d.utc().format(pattern));
- });
-
- return resolve_indices(possible).then(function(p) {
- // an extra intersection
- var indices = _.uniq(_.flatten(_.map(possible,function(possibleIndex) {
- return _.intersection(possibleIndex.split(','),p);
- })));
- indices.reverse();
- return indices;
- });
- };
-
- var ejs = ejsResource(config.elasticsearch);
-
-
- // returns a promise containing an array of all indices in an elasticsearch
- // cluster
- function resolve_indices(indices) {
- var something;
- indices = _.uniq(_.map(indices, encodeURIComponent));
-
- something = ejs.client.get("/" + indices.join(",") + "/_aliases?ignore_missing=true",
- undefined, undefined, function (data, p) {
- if (p === 404) {
- return [];
- }
- else if(p === 0) {
- alertSrv.set('Error',"Could not contact Elasticsearch at "+ejs.config.server+
- ". Please ensure that Elasticsearch is reachable from your system." ,'error');
- } else {
- alertSrv.set('Error',"Could not reach "+ejs.config.server+"/_aliases. If you"+
- " are using a proxy, ensure it is configured correctly",'error');
- }
- return [];
- });
-
- return something.then(function(p) {
-
- var indices = [];
- _.each(p, function(v,k) {
- indices.push(k);
- // Also add the aliases. Could be expensive on systems with a lot of them
- _.each(v.aliases, function(v, k) {
- indices.push(k);
- });
- });
- return indices;
- });
- }
-
- /*
- // this is stupid, but there is otherwise no good way to ensure that when
- // I extract the date from an object that I get the UTC date. Stupid js.
- // I die a little inside every time I call this function.
- // Update: I just read this again. I died a little more inside.
- // Update2: More death.
- function fake_utc(date) {
- date = moment(date).clone().toDate();
- return moment(new Date(date.getTime() + date.getTimezoneOffset() * 60000));
- }
- */
-
- // Create an array of date objects by a given interval
- function expand_range(start, end, interval) {
- if(_.contains(['hour','day','week','month','year'],interval)) {
- var range;
- start = moment(start).clone();
- range = [];
- while (start.isBefore(end)) {
- range.push(start.clone());
- switch (interval) {
- case 'hour':
- start.add('hours',1);
- break;
- case 'day':
- start.add('days',1);
- break;
- case 'week':
- start.add('weeks',1);
- break;
- case 'month':
- start.add('months',1);
- break;
- case 'year':
- start.add('years',1);
- break;
- }
- }
- range.push(moment(end).clone());
- return range;
- } else {
- return false;
- }
- }
- });
-
-});
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/panelMove.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/panelMove.js b/metron-ui/lib/public/app/services/panelMove.js
deleted file mode 100755
index e2d9b04..0000000
--- a/metron-ui/lib/public/app/services/panelMove.js
+++ /dev/null
@@ -1,68 +0,0 @@
-define([
- 'angular',
- 'lodash'
-],
-function (angular, _) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('panelMove', function(dashboard, $rootScope) {
-
- /* each of these can take event,ui,data parameters */
-
- this.onStart = function() {
- dashboard.panelDragging = true;
- $rootScope.$apply();
- };
-
- this.onOver = function() {
- $rootScope.$apply();
- };
-
- this.onOut = function() {
- $rootScope.$apply();
- };
-
- /*
- Use our own drop logic. the $parent.$parent this is ugly.
- */
- this.onDrop = function(event,ui,data) {
- var
- dragRow = data.draggableScope.$parent.$parent.row.panels,
- dropRow = data.droppableScope.$parent.$parent.row.panels,
- dragIndex = data.dragSettings.index,
- dropIndex = data.dropSettings.index;
-
-
- // Remove panel from source row
- dragRow.splice(dragIndex,1);
-
- // Add to destination row
- if(!_.isUndefined(dropRow)) {
- dropRow.splice(dropIndex,0,data.dragItem);
- }
-
- dashboard.panelDragging = false;
- // Cleanup nulls/undefined left behind
- cleanup();
- $rootScope.$apply();
- $rootScope.$broadcast('render');
- };
-
- this.onStop = function() {
- dashboard.panelDragging = false;
- cleanup();
- $rootScope.$apply();
- };
-
- var cleanup = function () {
- _.each(dashboard.current.rows, function(row) {
- row.panels = _.without(row.panels,{});
- row.panels = _.compact(row.panels);
- });
- };
-
- });
-
-});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/querySrv.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/querySrv.js b/metron-ui/lib/public/app/services/querySrv.js
deleted file mode 100755
index d883de6..0000000
--- a/metron-ui/lib/public/app/services/querySrv.js
+++ /dev/null
@@ -1,284 +0,0 @@
-define([
- 'angular',
- 'lodash',
- 'config',
- 'kbn'
-],
-function (angular, _, config, kbn) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('querySrv', function(dashboard, ejsResource, filterSrv, esVersion, $q) {
-
- // Save a reference to this
- var self = this;
-
- // Create an object to hold our service state on the dashboard
- dashboard.current.services.query = dashboard.current.services.query || {};
- _.defaults(dashboard.current.services.query,{
- list : {},
- ids : [],
- });
-
- this.colors = [
- "#7EB26D","#EAB839","#6ED0E0","#EF843C","#E24D42","#1F78C1","#BA43A9","#705DA0", //1
- "#508642","#CCA300","#447EBC","#C15C17","#890F02","#0A437C","#6D1F62","#584477", //2
- "#B7DBAB","#F4D598","#70DBED","#F9BA8F","#F29191","#82B5D8","#E5A8E2","#AEA2E0", //3
- "#629E51","#E5AC0E","#64B0C8","#E0752D","#BF1B00","#0A50A1","#962D82","#614D93", //4
- "#9AC48A","#F2C96D","#65C5DB","#F9934E","#EA6460","#5195CE","#D683CE","#806EB7", //5
- "#3F6833","#967302","#2F575E","#99440A","#58140C","#052B51","#511749","#3F2B5B", //6
- "#E0F9D7","#FCEACA","#CFFAFF","#F9E2D2","#FCE2DE","#BADFF4","#F9D9F9","#DEDAF7" //7
- ];
-
- // For convenience
- var ejs = ejsResource(config.elasticsearch);
-
- // Holds all actual queries, including all resolved abstract queries
- var resolvedQueries = [];
-
- // Defaults for generic query object
- var _query = {
- alias: '',
- pin: false,
- type: 'lucene',
- enable: true
- };
-
- // Defaults for specific query types
- var _dTypes = {
- "lucene": {
- query: "*"
- },
- "regex": {
- query: ".*"
- },
- "topN": {
- query: "*",
- field: "_type",
- size: 5,
- union: 'AND'
- }
- };
-
- // query type meta data that is not stored on the dashboard object
- this.queryTypes = {
- lucene: {
- require:">=0.17.0",
- icon: "icon-circle",
- resolve: function(query) {
- // Simply returns itself
- var p = $q.defer();
- p.resolve(_.extend(query,{parent:query.id}));
- return p.promise;
- }
- },
- regex: {
- require:">=0.90.12",
- icon: "icon-circle",
- resolve: function(query) {
- // Simply returns itself
- var p = $q.defer();
- p.resolve(_.extend(query,{parent:query.id}));
- return p.promise;
- }
- },
- topN : {
- require:">=0.90.3",
- icon: "icon-cog",
- resolve: function(q) {
- var suffix = '';
- if (q.union === 'AND') {
- suffix = ' AND (' + (q.query||'*') + ')';
- } else if (q.union === 'OR') {
- suffix = ' OR (' + (q.query||'*') + ')';
- }
-
- var request = ejs.Request().indices(dashboard.indices);
- // Terms mode
- request = request
- .facet(ejs.TermsFacet('query')
- .field(q.field)
- .size(q.size)
- .facetFilter(ejs.QueryFilter(
- ejs.FilteredQuery(
- ejs.QueryStringQuery(q.query || '*'),
- filterSrv.getBoolFilter(filterSrv.ids)
- )))).size(0);
-
- var results = request.doSearch();
- // Like the regex and lucene queries, this returns a promise
- return results.then(function(data) {
- var _colors = kbn.colorSteps(q.color,data.facets.query.terms.length);
- var i = -1;
- return _.map(data.facets.query.terms,function(t) {
- ++i;
- return self.defaults({
- query : q.field+':"'+kbn.addslashes('' + t.term)+'"'+suffix,
- alias : t.term + (q.alias ? " ("+q.alias+")" : ""),
- type : 'lucene',
- color : _colors[i],
- parent : q.id
- });
- });
- });
- }
- }
- };
-
- self.types = [];
- _.each(self.queryTypes,function(type,name){
- esVersion.is(type.require).then(function(is) {
- if(is) {
- self.types.push(name);
- }
- });
- });
-
-
- this.list = function () {
- return dashboard.current.services.query.list;
- };
-
- this.ids = function () {
- return dashboard.current.services.query.ids;
- };
-
- this.init = function() {
-
- dashboard.current.services.query.ids =
- _.intersection(_.map(dashboard.current.services.query.list,
- function(v,k){return parseInt(k,10);}),self.ids());
-
- // Check each query object, populate its defaults
- _.each(dashboard.current.services.query.list,function(query) {
- query = self.defaults(query);
- });
-
- if (dashboard.current.services.query.ids.length === 0) {
- self.set({});
- }
- };
-
- // This is used both for adding queries and modifying them. If an id is passed,
- // the query at that id is updated
- this.set = function(query,id) {
- if(!_.isUndefined(id)) {
- if(!_.isUndefined(dashboard.current.services.query.list[id])) {
- _.extend(dashboard.current.services.query.list[id],query);
- return id;
- } else {
- return false;
- }
- } else {
- // Query must have an id and color already
- query.id = _.isUndefined(query.id) ? nextId() : query.id;
- query.color = query.color || colorAt(query.id);
- // Then it can get defaults
- query = self.defaults(query);
- dashboard.current.services.query.list[query.id] = query;
- dashboard.current.services.query.ids.push(query.id);
- return query.id;
- }
- };
-
- this.defaults = function(query) {
- _.defaults(query,_query);
- _.defaults(query,_dTypes[query.type]);
- query.color = query.color || colorAt(query.id);
- return query;
- };
-
- this.remove = function(id) {
- if(!_.isUndefined(dashboard.current.services.query.list[id])) {
- delete dashboard.current.services.query.list[id];
- // This must happen on the full path also since _.without returns a copy
- dashboard.current.services.query.ids = _.without(dashboard.current.services.query.ids,id);
- return true;
- } else {
- return false;
- }
- };
-
-
- // These are the only query types that can be returned by a compound query.
- this.toEjsObj = function (q) {
- switch(q.type)
- {
- case 'lucene':
- return ejs.QueryStringQuery(q.query || '*');
- case 'regex':
- return ejs.RegexpQuery('_all',q.query);
- default:
- return false;
- }
- };
-
- //
- this.getQueryObjs = function(ids) {
- if(_.isUndefined(ids)) {
- return resolvedQueries;
- } else {
- return _.flatten(_.map(ids,function(id) {
- return _.where(resolvedQueries,{parent:id});
- }));
- }
- };
-
- // BROKEN
- this.idsByMode = function(config) {
- switch(config.mode)
- {
- case 'all':
- return _.pluck(_.where(dashboard.current.services.query.list,{enable:true}),'id');
- case 'pinned':
- return _.pluck(_.where(dashboard.current.services.query.list,{pin:true,enable:true}),'id');
- case 'unpinned':
- return _.pluck(_.where(dashboard.current.services.query.list,{pin:false,enable:true}),'id');
- case 'selected':
- return _.intersection(_.pluck(_.where(dashboard.current.services.query.list,{enable:true}),'id'),config.ids);
- default:
- return _.pluck(_.where(dashboard.current.services.query.list,{enable:true}),'id');
- }
- };
-
- // This populates the internal query list and returns a promise containing it
- this.resolve = function() {
- // Find ids of all abstract queries
- // Get a list of resolvable ids, constrast with total list to get abstract ones
- return $q.all(_.map(dashboard.current.services.query.ids,function(q) {
- return self.queryTypes[dashboard.current.services.query.list[q].type].resolve(
- _.clone(dashboard.current.services.query.list[q])).then(function(data){
- return data;
- });
- })).then(function(data) {
- resolvedQueries = _.flatten(data);
- _.each(resolvedQueries,function(q,i) {
- q.id = i;
- });
- return resolvedQueries;
- });
- };
-
- var nextId = function() {
- var idCount = dashboard.current.services.query.ids.length;
- if(idCount > 0) {
- // Make a sorted copy of the ids array
- var ids = _.sortBy(_.clone(dashboard.current.services.query.ids),function(num){
- return num;
- });
- return kbn.smallestMissing(ids);
- } else {
- // No ids currently in list
- return 0;
- }
- };
-
- var colorAt = function(id) {
- return self.colors[id % self.colors.length];
- };
-
- self.init();
- });
-
-});
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/app/services/timer.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/app/services/timer.js b/metron-ui/lib/public/app/services/timer.js
deleted file mode 100755
index 128b3f4..0000000
--- a/metron-ui/lib/public/app/services/timer.js
+++ /dev/null
@@ -1,34 +0,0 @@
-define([
- 'angular',
- 'lodash'
-],
-function (angular, _) {
- 'use strict';
-
- var module = angular.module('kibana.services');
-
- module.service('timer', function($timeout) {
- // This service really just tracks a list of $timeout promises to give us a
- // method for cancelling them all when we need to
-
- var timers = [];
-
- this.register = function(promise) {
- timers.push(promise);
- return promise;
- };
-
- this.cancel = function(promise) {
- timers = _.without(timers,promise);
- $timeout.cancel(promise);
- };
-
- this.cancel_all = function() {
- _.each(timers, function(t){
- $timeout.cancel(t);
- });
- timers = [];
- };
- });
-
-});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/40aadab8/metron-ui/lib/public/config.js
----------------------------------------------------------------------
diff --git a/metron-ui/lib/public/config.js b/metron-ui/lib/public/config.js
deleted file mode 100755
index 53ea9a6..0000000
--- a/metron-ui/lib/public/config.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/** @scratch /configuration/config.js/1
- *
- * == Configuration
- * config.js is where you will find the core Kibana configuration. This file contains parameter that
- * must be set before kibana is run for the first time.
- */
-define(['settings'],
-function (Settings) {
- "use strict";
-
- /** @scratch /configuration/config.js/2
- *
- * === Parameters
- */
- return new Settings({
-
- /** @scratch /configuration/config.js/5
- *
- * ==== elasticsearch
- *
- * The URL to your elasticsearch server. You almost certainly don't
- * want +http://localhost:9200+ here. Even if Kibana and Elasticsearch are on
- * the same host. By default this will attempt to reach ES at the same host you have
- * kibana installed on. You probably want to set it to the FQDN of your
- * elasticsearch host
- *
- * Note: this can also be an object if you want to pass options to the http client. For example:
- *
- * +elasticsearch: {server: "http://localhost:9200", withCredentials: true}+
- *
- */
- elasticsearch: location.protocol + '//' + location.host + '/__es',
-
- /** @scratch /configuration/config.js/5
- *
- * ==== default_route
- *
- * This is the default landing page when you don't specify a dashboard to load. You can specify
- * files, scripts or saved dashboards here. For example, if you had saved a dashboard called
- * `WebLogs' to elasticsearch you might use:
- *
- * default_route: '/dashboard/elasticsearch/WebLogs',
- */
- default_route : '/dashboard/file/default.json',
- // default_route: '/dashboard/elasticsearch/Your Basic Dashboard',
-
- /** @scratch /configuration/config.js/5
- *
- * ==== kibana-int
- *
- * The default ES index to use for storing Kibana specific object
- * such as stored dashboards
- */
- kibana_index: "kibana-int",
-
- /** @scratch /configuration/config.js/5
- *
- * ==== panel_name
- *
- * An array of panel modules available. Panels will only be loaded when they are defined in the
- * dashboard, but this list is used in the "add panel" interface.
- */
- panel_names: [
- 'histogram',
- 'map',
- 'goal',
- 'table',
- 'filtering',
- 'timepicker',
- 'text',
- 'pcap',
- 'hits',
- 'column',
- 'trends',
- 'bettermap',
- 'query',
- 'terms',
- 'stats',
- 'sparklines'
- ]
- });
-});