Commit 04caf67a by Rashid Khan

Merge remote-tracking branch 'upstream/master'

parents 8e9d3f7d 78bfa53d
File mode changed from 100644 to 100755
node_modules/*
dist/*
sample/*
src/vendor/*
src/app/panels/*/{lib,leaflet}/*
\ No newline at end of file
{
"jquery": true,
"browser": true,
"browser": true,
"bitwise":false,
"curly": true,
"eqnull": true,
"globalstrict": true,
"devel": true,
"eqeqeq": true,
"forin": false,
"immed": true,
"supernew": true,
"expr": true,
"indent": 2,
"latedef": true,
"newcap": true,
"noarg": true,
"noempty": true,
"undef": true,
"boss": true,
"trailing": false,
"laxbreak": true,
"laxcomma": true,
"sub": true,
"bitwise":false,
"curly": true,
"eqnull": true,
"globalstrict": true,
"devel": true,
"eqeqeq": true,
"forin": false,
"immed": true,
"supernew": true,
"expr": true,
"indent": 2,
"latedef": true,
"newcap": true,
"noarg": true,
"noempty": true,
"undef": true,
"boss": true,
"trailing": false,
"laxbreak": true,
"laxcomma": true,
"sub": true,
"unused": true,
"maxlen": 140,
"maxlen": 140,
"globals": {
"$LAB": false,
"_": false,
"$": false,
"kbn" : false,
"angular" : false,
"exports": true,
"module": false,
"config": false,
"moment": false
}
"globals": {
"define": true,
"require": true
}
}
\ No newline at end of file
File mode changed from 100644 to 100755
/* jshint node:true */
'use strict';
module.exports = function (grunt) {
var post = ['src/client.js','src/post.js'];
// Project configuration.
grunt.initConfig({
var config = {
pkg: grunt.file.readJSON('package.json'),
srcDir: 'src',
destDir: 'dist',
tempDir: 'tmp',
meta: {
banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
'<%= grunt.template.today("yyyy-mm-dd") %>\n' +
......@@ -14,33 +14,206 @@ module.exports = function (grunt) {
' * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' +
' Licensed <%= pkg.license %> */\n\n'
},
clean: {
on_start: ['<%= destDir %>', '<%= tempDir %>'],
after_require: ['<%= tempDir %>'],
},
copy: {
everthing_left_in_src: {
cwd: '<%= srcDir %>',
expand: true,
src: [
'**/*.js',
'**/*.json',
'font/**/*',
'img/**/*',
'panels/bettermap/leaflet/*.png'
],
dest: '<%= tempDir %>'
}//,
// dist_to_temp: {
// cwd: '<%= destDir %>',
// expand: true,
// src: '**/*',
// dest: '<%= tempDir %>'
// }
},
jshint: {
files: ['Gruntfile.js', 'js/*.js', 'panels/*/*.js', 'dashboards/*.js' ],
// just lint the source dir
source: {
files: {
src: ['Gruntfile.js', '<%= srcDir %>/app/**/*.js']
}
},
options: {
jshintrc: '.jshintrc'
}
},
less: {
production: {
options: {
paths: ["vendor/bootstrap/less"],
yuicompress:true
dist:{
options:{
compress: true
},
files: {
"common/css/bootstrap.dark.min.css": "vendor/bootstrap/less/bootstrap.dark.less",
"common/css/bootstrap.light.min.css": "vendor/bootstrap/less/bootstrap.light.less"
expand: true,
cwd:'<%= srcDir %>/vendor/bootstrap/less/',
src: ['bootstrap.dark.less', 'bootstrap.light.less'],
dest: '<%= tempDir %>/css/',
}
},
cssmin: {
dist: {
expand: true,
cwd: '<%= srcDir %>',
src: [
'**/*.css'
],
dest: '<%= tempDir %>'
}
},
htmlmin:{
dist: {
options:{
removeComments: true,
collapseWhitespace: true
},
expand: true,
cwd: '<%= srcDir %>',
src: [
'index.html',
'app/panels/**/*.html',
'app/partials/**/*.html'
],
dest: '<%= tempDir %>'
}
},
ngmin: {
scripts: {
expand:true,
cwd:'<%= tempDir %>',
src: [
'app/controllers/**/*.js',
'app/directives/**/*.js',
'app/services/**/*.js',
'app/filters/**/*.js',
'app/panels/**/*.js',
'app/app.js',
'vendor/angular/**/*.js',
'vendor/elasticjs/elastic-angular-client.js'
],
dest: '<%= tempDir %>'
}
},
requirejs: {
compile_temp: {
options: {
appDir: '<%= tempDir %>',
dir: '<%= destDir %>',
modules: [], // populated below
mainConfigFile: '<%= tempDir %>/app/components/require.config.js',
keepBuildDir: true,
optimize: 'uglify',
optimizeCss: 'none',
uglify: {
max_line_length: 1000,
// beautify: true, // uncomment for easier debugging
indent_level: 2,
},
preserveLicenseComments: false,
findNestedDependencies: true,
normalizeDirDefines: "none",
inlineText: true,
skipPragmas: true,
// stubModules: ["text"],
optimizeAllPluginResources: false,
removeCombined: true,
fileExclusionRegExp: /^\./,
logLevel: 0,
skipSemiColonInsertion: true,
done: function (done, output) {
var duplicates = require('rjs-build-analysis').duplicates(output);
if (duplicates.length > 0) {
grunt.log.subhead('Duplicates found in requirejs build:');
grunt.log.warn(duplicates);
done(new Error('r.js built duplicate modules, please check the excludes option.'));
}
done();
},
config: {
'tmpl': {
registerTemplate: function () {}
}
}
}
}
}
};
var fs = require('fs');
var requireModules = [
{
// main/common module
name: 'app',
include: [
'kbn',
'jquery',
'underscore',
'angular',
'bootstrap',
'modernizr',
'jquery',
'angular-sanitize',
'timepicker',
'datepicker',
'elasticjs',
'angular-strap',
'directives/all',
'filters/all',
'services/all',
'jquery.flot',
'jquery.flot.pie',
'text'
]
}
];
// create a module for each directory in src/app/panels/
fs.readdirSync(config.srcDir+'/app/panels').forEach(function (panelName) {
requireModules.push({
name: 'panels/'+panelName+'/module',
exclude: ['app']
});
});
config.requirejs.compile_temp.options.modules = requireModules;
// load plugins
grunt.loadNpmTasks('grunt-ngmin');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('assemble-less');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-htmlmin');
grunt.loadNpmTasks('grunt-contrib-requirejs');
// Project configuration.
grunt.initConfig(config);
// Default task.
grunt.registerTask('default', ['jshint','less']);
grunt.registerTask('default', ['jshint:source','less']);
grunt.registerTask('build', [
'jshint:source',
'clean:on_start',
'htmlmin',
'less',
'cssmin',
'copy:everthing_left_in_src',
'ngmin',
'requirejs:compile_temp',
'clean:after_require'
]);
};
\ No newline at end of file
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
/*! LAB.js (LABjs :: Loading And Blocking JavaScript)
v2.0.3 (c) Kyle Simpson
MIT License
*/
(function(o){var K=o.$LAB,y="UseLocalXHR",z="AlwaysPreserveOrder",u="AllowDuplicates",A="CacheBust",B="BasePath",C=/^[^?#]*\//.exec(location.href)[0],D=/^\w+\:\/\/\/?[^\/]+/.exec(C)[0],i=document.head||document.getElementsByTagName("head"),L=(o.opera&&Object.prototype.toString.call(o.opera)=="[object Opera]")||("MozAppearance"in document.documentElement.style),q=document.createElement("script"),E=typeof q.preload=="boolean",r=E||(q.readyState&&q.readyState=="uninitialized"),F=!r&&q.async===true,M=!r&&!F&&!L;function G(a){return Object.prototype.toString.call(a)=="[object Function]"}function H(a){return Object.prototype.toString.call(a)=="[object Array]"}function N(a,c){var b=/^\w+\:\/\//;if(/^\/\/\/?/.test(a)){a=location.protocol+a}else if(!b.test(a)&&a.charAt(0)!="/"){a=(c||"")+a}return b.test(a)?a:((a.charAt(0)=="/"?D:C)+a)}function s(a,c){for(var b in a){if(a.hasOwnProperty(b)){c[b]=a[b]}}return c}function O(a){var c=false;for(var b=0;b<a.scripts.length;b++){if(a.scripts[b].ready&&a.scripts[b].exec_trigger){c=true;a.scripts[b].exec_trigger();a.scripts[b].exec_trigger=null}}return c}function t(a,c,b,d){a.onload=a.onreadystatechange=function(){if((a.readyState&&a.readyState!="complete"&&a.readyState!="loaded")||c[b])return;a.onload=a.onreadystatechange=null;d()}}function I(a){a.ready=a.finished=true;for(var c=0;c<a.finished_listeners.length;c++){a.finished_listeners[c]()}a.ready_listeners=[];a.finished_listeners=[]}function P(d,f,e,g,h){setTimeout(function(){var a,c=f.real_src,b;if("item"in i){if(!i[0]){setTimeout(arguments.callee,25);return}i=i[0]}a=document.createElement("script");if(f.type)a.type=f.type;if(f.charset)a.charset=f.charset;if(h){if(r){e.elem=a;if(E){a.preload=true;a.onpreload=g}else{a.onreadystatechange=function(){if(a.readyState=="loaded")g()}}a.src=c}else if(h&&c.indexOf(D)==0&&d[y]){b=new XMLHttpRequest();b.onreadystatechange=function(){if(b.readyState==4){b.onreadystatechange=function(){};e.text=b.responseText+"\n//@ sourceURL="+c;g()}};b.open("GET",c);b.send()}else{a.type="text/cache-script";t(a,e,"ready",function(){i.removeChild(a);g()});a.src=c;i.insertBefore(a,i.firstChild)}}else if(F){a.async=false;t(a,e,"finished",g);a.src=c;i.insertBefore(a,i.firstChild)}else{t(a,e,"finished",g);a.src=c;i.insertBefore(a,i.firstChild)}},0)}function J(){var l={},Q=r||M,n=[],p={},m;l[y]=true;l[z]=false;l[u]=false;l[A]=false;l[B]="";function R(a,c,b){var d;function f(){if(d!=null){d=null;I(b)}}if(p[c.src].finished)return;if(!a[u])p[c.src].finished=true;d=b.elem||document.createElement("script");if(c.type)d.type=c.type;if(c.charset)d.charset=c.charset;t(d,b,"finished",f);if(b.elem){b.elem=null}else if(b.text){d.onload=d.onreadystatechange=null;d.text=b.text}else{d.src=c.real_src}i.insertBefore(d,i.firstChild);if(b.text){f()}}function S(c,b,d,f){var e,g,h=function(){b.ready_cb(b,function(){R(c,b,e)})},j=function(){b.finished_cb(b,d)};b.src=N(b.src,c[B]);b.real_src=b.src+(c[A]?((/\?.*$/.test(b.src)?"&_":"?_")+~~(Math.random()*1E9)+"="):"");if(!p[b.src])p[b.src]={items:[],finished:false};g=p[b.src].items;if(c[u]||g.length==0){e=g[g.length]={ready:false,finished:false,ready_listeners:[h],finished_listeners:[j]};P(c,b,e,((f)?function(){e.ready=true;for(var a=0;a<e.ready_listeners.length;a++){e.ready_listeners[a]()}e.ready_listeners=[]}:function(){I(e)}),f)}else{e=g[0];if(e.finished){j()}else{e.finished_listeners.push(j)}}}function v(){var e,g=s(l,{}),h=[],j=0,w=false,k;function T(a,c){a.ready=true;a.exec_trigger=c;x()}function U(a,c){a.ready=a.finished=true;a.exec_trigger=null;for(var b=0;b<c.scripts.length;b++){if(!c.scripts[b].finished)return}c.finished=true;x()}function x(){while(j<h.length){if(G(h[j])){try{h[j++]()}catch(err){}continue}else if(!h[j].finished){if(O(h[j]))continue;break}j++}if(j==h.length){w=false;k=false}}function V(){if(!k||!k.scripts){h.push(k={scripts:[],finished:true})}}e={script:function(){for(var f=0;f<arguments.length;f++){(function(a,c){var b;if(!H(a)){c=[a]}for(var d=0;d<c.length;d++){V();a=c[d];if(G(a))a=a();if(!a)continue;if(H(a)){b=[].slice.call(a);b.unshift(d,1);[].splice.apply(c,b);d--;continue}if(typeof a=="string")a={src:a};a=s(a,{ready:false,ready_cb:T,finished:false,finished_cb:U});k.finished=false;k.scripts.push(a);S(g,a,k,(Q&&w));w=true;if(g[z])e.wait()}})(arguments[f],arguments[f])}return e},wait:function(){if(arguments.length>0){for(var a=0;a<arguments.length;a++){h.push(arguments[a])}k=h[h.length-1]}else k=false;x();return e}};return{script:e.script,wait:e.wait,setOptions:function(a){s(a,g);return e}}}m={setGlobalDefaults:function(a){s(a,l);return m},setOptions:function(){return v().setOptions.apply(null,arguments)},script:function(){return v().script.apply(null,arguments)},wait:function(){return v().wait.apply(null,arguments)},queueScript:function(){n[n.length]={type:"script",args:[].slice.call(arguments)};return m},queueWait:function(){n[n.length]={type:"wait",args:[].slice.call(arguments)};return m},runQueue:function(){var a=m,c=n.length,b=c,d;for(;--b>=0;){d=n.shift();a=a[d.type].apply(null,d.args)}return a},noConflict:function(){o.$LAB=K;return m},sandbox:function(){return J()}};return m}o.$LAB=J();(function(a,c,b){if(document.readyState==null&&document[a]){document.readyState="loading";document[a](c,b=function(){document.removeEventListener(c,b,false);document.readyState="complete"},false)}})("addEventListener","DOMContentLoaded")})(this);
\ No newline at end of file
/*
AngularJS v1.1.3
(c) 2010-2012 Google, Inc. http://angularjs.org
License: MIT
*/
(function(I,h){'use strict';function i(a){var d={},a=a.split(","),c;for(c=0;c<a.length;c++)d[a[c]]=!0;return d}function z(a,d){function c(a,b,c,f){b=h.lowercase(b);if(m[b])for(;e.last()&&n[e.last()];)g("",e.last());o[b]&&e.last()==b&&g("",b);(f=p[b]||!!f)||e.push(b);var j={};c.replace(A,function(a,b,d,c,g){j[b]=k(d||c||g||"")});d.start&&d.start(b,j,f)}function g(a,b){var c=0,g;if(b=h.lowercase(b))for(c=e.length-1;c>=0;c--)if(e[c]==b)break;if(c>=0){for(g=e.length-1;g>=c;g--)d.end&&d.end(e[g]);e.length=
c}}var b,f,e=[],j=a;for(e.last=function(){return e[e.length-1]};a;){f=!0;if(!e.last()||!q[e.last()]){if(a.indexOf("<\!--")===0)b=a.indexOf("--\>"),b>=0&&(d.comment&&d.comment(a.substring(4,b)),a=a.substring(b+3),f=!1);else if(B.test(a)){if(b=a.match(r))a=a.substring(b[0].length),b[0].replace(r,g),f=!1}else if(C.test(a)&&(b=a.match(s)))a=a.substring(b[0].length),b[0].replace(s,c),f=!1;f&&(b=a.indexOf("<"),f=b<0?a:a.substring(0,b),a=b<0?"":a.substring(b),d.chars&&d.chars(k(f)))}else a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+
e.last()+"[^>]*>","i"),function(a,b){b=b.replace(D,"$1").replace(E,"$1");d.chars&&d.chars(k(b));return""}),g("",e.last());if(a==j)throw"Parse Error: "+a;j=a}g()}function k(a){l.innerHTML=a.replace(/</g,"&lt;");return l.innerText||l.textContent||""}function t(a){return a.replace(/&/g,"&amp;").replace(F,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function u(a){var d=!1,c=h.bind(a,a.push);return{start:function(a,b,f){a=h.lowercase(a);!d&&q[a]&&(d=a);!d&&v[a]==
!0&&(c("<"),c(a),h.forEach(b,function(a,b){var d=h.lowercase(b);if(G[d]==!0&&(w[d]!==!0||a.match(H)))c(" "),c(b),c('="'),c(t(a)),c('"')}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);!d&&v[a]==!0&&(c("</"),c(a),c(">"));a==d&&(d=!1)},chars:function(a){d||c(t(a))}}}var s=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,r=/^<\s*\/\s*([\w:-]+)[^>]*>/,A=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,C=/^</,B=/^<\s*\//,D=/<\!--(.*?)--\>/g,
E=/<!\[CDATA\[(.*?)]]\>/g,H=/^((ftp|https?):\/\/|mailto:|tel:|#)/,F=/([^\#-~| |!])/g,p=i("area,br,col,hr,img,wbr"),x=i("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),y=i("rp,rt"),o=h.extend({},y,x),m=h.extend({},x,i("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),n=h.extend({},y,i("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),
q=i("script,style"),v=h.extend({},p,m,n,o),w=i("background,cite,href,longdesc,src,usemap"),G=h.extend({},w,i("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,span,start,summary,target,title,type,valign,value,vspace,width")),l=document.createElement("pre");h.module("ngSanitize",[]).value("$sanitize",function(a){var d=[];
z(a,u(d));return d.join("")});h.module("ngSanitize").directive("ngBindHtml",["$sanitize",function(a){return function(d,c,g){c.addClass("ng-binding").data("$binding",g.ngBindHtml);d.$watch(g.ngBindHtml,function(b){b=a(b);c.html(b||"")})}}]);h.module("ngSanitize").filter("linky",function(){var a=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,d=/^mailto:/;return function(c,g){if(!c)return c;var b,f=c,e=[],j=u(e),i,k,l={};if(h.isDefined(g))l.target=g;for(;b=f.match(a);)i=
b[0],b[2]==b[3]&&(i="mailto:"+i),k=b.index,j.chars(f.substr(0,k)),l.href=i,j.start("a",l),j.chars(b[0].replace(d,"")),j.end("a"),f=f.substring(k+b[0].length);j.chars(f);return e.join("")}})})(window,window.angular);
var saveAs=saveAs||(function(h){"use strict";var r=h.document,l=function(){return h.URL||h.webkitURL||h},e=h.URL||h.webkitURL||h,n=r.createElementNS("http://www.w3.org/1999/xhtml","a"),g="download" in n,j=function(t){var s=r.createEvent("MouseEvents");s.initMouseEvent("click",true,false,h,0,0,0,0,0,false,false,false,false,0,null);return t.dispatchEvent(s)},o=h.webkitRequestFileSystem,p=h.requestFileSystem||o||h.mozRequestFileSystem,m=function(s){(h.setImmediate||h.setTimeout)(function(){throw s},0)},c="application/octet-stream",k=0,b=[],i=function(){var t=b.length;while(t--){var s=b[t];if(typeof s==="string"){e.revokeObjectURL(s)}else{s.remove()}}b.length=0},q=function(t,s,w){s=[].concat(s);var v=s.length;while(v--){var x=t["on"+s[v]];if(typeof x==="function"){try{x.call(t,w||t)}catch(u){m(u)}}}},f=function(t,u){var v=this,B=t.type,E=false,x,w,s=function(){var F=l().createObjectURL(t);b.push(F);return F},A=function(){q(v,"writestart progress write writeend".split(" "))},D=function(){if(E||!x){x=s(t)}w.location.href=x;v.readyState=v.DONE;A()},z=function(F){return function(){if(v.readyState!==v.DONE){return F.apply(this,arguments)}}},y={create:true,exclusive:false},C;v.readyState=v.INIT;if(!u){u="download"}if(g){x=s(t);n.href=x;n.download=u;if(j(n)){v.readyState=v.DONE;A();return}}if(h.chrome&&B&&B!==c){C=t.slice||t.webkitSlice;t=C.call(t,0,t.size,c);E=true}if(o&&u!=="download"){u+=".download"}if(B===c||o){w=h}else{w=h.open()}if(!p){D();return}k+=t.size;p(h.TEMPORARY,k,z(function(F){F.root.getDirectory("saved",y,z(function(G){var H=function(){G.getFile(u,y,z(function(I){I.createWriter(z(function(J){J.onwriteend=function(K){w.location.href=I.toURL();b.push(I);v.readyState=v.DONE;q(v,"writeend",K)};J.onerror=function(){var K=J.error;if(K.code!==K.ABORT_ERR){D()}};"writestart progress write abort".split(" ").forEach(function(K){J["on"+K]=v["on"+K]});J.write(t);v.abort=function(){J.abort();v.readyState=v.DONE};v.readyState=v.WRITING}),D)}),D)};G.getFile(u,{create:false},z(function(I){I.remove();H()}),z(function(I){if(I.code===I.NOT_FOUND_ERR){H()}else{D()}}))}),D)}),D)},d=f.prototype,a=function(s,t){return new f(s,t)};d.abort=function(){var s=this;s.readyState=s.DONE;q(s,"abort")};d.readyState=d.INIT=0;d.WRITING=1;d.DONE=2;d.error=d.onwritestart=d.onprogress=d.onwrite=d.onabort=d.onerror=d.onwriteend=null;h.addEventListener("unload",i,false);return a}(self));
\ No newline at end of file
// To add a setting, you MUST define a default.
// THESE ARE ONLY DEFAULTS. They are overridden by config.js in the root directory
var Settings = function (s) {
var _d = {
elasticsearch : "http://"+window.location.hostname+":9200",
modules : [],
kibana_index : 'kibana-int'
}
// This initializes a new hash on purpose, to avoid adding parameters to
// config.js without providing sane defaults
var _s = {};
_.each(_d, function(v, k) {
_s[k] = typeof s[k] !== 'undefined' ? s[k] : _d[k];
});
return _s;
};
/*
elasticsearch: URL to your elasticsearch server. You almost certainly don't
want 'http://localhost:9200' here. Even if Kibana and ES are on
the same host
kibana_index: The default ES index to use for storing Kibana specific object
such as stored dashboards
modules: Panel modules to load. In the future these will be inferred
from your initial dashboard, though if you share dashboards you
will probably need to list them all here
If you need to configure the default dashboard, please see dashboards/default
*/
var config = new Settings(
{
// By default this will attempt to reach ES at the same host you have
// elasticsearch installed on. You probably want to set it to the FQDN of your
// elasticsearch host
elasticsearch: "http://"+window.location.hostname+":9200",
// elasticsearch: 'http://localhost:9200',
kibana_index: "kibana-int",
modules: ['histogram','map','pie','table','filtering',
'timepicker','text','fields','hits','dashcontrol',
'column','derivequeries','trends','bettermap','query',
'terms'],
}
);
This source diff could not be displayed because it is too large. You can view the blob instead.
require.config({baseUrl:"app",paths:{settings:"components/settings",kbn:"components/kbn",css:"../vendor/require/css",text:"../vendor/require/text",moment:"../vendor/moment",filesaver:"../vendor/filesaver",angular:"../vendor/angular/angular","angular-strap":"../vendor/angular/angular-strap","angular-sanitize":"../vendor/angular/angular-sanitize",timepicker:"../vendor/angular/timepicker",datepicker:"../vendor/angular/datepicker",underscore:"components/underscore.extended","underscore-src":"../vendor/underscore",bootstrap:"../vendor/bootstrap/bootstrap",jquery:"components/jquery.extended","jquery-src":"../vendor/jquery/jquery-1.8.0","jquery.flot":"../vendor/jquery/jquery.flot","jquery.flot.pie":"../vendor/jquery/jquery.flot.pie","jquery.flot.selection":"../vendor/jquery/jquery.flot.selection","jquery.flot.stack":"../vendor/jquery/jquery.flot.stack","jquery.flot.time":"../vendor/jquery/jquery.flot.time",modernizr:"../vendor/modernizr-2.6.1",elasticjs:"../vendor/elasticjs/elastic-angular-client"
},shim:{underscore:{exports:"_"},angular:{deps:["jquery"],exports:"angular"},bootstrap:{deps:["jquery"]},modernizr:{exports:"Modernizr"},"jquery-src":{exports:"jQuery"},"jquery.flot":["jquery"],"jquery.flot.pie":["jquery","jquery.flot"],"jquery.flot.selection":["jquery","jquery.flot"],"jquery.flot.stack":["jquery","jquery.flot"],"jquery.flot.time":["jquery","jquery.flot"],"angular-sanitize":["angular"],"angular-cookies":["angular"],"angular-loader":["angular"],"angular-mocks":["angular"],"angular-resource":["angular"],"angular-route":["angular"],"angular-touch":["angular"],"angular-strap":["angular","bootstrap","timepicker","datepicker"],timepicker:["jquery","bootstrap"],datepicker:["jquery","bootstrap"],elasticjs:["angular","../vendor/elasticjs/elastic"]}});
\ No newline at end of file
......@@ -59,7 +59,7 @@
],
"type": "text",
"mode": "markdown",
"content": "![kibana](common/img/kibana.png) \n\n##### Did you just upgrade? Not expecting this screen?\nIf you were using the old default page you might not be expecting this screen. I understand, change can be awkward. Let me explain. \n\n##### Setting a global default dashboard\nKibana has always shipped with an interface for Logstash, still does! You can access it [here](index.html#dashboard/file/logstash.json). However, if you want to make it your default again, all you you need to do is rename a file!\nIn your Kibana installation directory: \n\nRename *logstash.json* to *default.json* and refresh. Should be all set.\n\n##### But wait, there's more!\nIn fact, you can add any exported dashboard to that directory and access it as *http://YOUR-HOST -HERE/index.html#dashboard/file/YOUR-DASHBOARD.json*. Neat trick eh?",
"content": "![kibana](img/kibana.png) \n\n##### Did you just upgrade? Not expecting this screen?\nIf you were using the old default page you might not be expecting this screen. I understand, change can be awkward. Let me explain. \n\n##### Setting a global default dashboard\nKibana has always shipped with an interface for Logstash, still does! You can access it [here](index.html#dashboard/file/logstash.json). However, if you want to make it your default again, all you you need to do is rename a file!\nIn your Kibana installation directory: \n\nRename *logstash.json* to *default.json* and refresh. Should be all set.\n\n##### But wait, there's more!\nIn fact, you can add any exported dashboard to that directory and access it as *http://YOUR-HOST -HERE/index.html#dashboard/file/YOUR-DASHBOARD.json*. Neat trick eh?",
"style": {},
"title": "",
"status": "Stable"
......
/* global _, kbn */
/*
* Complex scripted Logstash dashboard
* This script generates a dashboard object that Kibana can load. It also takes a number of user
......@@ -18,7 +20,7 @@
*
*/
'use strict';
// Setup some variables
var dashboard, queries, _d_timespan;
......@@ -135,7 +137,7 @@ dashboard.rows[0].panels = [
// Add a filtering panel to the 3rd row
dashboard.rows[1].panels = [
{
type: 'query'
type: 'Query'
}
];
......
......@@ -190,8 +190,7 @@
"font-size": "9pt"
},
"overflow": "min-height",
"fields": [
],
"fields": [],
"highlight": [],
"sortable": true,
"header": true,
......@@ -215,4 +214,4 @@
"pattern": "[logstash-]YYYY.MM.DD",
"default": "NO_TIME_FILTER_OR_INDEX_PATTERN_NOT_MATCHED"
}
}
}
\ No newline at end of file
......@@ -175,4 +175,4 @@
"pattern": "[logstash-]YYYY.MM.DD",
"default": "_all"
}
}
}
\ No newline at end of file
<div class="row-fluid"><div class="span4"><form><h6>Coordinate Field<tip>geoJSON array! Long,Lat NOT Lat,Long</tip></h6><input bs-typeahead="fields.list" type="text" class="input-small" ng-model="panel.field"></form></div><div class="span4"><form><h6>Tooltip Field</h6><input bs-typeahead="fields.list" type="text" class="input-small" ng-model="panel.tooltip"></form></div><div class="span2"><h6>Max Points</h6><input type="number" class="input-small" ng-model="panel.size"></div></div>
\ No newline at end of file
;
\ No newline at end of file
.leaflet-map-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-pane,.leaflet-tile-container,.leaflet-overlay-pane,.leaflet-shadow-pane,.leaflet-marker-pane,.leaflet-popup-pane,.leaflet-overlay-pane svg,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden;-ms-touch-action:none}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container img{max-width:none!important}.leaflet-container img.leaflet-image-layer{max-width:15000px!important}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0}.leaflet-tile-pane{z-index:2}.leaflet-objects-pane{z-index:3}.leaflet-overlay-pane{z-index:4}.leaflet-shadow-pane{z-index:5}.leaflet-marker-pane{z-index:6}.leaflet-popup-pane{z-index:7}.leaflet-control{position:relative;z-index:7;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-tile,.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-tile-loaded,.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);-o-transition:-o-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile,.leaflet-touching .leaflet-zoom-animated{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-clickable{cursor:pointer}.leaflet-container{cursor:-webkit-grab;cursor:-moz-grab}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging,.leaflet-dragging .leaflet-clickable,.leaflet-dragging .leaflet-container{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing}.leaflet-container{background:#ddd;outline:0}.leaflet-container a{color:#0078A8}.leaflet-container a.leaflet-active{outline:2px solid orange}.leaflet-zoom-box{border:2px dotted #05f;background:#fff;opacity:.5}.leaflet-container{font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}.leaflet-bar{box-shadow:0 1px 7px rgba(0,0,0,.65);-webkit-border-radius:4px;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;border-bottom:0}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar{-webkit-border-radius:10px;border-radius:10px}.leaflet-touch .leaflet-bar a{width:30px;height:30px}.leaflet-touch .leaflet-bar a:first-child{-webkit-border-top-left-radius:7px;border-top-left-radius:7px;-webkit-border-top-right-radius:7px;border-top-right-radius:7px}.leaflet-touch .leaflet-bar a:last-child{-webkit-border-bottom-left-radius:7px;border-bottom-left-radius:7px;-webkit-border-bottom-right-radius:7px;border-bottom-right-radius:7px;border-bottom:0}.leaflet-control-zoom-in{font:700 18px 'Lucida Console',Monaco,monospace}.leaflet-control-zoom-out{font:700 22px 'Lucida Console',Monaco,monospace}.leaflet-touch .leaflet-control-zoom-in{font-size:22px;line-height:30px}.leaflet-touch .leaflet-control-zoom-out{font-size:28px;line-height:30px}.leaflet-control-layers{box-shadow:0 1px 7px rgba(0,0,0,.4);background:#f8f8f9;-webkit-border-radius:5px;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(images/layers.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(images/layers-2x.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-container .leaflet-control-attribution{background-color:rgba(255,255,255,.7);box-shadow:0 0 5px #bbb;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:0;color:#000;line-height:1.1;padding:2px 5px 1px;font-size:11px;text-shadow:1px 1px 1px #fff;background-color:rgba(255,255,255,.5);box-shadow:0 -1px 5px rgba(0,0,0,.2);white-space:nowrap;overflow:hidden}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:0;margin-top:-2px;box-shadow:0 2px 5px rgba(0,0,0,.2)}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-control-zoom{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-control-zoom{border:4px solid rgba(0,0,0,.3)}.leaflet-popup{position:absolute;text-align:center}.leaflet-popup-content-wrapper{padding:1px;text-align:left;-webkit-border-radius:12px;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{margin:0 auto;width:40px;height:20px;position:relative;overflow:hidden}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;box-shadow:0 3px 14px rgba(0,0,0,.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;text-align:center;width:18px;height:14px;font:16px/14px Tahoma,Verdana,sans-serif;color:#c3c3c3;text-decoration:none;font-weight:700;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-editing-icon{-webkit-border-radius:2px;border-radius:2px}
\ No newline at end of file
.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{display:inline}.leaflet-popup-tip{width:21px;_width:27px;margin:0 auto;_margin-top:-3px;filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678, M12=.70710678, M21=-.70710678, M22=.70710678);-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"}.leaflet-popup-tip-container{margin-top:-1px}.leaflet-popup-content-wrapper,.leaflet-popup-tip{border:1px solid #999}.leaflet-popup-content-wrapper{zoom:1}.leaflet-control-zoom,.leaflet-control-layers{border:3px solid #999}.leaflet-control-layers-toggle{}.leaflet-control-attribution,.leaflet-control-layers,.leaflet-control-scale-line{background:#fff}.leaflet-zoom-box{filter:alpha(opacity=50)}.leaflet-control-attribution{border-top:1px solid #bbb;border-left:1px solid #bbb}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:-webkit-transform .2s ease-out,opacity .2s ease-in;-moz-transition:-moz-transform .2s ease-out,opacity .2s ease-in;-o-transition:-o-transform .2s ease-out,opacity .2s ease-in;transition:transform .2s ease-out,opacity .2s ease-in}.marker-cluster-small{background-color:rgba(181,226,140,.6)}.marker-cluster-small div{background-color:rgba(110,204,57,.6)}.marker-cluster-medium{background-color:rgba(241,211,87,.6)}.marker-cluster-medium div{background-color:rgba(240,194,12,.6)}.marker-cluster-large{background-color:rgba(253,156,115,.6)}.marker-cluster-large div{background-color:rgba(241,128,23,.6)}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px "Helvetica Neue",Arial,Helvetica,sans-serif}.marker-cluster span{line-height:30px}.leaflet-label{background:#1f1f1f;background-clip:padding-box;border-radius:4px;border-style:solid;border-width:0;display:block;font-weight:200;font-size:11pt;padding:5px;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:99999!important}.leaflet-label:before{border-right:6px solid #000;border-right-color:inherit;border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";position:absolute;top:5px;left:-10px;display:none}
\ No newline at end of file
<div ng-controller="bettermap" ng-init="init()"><span ng-show="panel.spyable" style="position:absolute;right:0px;top:0px" class="panelextra pointer"><i bs-modal="'app/partials/inspector.html'" class="icon-eye-open"></i></span> <div style="padding-right:10px;padding-top:10px;height:{{panel.height|| row.height}};overflow:hidden"><div bettermap="" id="bettermap" params="{{panel}}" style="height:100%"></div></div></div>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
<div><div class="row-fluid"><h4>Add Panel to Column</h4><select class="input-medium" ng-model="new_panel.type" ng-options="f for f in _.without(config.panel_names,'column')| stringSort" ng-change="reset_panel(new_panel.type);send_render();"></select><small>Select Type</small><div ng-show="!(_.isUndefined(new_panel.type))"><div column-edit="" panel="new_panel" config="config" row="row" dashboards="dashboards" type="new_panel.type"></div><button ng-click="add_panel(new_panel); reset_panel();" class="btn btn-primary">Create Panel</button><br></div></div><div class="row-fluid"><div class="span12"><h4>Panels</h4><table class="table table-condensed table-striped"><thead><th>Title</th><th>Type</th><th>Height</th><th>Delete</th><th>Move</th><th></th><th>Hide</th></thead><tr ng-repeat="app in panel.panels"><td>{{app.title}}</td><td>{{app.type}}</td><td><input type="text" class="input-small" ng-model="app.height"></td><td><i ng-click="panel.panels = _.without(panel.panels,app)" class="pointer icon-remove"></i></td><td><i ng-click="_.move(panel.panels,$index,$index-1)" ng-hide="$first" class="pointer icon-arrow-up"></i></td><td><i ng-click="_.move(panel.panels,$index,$index+1)" ng-hide="$last" class="pointer icon-arrow-down"></i></td><td><input type="checkbox" ng-model="app.hide" ng-checked="app.hide"></td></tr></table></div></div></div>
\ No newline at end of file
<div ng-controller="column" ng-init="init();"><div ng-repeat="(name, panel) in panel.panels" ng-hide="panel.height == '0px' || panel.hide" class="row-fluid panel" style="min-height:{{panel.height}}; position:relative"><div class="row-fluid"><div class="span12 alert alert-error panel-error" ng-hide="!panel.error"><a class="close" ng-click="panel.error=false">&times;</a> <i class="icon-exclamation-sign"></i> <strong>Oops!</strong> {{panel.error}}</div></div><div class="row-fluid"><kibana-panel type="panel.type"></kibana-panel></div></div></div>
\ No newline at end of file
define("panels/column/module",["angular","app","underscore","config"],function(e,t,n,r){var i=e.module("kibana.panels.column",[]);t.useModule(i),i.controller("column",["$scope","$rootScope","$timeout",function(e,t,r){e.panelMeta={status:"Stable",description:"A pseudo panel that lets you add other panels to be arranged in a column withdefined heights."};var i={panels:[]};n.defaults(e.panel,i),e.init=function(){e.reset_panel()},e.toggle_row=function(t){t.collapse=t.collapse?!1:!0,t.collapse||r(function(){e.send_render()})},e.send_render=function(){e.$broadcast("render")},e.add_panel=function(t){e.panel.panels.push(t)},e.reset_panel=function(t){e.new_panel={loading:!1,error:!1,sizeable:!1,span:12,height:"150px",editable:!0,type:t}}}]),i.directive("columnEdit",["$compile","$timeout",function(t,r){return{scope:{new_panel:"=panel",row:"=",config:"=",dashboards:"=",type:"=type"},link:function(i,s){i.$on("render",function(){r(function(){i.panel=i.new_panel;var r="<div ng-include src=\"partial('panelgeneral')\"></div>"
;!n.isUndefined(i.type)&&i.type!==""&&(r=r+"<div ng-include src=\"'app/panels/"+i.type+"/editor.html'\"></div>"),s.html(t(e.element(r))(i))})})}}}]),i.filter("withoutColumn",function(){return function(){return n.without(r.panel_names,"column")}})});
\ No newline at end of file
<div class="row-fluid"><div class="span4"><label class="small">Title</label><input type="text" class="input-medium" ng-model="panel.title"></div><div class="span2"><label class="small">Height</label><input type="text" class="input-mini" ng-model="panel.height"></div><div class="span1"><label class="small">Editable</label><input type="checkbox" ng-model="panel.editable" ng-checked="panel.editable"></div></div>
\ No newline at end of file
<div><h5>Allow saving to</h5><div class="row-fluid"><div class="span2"><label class="small">Export</label><input type="checkbox" ng-model="panel.save.local" ng-checked="panel.save.local"></div><div class="span2"><label class="small">Defaults</label><input type="checkbox" ng-model="panel.save.default" ng-checked="panel.save.default"></div><div class="span2"><label class="small">Gist<tip>Requires your domain to be OAUTH registered with Github<tip></tip></tip></label><input type="checkbox" ng-model="panel.save.gist" ng-checked="panel.save.gist"></div><div class="span2"><label class="small">Elasticsearch</label><input type="checkbox" ng-model="panel.save.elasticsearch" ng-checked="panel.save.elasticsearch"></div></div><h5>Allow loading from</h5><div class="row-fluid"><div class="span2"><label class="small">Local file</label><input type="checkbox" ng-model="panel.load.local" ng-checked="panel.load.local"></div><div class="span2"><label class="small">Gist</label><input type="checkbox" ng-model="panel.load.gist" ng-checked="panel.load.gist"></div><div class="span2"><label class="small">Elasticsearch</label><input type="checkbox" ng-model="panel.load.elasticsearch" ng-checked="panel.load.elasticsearch"></div><div class="span3" ng-show="panel.load.elasticsearch"><label class="small">ES list size</label><input class="input-mini" type="number" ng-model="panel.elasticsearch_size"></div></div><h5>Sharing</h5><div class="row-fluid"><div class="span2"><label class="small">Allow Sharing</label><input type="checkbox" ng-model="panel.temp" ng-checked="panel.temp"></div><div class="span2" ng-show="panel.temp"><label class="small">TTL</label><input type="checkbox" ng-model="panel.ttl_enable" ng-checked="panel.temp"></div><div class="span5" ng-show="panel.temp && panel.ttl_enable"><label class="small">TTL Duration <i class="icon-question-sign" bs-tooltip="'Elasticsearch date math, eg: 1m,1d,1w,30d'"></i></label><input class="input-small" type="text" ng-model="panel.temp_ttl"></div></div></div>
\ No newline at end of file
<div><a class="close" ng-click="dismiss()" href="">×</a><h4>Load</h4><div ng-show="panel.load.local"><h5>Local File</h5><form><input type="file" id="dashupload" dash-upload=""><br></form></div><div ng-show="panel.load.gist"><h5>Gist <small>Enter a gist number or url</small></h5><form><input type="text" ng-model="gist.url"><br><button class="btn" ng-click="gist_dblist(dashboard.gist_id(gist.url))" ng-show="dashboard.is_gist(gist.url)"><i class="icon-github-alt"></i> Get gist:{{gist.url | gistid}}</button><h6 ng-show="gist.files.length">Dashboards in gist:{{gist.url | gistid}} <small>click to load</small></h6><h6 ng-hide="gist.files.length">No gist dashboards found</h6><table class="table table-condensed table-striped"><tr ng-repeat="file in gist.files"><td><a ng-click="dashboard.dash_load(file)">{{file.title}}</a></td></tr></table></form></div><div ng-show="panel.load.elasticsearch"><h5>Elasticsearch</h5><form class="input-append"><input type="text" ng-model="elasticsearch.query"><button ng-click="elasticsearch_dblist(elasticsearch.query)" class="btn"><i class="icon-search"></i></button></form><h6 ng-show="elasticsearch.dashboards.length">Elasticsearch stored dashboards</h6><h6 ng-hide="elasticsearch.dashboards.length">No dashboards matching your query found</h6><table class="table table-condensed table-striped"><tr ng-repeat="row in elasticsearch.dashboards | orderBy:['_id']"><td><a ng-click="elasticsearch_delete(row._id)"><i class="icon-remove"></i></a></td><td><a href="#/dashboard/elasticsearch/{{row._id}}">{{row._id}}</a></td><td><a><i class="icon-share" ng-click="share = dashboard.share_link(row._id,'elasticsearch',row._id)" bs-modal="'app/panels/dashcontrol/share.html'"></i></a></td></tr></table></div></div>
\ No newline at end of file
<div ng-controller="dashcontrol" ng-init="init()"><label class="small">Dash Control<tip icon="warning-sign">This panel is deprecated! Please remove it from your dashboard</tip></label><button class="btn" ng-show="panel.load.gist || panel.load.elasticsearch || panel.load.local" data-placement="bottom" data-unique="1" ng-click="elasticsearch_dblist(elasticsearch.query)" bs-popover="'app/panels/dashcontrol/load.html'"><i class="icon-folder-open"></i> <i class="icon-caret-down"></i></button> <button class="btn" ng-show="panel.save.gist || panel.save.elasticsearch || panel.save.local || panel.save.default" data-placement="bottom" data-unique="1" bs-popover="'app/panels/dashcontrol/save.html'"><i class="icon-save"></i> <i class="icon-caret-down"></i></button> <button ng-show="panel.temp" class="btn" ng-click="elasticsearch_save('temp',panel.temp_ttl)" bs-modal="'app/panels/dashcontrol/share.html'"><i class="icon-share"></i></button></div>
\ No newline at end of file
define("panels/dashcontrol/module",["angular","app","underscore"],function(e,t,n){var r=e.module("kibana.panels.dashcontrol",[]);t.useModule(r),r.controller("dashcontrol",["$scope","$http","timer","dashboard","alertSrv",function(e,t,r,i,s){e.panelMeta={status:"Deprecated",description:"This panel has been moved to the navigation bar. See the dashboard setting editor to configure it."},e.panel=e.panel||{};var o={save:{gist:!1,elasticsearch:!0,local:!0,"default":!0},load:{gist:!0,elasticsearch:!0,local:!0},hide_control:!1,elasticsearch_size:20,temp:!0,ttl_enable:!0,temp_ttl:"30d"};n.defaults(e.panel,o),e.init=function(){e.gist_pattern=/(^\d{5,}$)|(^[a-z0-9]{10,}$)|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/,e.gist={},e.elasticsearch={}},e.set_default=function(){i.set_default()?s.set("Local Default Set",i.current.title+" has been set as your local default","success",5e3):s.set("Incompatible Browser","Sorry, your browser is too old for this feature","error",5e3)},e.purge_default=function(){i
.purge_default()?s.set("Local Default Clear","Your local default dashboard has been cleared","success",5e3):s.set("Incompatible Browser","Sorry, your browser is too old for this feature","error",5e3)},e.elasticsearch_save=function(t,r){i.elasticsearch_save(t,e.elasticsearch.title||i.current.title,e.panel.ttl_enable?r:!1).then(function(r){n.isUndefined(r._id)?s.set("Save failed","Dashboard could not be saved to Elasticsearch","error",5e3):(s.set("Dashboard Saved",'This dashboard has been saved to Elasticsearch as "'+r._id+'"',"success",5e3),t==="temp"&&(e.share=i.share_link(i.current.title,"temp",r._id)))})},e.elasticsearch_delete=function(t){i.elasticsearch_delete(t).then(function(r){if(!n.isUndefined(r))if(r.found){s.set("Dashboard Deleted",t+" has been deleted","success",5e3);var i=n.where(e.elasticsearch.dashboards,{_id:t})[0];e.elasticsearch.dashboards=n.without(e.elasticsearch.dashboards,i)}else s.set("Dashboard Not Found","Could not find "+t+" in Elasticsearch","warning",5e3);else s
.set("Dashboard Not Deleted","An error occurred deleting the dashboard","error",5e3)})},e.elasticsearch_dblist=function(t){i.elasticsearch_list(t,e.panel.elasticsearch_size).then(function(t){n.isUndefined(t.hits)||(e.panel.error=!1,e.hits=t.hits.total,e.elasticsearch.dashboards=t.hits.hits)})},e.save_gist=function(){i.save_gist(e.gist.title).then(function(t){n.isUndefined(t)?s.set("Save failed","Gist could not be saved","error",5e3):(e.gist.last=t,s.set("Gist saved",'You will be able to access your exported dashboard file at <a href="'+t+'">'+t+"</a> in a moment","success"))})},e.gist_dblist=function(t){i.gist_list(t).then(function(t){t&&t.length>0?e.gist.files=t:s.set("Gist Failed","Could not retrieve dashboard list from gist","error",5e3)})}}]),r.directive("dashUpload",["timer","dashboard","alertSrv",function(e,t,n){return{restrict:"A",link:function(e){function r(n){var r=n.target.files,i=function(){return function(n){t.dash_load(JSON.parse(n.target.result)),e.$apply()}};for(var s=0,o
;o=r[s];s++){var u=new FileReader;u.onload=i(o),u.readAsText(o)}}window.File&&window.FileReader&&window.FileList&&window.Blob?document.getElementById("dashupload").addEventListener("change",r,!1):n.set("Oops","Sorry, the HTML5 File APIs are not fully supported in this browser.","error")}}}]),r.filter("gistid",function(){var e=/(\d{5,})|([a-z0-9]{10,})|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;return function(t){if(!n.isUndefined(t)){var r=t.match(e);if(!n.isNull(r)&&!n.isUndefined(r))return r[0].replace(/.*\//,"")}}})});
\ No newline at end of file
<div><a class="close" ng-click="dismiss()" href="">×</a><h4>Save</h4><div ng-show="panel.save.default || panel.save.local"><h5>Locally</h5><form><ul class="nav nav-list"><li><a ng-show="panel.save.local" ng-click="dashboard.to_file()"><i class="icon-download"></i> Export to File</a></li><li><a ng-show="panel.save.default" ng-click="set_default()"><i class="icon-bookmark"></i> Set as My Default</a></li><li><a ng-show="panel.save.default" ng-click="purge_default()"><i class="icon-ban-circle"></i> Clear My Default</a></li></ul></form></div><div ng-show="panel.save.gist"><h5>Gist</h5><form class="input-append"><input class="input-medium" placeholder="Title" type="text" ng-model="gist.title"><button class="btn" ng-click="save_gist()"><i class="icon-github-alt"></i></button></form><br><small ng-show="gist.last">Last gist: <a target="_blank" href="{{gist.last}}">{{gist.last}}</a></small></div><div ng-show="panel.save.elasticsearch"><h5>Elasticsearch</h5><form class="input-append"><input class="input-medium" placeholder="Title" type="text" ng-model="elasticsearch.title"><button class="btn" ng-click="elasticsearch_save('dashboard')"><i class="icon-save"></i></button></form></div></div>
\ No newline at end of file
<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3>{{share.title}} <small>shareable link</small></h3></div><div class="modal-body"><label>Share this dashboard with this URL</label><input ng-model="share.link" type="text" style="width:90%" onclick="this.select()" onfocus="this.select()" ng-change="share = dashboard.share_link(share.title,share.type,share.id)"></div><div class="modal-footer"><button type="button" class="btn btn-success" ng-click="dismiss();$broadcast('render')">Close</button></div>
\ No newline at end of file
<div><div class="row-fluid"><div class="span1"><label class="small">Length</label><input type="number" style="width:80%" ng-model="panel.size" ng-change="set_refresh(true)"></div><div class="span3"><label class="small">Field</label><input type="text" bs-typeahead="fields.list" style="width:80%" ng-change="set_refresh(true)" ng-model="panel.field"></div><div class="span3"><label class="small">Query Mode</label><select style="width:80%" ng-change="set_refresh(true)" ng-model="panel.mode" ng-options="f for f in ['terms only','AND', 'OR']"></select></div><div class="span4"><label class="small">Exclude Terms(s) (comma seperated)</label><input array-join="" type="text" style="width:90%" ng-change="set_refresh(true)" ng-model="panel.exclude"></div><div class="span1"><label class="small">Rest</label><input type="checkbox" ng-model="panel.rest" ng-checked="panel.rest" ng-change="set_refresh(true)"></div></div></div>
\ No newline at end of file
<div ng-controller="derivequeries" ng-init="init()"><style>.end-derive {
position:absolute;
right:15px;
top:5px;
}
.panel-derive-field {
text-decoration: underline;
cursor: pointer;
}
.panel-derive {
padding-right: 35px !important;
height: 31px !important;
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
}</style><span ng-show="panel.spyable" style="position:absolute;right:0px;top:0px" class="panelextra pointer"><i bs-modal="'app/partials/inspector.html'" class="icon-eye-open"></i></span><label class="small">Create new queries from <span class="panel-derive-field" ng-show="!editing" ng-click="editing=true">{{panel.field}}</span><select ng-show="editing && fields.list.length>1" class="input-medium" ng-model="panel.field" ng-options="f for f in fields.list" ng-change="editing=false" ng-blur="editing=false"></select><input ng-show="editing && fields.list.length<2" type="text" ng-model="panel.field" ng-blur="editing=false">({{panel.mode}} mode)</label><div><form class="form-search" style="position:relative" ng-submit="get_data()"><input class="search-query panel-derive input-block-level" bs-typeahead="panel.history" data-min-length="0" data-items="100" type="text" ng-model="panel.query"><span class="end-derive"><i class="icon-search pointer" ng-click="get_data()"></i></span></form></div></div>
\ No newline at end of file
define("panels/derivequeries/module",["angular","app","underscore"],function(e,t,n){var r=e.module("kibana.panels.derivequeries",[]);t.useModule(r),r.controller("derivequeries",["$scope","$rootScope","querySrv","fields","dashboard","filterSrv",function(t,r,i,s,o,u){t.panelMeta={status:"Experimental",description:"Creates a new set of queries using the Elasticsearch terms facet. For example, you might want to create 5 queries showing the most frequent HTTP response codes. Be careful not to select a high cardinality field, as Elasticsearch must load all unique values into memory."};var a={loading:!1,label:"Search",query:"*",ids:[],field:"_type",fields:[],spyable:!0,rest:!1,size:5,mode:"terms only",exclude:[],history:[],remember:10};n.defaults(t.panel,a),t.init=function(){t.editing=!1,t.panel.fields=s.list},t.get_data=function(){f(t.panel.query);if(o.indices.length===0)return;t.panelMeta.loading=!0;var e=t.ejs.Request().indices(o.indices);e=e.facet(t.ejs.TermsFacet("query").field(t.panel.field
).size(t.panel.size).exclude(t.panel.exclude).facetFilter(t.ejs.QueryFilter(t.ejs.FilteredQuery(t.ejs.QueryStringQuery(t.panel.query||"*"),u.getBoolFilter(u.ids))))).size(0),t.populate_modal(e);var r=e.doSearch();r.then(function(e){t.panelMeta.loading=!1;var r;t.panel.query===""||t.panel.mode==="terms only"?r="":t.panel.mode==="AND"?r=" AND ("+t.panel.query+")":t.panel.mode==="OR"&&(r=" OR ("+t.panel.query+")");var s=[],u=e.facets.query.terms,a=[];n.each(u,function(e){var n=t.panel.field+':"'+e.term+'"'+r,o=i.findQuery(n);o?s.push(o.id):s.push(i.set({alias:e.term,query:n})),a.push("NOT ("+n+")")});if(t.panel.rest){var f=a.join(" AND "),l=i.findQuery(f);l?s.push(l.id):s.push(i.set({alias:"other",query:f}))}n.each(n.difference(t.panel.ids,s),function(e){i.remove(e)}),t.panel.ids=s,o.refresh()})},t.set_refresh=function(e){t.refresh=e},t.close_edit=function(){t.refresh&&t.get_data(),t.refresh=!1},t.populate_modal=function(n){t.inspector=e.toJson(JSON.parse(n.toString()),!0)};var f=function(
e){e=n.isArray(e)?e:[e];if(t.panel.remember>0){t.panel.history=n.union(e.reverse(),t.panel.history);var r=t.panel.history.length;r>t.panel.remember&&(t.panel.history=t.panel.history.slice(0,t.panel.remember))}}}])});
\ No newline at end of file
<div class="row-fluid"><div class="span3"><h6>Popup Position</h6><select class="input-small" ng-model="panel.micropanel_position" ng-options="f for f in ['top','right','bottom','left']" ng-change="reload_list();"></select></div><div class="span3"><h6>List Arrangement</h6><select class="input-small" ng-model="panel.arrange" ng-options="f for f in ['horizontal','vertical']"></select></div><div class="span3"><h6>Font Size</h6><select class="input-small" ng-model="panel.style['font-size']" ng-options="f for f in ['6pt','7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></div></div>
\ No newline at end of file
<a class="close" ng-click="dismiss()" href="">×</a><h4>Micro Analysis of {{micropanel.field}} <i class="pointer icon-search" ng-click="fieldExists(micropanel.field,'must');dismiss();"></i> <i class="pointer icon-ban-circle" ng-click="fieldExists(micropanel.field,'mustNot');dismiss();"></i><br><small>{{micropanel.count}} events in the table set</small></h4><table style="width:480px" class="table table-bordered table-striped table-condensed"><thead><th>{{micropanel.field}}</th><th>Action</th><th>In set</th></thead><tbody><tr ng-repeat="field in micropanel.values"><td>{{{true: "__blank__",false:field[0]}[field[0] == ""]}}</td><td><i class="pointer icon-search" ng-click="build_search(micropanel.field,field[0],'must');dismiss();"></i> <i class="pointer icon-ban-circle" ng-click="build_search(micropanel.field,field[0],'mustNot');dismiss();"></i></td><td>{{field[1]}}</td></tr></tbody></table><span ng-repeat="(field,count) in micropanel.related"><a ng-click="toggle_field(field)">{{field}}</a> ({{Math.round((count / micropanel.count) * 100)}}%),</span>
\ No newline at end of file
<div ng-controller="fields" ng-init="init()"><h4>The 'fields' panel is deprecated.</h4>The table panel now integrates a field selector.</div>
\ No newline at end of file
define("panels/fields/module",["angular","app","underscore"],function(e,t,n){var r=e.module("kibana.panels.fields",[]);t.useModule(r),r.controller("fields",["$scope",function(e){e.panelMeta={status:"Deprecated",description:"You should not use this table, it does not work anymore. The table panel nowintegrates a field selector. This module will soon be removed."};var t={style:{},arrange:"vertical",micropanel_position:"right"};n.defaults(e.panel,t),e.init=function(){}}])});
\ No newline at end of file
<div><div class="row-fluid"><div class="span12">No options here</div></div></div>
\ No newline at end of file
<div><style>.input-query-alias {
margin-bottom: 5px !important;
}</style><a class="close" ng-click="render();dismiss();" href="">×</a><h6>Query Alias</h6><form><input class="input-medium input-query-alias" type="text" ng-model="queries.list[id].alias" placeholder="Alias..."><div><i ng-repeat="color in queries.colors" class="pointer" ng-class="{'icon-circle-blank':queries.list[id].color == color,'icon-circle':queries.list[id].color != color}" style="color:{{color}}" ng-click="queries.list[id].color = color;render();"></i></div></form></div>
\ No newline at end of file
<div ng-controller="filtering" ng-init="init()"><style>.filtering-container {
margin-top: 3px;
}
.filter-panel-filter {
display:inline-block;
vertical-align: top;
margin-left: 10px;
width: 220px;
padding: 5px 5px 0px 5px;
border: #555 1px solid;
margin: 0px 5px 5px 0px;
}
.filter-panel-filter ul {
margin-bottom: 3px;
}
.filter-must {
border-bottom: #7EB26D 3px solid;
}
.filter-mustNot {
border-bottom: #E24D42 3px solid;
}
.filter-deselected {
opacity: 0.5;
}
.filter-either {
border-bottom: #EF843C 3px solid;
}
.filter-action {
float:right;
margin-bottom: 0px !important;
margin-left: 3px;
}
.filter-mandate {
text-decoration: underline;
cursor: pointer;
}
.filter-apply {
float:right;
margin-bottom: 5px;
}</style><div class="filtering-container"><span ng-show="filterSrv.ids.length == 0"><h5>No filters available</h5></span><div ng-repeat="id in filterSrv.ids" class="small filter-panel-filter" ng-class="{'filter-deselected': !filterSrv.list[id].active}"><div class="filter-{{filterSrv.list[id].mandate}}"><strong>{{filterSrv.list[id].type}}</strong> <span ng-show="!filterSrv.list[id].editing" class="filter-mandate" ng-click="filterSrv.list[id].editing = true">{{filterSrv.list[id].mandate}}</span> <span ng-show="filterSrv.list[id].editing"><select class="input-small" ng-model="filterSrv.list[id].mandate" ng-options="f for f in ['must','mustNot','either']"></select></span> <i class="filter-action pointer icon-remove" bs-tooltip="'Remove'" ng-click="remove(id)"></i> <i class="filter-action pointer" ng-class="{'icon-check': filterSrv.list[id].active,'icon-check-empty': !filterSrv.list[id].active}" bs-tooltip="'Toggle'" ng-click="toggle(id)"></i> <i class="filter-action pointer icon-edit" ng-hide="filterSrv.list[id].editing" bs-tooltip="'Edit'" ng-click="filterSrv.list[id].editing = true"></i></div><div ng-hide="filterSrv.list[id].editing && isEditable(filterSrv.list[id])"><ul class="unstyled"><li ng-repeat="(key,value) in filterSrv.list[id]" ng-show="show_key(key)"><strong>{{key}}</strong> : {{value}}</li></ul></div><div ng-show="filterSrv.list[id].editing && isEditable(filterSrv.list[id])"><ul class="unstyled"><li ng-repeat="key in _.keys(filterSrv.list[id])" ng-show="show_key(key)"><strong>{{key}}</strong> :<input type="text" ng-model="filterSrv.list[id][key]"></li></ul></div><div class="filter-apply" ng-show="filterSrv.list[id].editing"><button ng-click="filterSrv.list[id].editing=undefined" class="btn btn-mini" bs-tooltip="'Save without refresh'">Save</button> <button ng-click="filterSrv.list[id].editing=undefined;refresh()" class="btn btn-success btn-mini" bs-tooltip="'Save and refresh'">Apply</button></div></div></div></div>
\ No newline at end of file
define("panels/filtering/module",["angular","app","underscore"],function(e,t,n){var r=e.module("kibana.panels.filtering",[]);t.useModule(r),r.controller("filtering",["$scope","filterSrv","$rootScope","dashboard",function(e,t,r,i){e.panelMeta={status:"Beta",description:"A controllable list of all filters currently applied to the dashboard. You almost certainly want one of these on your dashboard somewhere."};var s={};n.defaults(e.panel,s),e.init=function(){e.filterSrv=t},e.remove=function(e){t.remove(e),i.refresh()},e.toggle=function(e){t.list[e].active=!t.list[e].active,i.refresh()},e.refresh=function(){r.$broadcast("refresh")},e.render=function(){r.$broadcast("render")},e.show_key=function(e){return!n.contains(["type","id","alias","mandate","active","editing"],e)},e.isEditable=function(e){var t=["time"];return n.contains(t,e.type)?!1:!0}}])});
\ No newline at end of file
<div class="row-fluid"><div class="span2"><label class="small">Mode</label><select ng-change="set_refresh(true)" class="input-small" ng-model="panel.mode" ng-options="f for f in ['count','min','mean','max','total']"></select></div><div class="span2"><label class="small">Time Field</label><input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-small" ng-model="panel.time_field"></div><div class="span2" ng-show="panel.mode != 'count'"><label class="small">Value Field</label><input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-small" ng-model="panel.value_field"></div><div class="span3" ng-show="panel.mode != 'count'"><label class="small">Note</label><small>In <strong>{{panel.mode}}</strong> mode the configured field <strong>must</strong> be a numeric type</small></div></div><h5>Chart Settings</h5><div class="row-fluid" style="margin-bottom:10px"><div class="span1"><label class="small">Bars</label><input type="checkbox" ng-model="panel.bars" ng-checked="panel.bars"></div><div class="span1"><label class="small">Lines</label><input type="checkbox" ng-model="panel.lines" ng-checked="panel.lines"></div><div class="span1"><label class="small">Points</label><input type="checkbox" ng-model="panel.points" ng-checked="panel.points"></div><div class="span1"><label class="small">Stack</label><input type="checkbox" ng-model="panel.stack" ng-checked="panel.stack"></div><div class="span1"><label class="small">Legend</label><input type="checkbox" ng-model="panel.legend" ng-checked="panel.legend"></div><div class="span1"><label class="small">xAxis</label><input type="checkbox" ng-model="panel['x-axis']" ng-checked="panel['x-axis']"></div><div class="span1"><label class="small">yAxis</label><input type="checkbox" ng-model="panel['y-axis']" ng-checked="panel['y-axis']"></div><div class="span2" ng-show="panel.lines"><label class="small">Line Fill</label><select class="input-mini" ng-model="panel.fill" ng-options="f for f in [0,1,2,3,4,5,6,7,8,9,10]"></select></div><div class="span2" ng-show="panel.lines"><label class="small">Line Width</label><select class="input-mini" ng-model="panel.linewidth" ng-options="f for f in [0,1,2,3,4,5,6,7,8,9,10]"></select></div></div><div class="row-fluid"><div class="span2"><label class="small">Time correction</label><select ng-model="panel.timezone" class="input-small" ng-options="f for f in ['browser','utc']"></select></div><div class="span1"><label class="small">Selectable</label><input type="checkbox" ng-model="panel.interactive" ng-checked="panel.interactive"></div><div class="span2"><label class="small">Zoom Links</label><input type="checkbox" ng-model="panel.zoomlinks" ng-checked="panel.zoomlinks"></div><div class="span2"><label class="small">Auto-interval</label><input type="checkbox" ng-model="panel.auto_int" ng-checked="panel.auto_int"></div><div class="span2" ng-show="panel.auto_int"><label class="small">Resolution</label><input type="number" class="input-mini" ng-model="panel.resolution" ng-change="set_refresh(true)"></div><div class="span3" ng-show="panel.auto_int"><label class="small">Shoot for this many data points, rounding to sane intervals</label></div><div class="span2" ng-hide="panel.auto_int"><label class="small">Interval</label><input type="text" class="input-mini" ng-model="panel.interval" ng-change="set_refresh(true)"></div><div class="span3" ng-hide="panel.auto_int"><label class="small">Use Elasticsearch date math format (eg 1m, 5m, 1d, 2w, 1y)</label></div></div><h5>Tooltip Settings</h5><div class="row-fluid" style="margin-bottom:10px"><div class="span3"><label class="small">Stacked Values<tip>How should the values in stacked charts to be calculated?</tip></label><select class="input-medium" ng-model="panel.tooltip.value_type" ng-options="f for f in ['cumulative','individual']"></select></div><div class="span3"><label class="small">Display Query<tip>If an alias is set, it will be shown in the tooltip. If not, should it show the query?</tip></label><input type="checkbox" ng-model="panel.tooltip.query_as_alias"></div></div>
\ No newline at end of file
<div ng-controller="histogram" ng-init="init()" style="height:{{panel.height || row.height}}"><style>.histogram-legend {
display:inline-block;
padding-right:5px
}
.histogram-legend-dot {
display:inline-block;
height:10px;
width:10px;
border-radius:5px;
}
.histogram-legend-item {
display:inline-block;
}
.histogram-chart {
position:relative;
}</style><span ng-show="panel.spyable" class="spy panelextra pointer"><i bs-modal="'app/partials/inspector.html'" class="icon-eye-open"></i></span><div><span ng-show="panel.zoomlinks && data"><a class="small" ng-click="zoom(2)"><i class="icon-zoom-out"></i> Zoom Out</a> |</span> <span ng-show="panel.legend" ng-repeat="series in data" class="histogram-legend"><i class="icon-circle" ng-style="{color: series.info.color}"></i> <span class="small histogram-legend-item">{{series.info.alias}} ({{series.hits}})</span></span> <span ng-show="panel.legend" class="small"><span ng-show="panel.value_field && panel.mode != 'count'">{{panel.value_field}}</span> {{panel.mode}} per <strong>{{panel.interval}}</strong> | (<strong>{{hits}}</strong> hits)</span></div><center><img ng-show="panel.loading && _.isUndefined(data)" src="img/load_big.gif"></center><div histogram-chart="" class="pointer histogram-chart" params="{{panel}}"></div></div>
\ No newline at end of file
<div><div class="row-fluid"><div class="span3"><label class="small">Style</label><select class="input-small" ng-model="panel.chart" ng-options="f for f in ['bar','pie','list','total']"></select></div><div class="span2" ng-show="panel.chart == 'total' || panel.chart == 'list'"><label class="small">Font Size</label><select class="input-mini" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></div><div class="span3" ng-show="panel.chart == 'bar' || panel.chart == 'pie'"><label class="small">Legend</label><select class="input-small" ng-model="panel.counter_pos" ng-options="f for f in ['above','below','none']"></select></div><div class="span3" ng-show="panel.chart != 'total' && panel.counter_pos != 'none'"><label class="small">List Format</label><select class="input-small" ng-model="panel.arrangement" ng-options="f for f in ['horizontal','vertical']"></select></div><div class="span1" ng-show="panel.chart == 'pie'"><label class="small">Donut</label><input type="checkbox" ng-model="panel.donut" ng-checked="panel.donut"></div><div class="span1" ng-show="panel.chart == 'pie'"><label class="small">Tilt</label><input type="checkbox" ng-model="panel.tilt" ng-checked="panel.tilt"></div><div class="span1" ng-show="panel.chart == 'pie'"><label class="small">Labels</label><input type="checkbox" ng-model="panel.labels" ng-checked="panel.labels"></div></div></div>
\ No newline at end of file
<div ng-controller="hits" ng-init="init()"><span ng-show="panel.spyable" class="spy panelextra pointer"><i bs-modal="'app/partials/inspector.html'" class="icon-eye-open"></i></span><div ng-show="panel.counter_pos == 'above' && (panel.chart == 'bar' || panel.chart == 'pie')" id="{{$id}}-legend"><table class="small" ng-show="panel.arrangement == 'vertical'"><tr ng-repeat="query in data"><td><div style="display:inline-block;border-radius:5px;background:{{query.info.color}};height:10px;width:10px"></div></td><td style="padding-right:10px;padding-left:10px">{{query.info.alias}}</td><td>{{query.data[0][1]}}</td></tr></table><div class="small" ng-show="panel.arrangement == 'horizontal'" ng-repeat="query in data" style="float:left;padding-left: 10px"><span><i class="icon-circle" ng-style="{color:query.info.color}"></i> {{query.info.alias}} ({{query.data[0][1]}})</span></div><br></div><div style="clear:both"></div><div ng-show="panel.chart == 'pie' || panel.chart == 'bar'" hits-chart="" params="{{panel}}" style="position:relative"></div><div ng-show="panel.counter_pos == 'below' && (panel.chart == 'bar' || panel.chart == 'pie')" id="{{$id}}-legend"><table class="small" ng-show="panel.arrangement == 'vertical'"><tr ng-repeat="query in data"><td><i class="icon-circle" ng-style="{color:query.info.color}"></i></td><td style="padding-right:10px;padding-left:10px">{{query.info.alias}}</td><td>{{query.data[0][1]}}</td></tr></table><div class="small" ng-show="panel.arrangement == 'horizontal'" ng-repeat="query in data" style="float:left;padding-left: 10px"><span><i class="icon-circle" ng-style="{color:query.info.color}"></i></span> {{query.info.alias}} ({{query.data[0][1]}})</div><br></div><div ng-show="panel.chart == 'total'"><div ng-style="panel.style" style="line-height:{{panel.style['font-size']}}">{{hits}}</div></div><span ng-show="panel.chart == 'list'"><div ng-style="panel.style" style="display:inline-block;line-height:{{panel.style['font-size']}}" ng-repeat="query in data"><i class="icon-circle" style="color:{{query.info.color}}"></i> {{query.info.alias}} ({{query.hits}})</div></span><br ng-show="panel.arrangement == 'vertical' && panel.chart == 'list'"></div>
\ No newline at end of file
define("panels/hits/module",["angular","app","underscore","jquery","kbn","jquery.flot","jquery.flot.pie"],function(e,t,n,r,i){var s=e.module("kibana.panels.hits",[]);t.useModule(s),s.controller("hits",["$scope","querySrv","dashboard","filterSrv",function(t,r,i,s){t.panelMeta={editorTabs:[{title:"Queries",src:"app/partials/querySelect.html"}],status:"Stable",description:"The total hits for a query or set of queries. Can be a pie chart, bar chart, list, or absolute total of all queries combined"};var o={queries:{mode:"all",ids:[]},style:{"font-size":"10pt"},arrangement:"horizontal",chart:"bar",counter_pos:"above",donut:!1,tilt:!1,labels:!0,spyable:!0};n.defaults(t.panel,o),t.init=function(){t.hits=0,t.$on("refresh",function(){t.get_data()}),t.get_data()},t.get_data=function(o,u){delete t.panel.error,t.panelMeta.loading=!0;if(i.indices.length===0)return;var a=n.isUndefined(o)?0:o,f=t.ejs.Request().indices(i.indices[a]);t.panel.queries.ids=r.idsByMode(t.panel.queries),n.each(t.panel.queries
.ids,function(e){var n=t.ejs.FilteredQuery(r.getEjsObj(e),s.getBoolFilter(s.ids));f=f.facet(t.ejs.QueryFacet(e).query(n)).size(0)}),t.inspector=e.toJson(JSON.parse(f.toString()),!0);var l=f.doSearch();l.then(function(e){t.panelMeta.loading=!1,a===0&&(t.hits=0,t.data=[],u=t.query_id=(new Date).getTime());if(!n.isUndefined(e.error)){t.panel.error=t.parse_error(e.error);return}var s=n.map(n.keys(e.facets),function(e){return parseInt(e,10)});if(t.query_id===u&&n.intersection(s,t.panel.queries.ids).length===t.panel.queries.ids.length){var o=0;n.each(t.panel.queries.ids,function(i){var s=e.facets[i],u=n.isUndefined(t.data[o])||a===0?s.count:t.data[o].hits+s.count;t.hits+=s.count,t.data[o]={info:r.list[i],id:i,hits:u,data:[[o,u]]},o++}),t.$emit("render"),a<i.indices.length-1&&t.get_data(a+1,u)}})},t.set_refresh=function(e){t.refresh=e},t.close_edit=function(){t.refresh&&t.get_data(),t.refresh=!1,t.$emit("render")}}]),s.directive("hitsChart",["querySrv",function(t){return{restrict:"A",link:function(
s,o){function u(){o.css({height:s.panel.height||s.row.height});try{n.each(s.data,function(e){e.label=e.info.alias,e.color=e.info.color})}catch(e){return}try{s.panel.chart==="bar"&&(s.plot=r.plot(o,s.data,{legend:{show:!1},series:{lines:{show:!1},bars:{show:!0,fill:1,barWidth:.8,horizontal:!1},shadowSize:1},yaxis:{show:!0,min:0,color:"#c8c8c8"},xaxis:{show:!1},grid:{borderWidth:0,borderColor:"#eee",color:"#eee",hoverable:!0},colors:t.colors})),s.panel.chart==="pie"&&(s.plot=r.plot(o,s.data,{legend:{show:!1},series:{pie:{innerRadius:s.panel.donut?.4:0,tilt:s.panel.tilt?.45:1,radius:1,show:!0,combine:{color:"#999",label:"The Rest"},stroke:{width:0},label:{show:s.panel.labels,radius:2/3,formatter:function(e,t){return"<div ng-click=\"build_search(panel.query.field,'"+e+"')"+' "style="font-size:8pt;text-align:center;padding:2px;color:white;">'+e+"<br/>"+Math.round(t.percent)+"%</div>"},threshold:.1}}},grid:{hoverable:!0,clickable:!0},colors:t.colors}))}catch(e){o.text(e)}}s.$on("render",function(
){u()}),e.element(window).bind("resize",function(){u()});var a=r("<div>");o.bind("plothover",function(e,t,n){if(n){var r=s.panel.chart==="bar"?n.datapoint[1]:n.datapoint[1][0][1];a.html(i.query_color_dot(n.series.color,20)+" "+r.toFixed(0)).place_tt(t.pageX,t.pageY)}else a.remove()})}}}])});
\ No newline at end of file
<div class="row-fluid"><div class="span3"><form><h6>Field<tip>2 letter country or state code</tip></h6><h6>Field</h6><input bs-typeahead="fields.list" type="text" class="input-small" ng-model="panel.field"></form></div><div class="span1"><h6>Map</h6><select ng-change="$emit('render')" class="input-small" ng-model="panel.map" ng-options="f for f in ['world','europe','usa']"></select></div></div>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<div ng-controller="map" ng-init="init()"><style>.jvectormap-label {
position: absolute;
display: none;
visibility: hidden;
border: solid 1px #CDCDCD;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
background: #292929;
color: white;
font-family: sans-serif, Verdana;
font-size: smaller;
padding: 3px;
}
.jvectormap-zoomin, .jvectormap-zoomout {
position: absolute;
left: 10px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
background: #292929;
padding: 3px;
color: white;
width: 10px;
height: 10px;
cursor: pointer;
line-height: 10px;
text-align: center;
}
.jvectormap {
position: relative;
}
.jvectormap-zoomin {
display: none;
top: 10px;
}
.jvectormap-zoomout {
display: none;
top: 30px;
}
.map-legend {
color : #c8c8c8;
padding : 10px;
font-size: 11pt;
font-weight: 200;
background-color: #1f1f1f;
border-radius: 5px;
position: absolute;
right: 0px;
top: 15px;
display: none;
z-index: 99;
}</style><span ng-show="panel.spyable" class="spy panelextra pointer"><i bs-modal="'app/partials/modal.html'" class="icon-eye-open"></i></span><div class="jvectormap" map="" params="{{panel}}" style="height:{{panel.height || row.height}}"></div></div>
\ No newline at end of file
<div class="row-fluid" ng-switch="panel.mode"><div class="row-fluid"><div class="span2"><label class="small">Mode</label><select class="input-small" ng-change="set_mode(panel.mode);set_refresh(true)" ng-model="panel.mode" ng-options="f for f in ['terms','goal']"></select></div></div><div ng-switch-when="terms"><div class="row-fluid"><div class="span2"><label class="small">Field</label><input type="text" class="input-small" bs-typeahead="fields.list" ng-model="panel.query.field" ng-change="set_refresh(true)"></div><div class="span2"><label class="small">Length</label><input class="input-small" type="number" ng-model="panel.size" ng-change="set_refresh(true)"></div><div class="span6"><label class="small">Exclude Terms(s) (comma seperated)</label><input array-join="" type="text" ng-model="panel.exclude"></div></div></div><div ng-switch-when="goal"><div class="row-fluid"><div class="span2"><form style="margin-bottom: 0px"><label class="small">Goal</label><input type="number" style="width:90%" ng-model="panel.query.goal" ng-change="set_refresh(true)"></form></div></div></div></div><div class="row-fluid"><div class="span1"><label class="small">Donut</label><input type="checkbox" ng-model="panel.donut" ng-checked="panel.donut"></div><div class="span1"><label class="small">Tilt</label><input type="checkbox" ng-model="panel.tilt" ng-checked="panel.tilt"></div><div class="span1"><label class="small">Labels</label><input type="checkbox" ng-model="panel.labels" ng-checked="panel.labels"></div><div class="span3"><label class="small">Legend</label><select class="input-small" ng-model="panel.legend" ng-options="f for f in ['above','below','none']"></select></div></div>
\ No newline at end of file
<div ng-controller="pie" ng-init="init()"><span ng-show="panel.spyable" style="position:absolute;right:0px;top:0px" class="panelextra pointer"><i bs-modal="'app/partials/modal.html'" class="icon-eye-open"></i></span><div ng-show="panel.legend == 'above'" ng-repeat="query in legend" style="float:left;padding-left: 10px"><span ng-show="panel.chart != \"none\""><i class="icon-circle" ng-style="{color:query.color}"></i></span><span class="small">{{query.label}} ({{query.data[0][1]}})</span></div><br><div style="clear:both"></div><div pie="" class="pointer" params="{{panel}}" style="position:relative"></div><div ng-show="panel.legend == 'below'" ng-repeat="query in legend" style="float:left;padding-left: 10px"><span ng-show="panel.chart != \"none\""><i class="icon-circle" ng-style="{color:query.color}"></i></span><span class="small">{{query.label}} ({{query.data[0][1]}})</span></div></div>
\ No newline at end of file
define("panels/pie/module",["angular","app","underscore","jquery","kbn","config"],function(e,t,n,r,i,s){var o=e.module("kibana.panels.pie",[]);t.useModule(o),o.controller("pie",["$scope","$rootScope","querySrv","dashboard","filterSrv",function(t,r,i,o,u){t.panelMeta={status:"Deprecated",description:"Uses an Elasticsearch terms facet to create a pie chart. You should really only point this at not_analyzed fields for that reason. This panel is going away soon, it has <strong>been replaced by the terms panel</strong>. Please use that one instead."};var a={editorTabs:[{title:"Queries",src:"app/partials/querySelect.html"}],query:{field:"_type",goal:100},queries:{mode:"all",ids:[]},size:10,exclude:[],donut:!1,tilt:!1,legend:"above",labels:!0,mode:"terms",default_field:"DEFAULT",spyable:!0};n.defaults(t.panel,a),t.init=function(){t.$on("refresh",function(){t.get_data()}),t.get_data()},t.set_mode=function(e){switch(e){case"terms":t.panel.query={field:"_all"};break;case"goal":t.panel.query={goal
:100}}},t.set_refresh=function(e){t.refresh=e},t.close_edit=function(){t.refresh&&t.get_data(),t.refresh=!1,t.$emit("render")},t.get_data=function(){if(o.indices.length===0)return;t.panelMeta.loading=!0;var e=t.ejs.Request().indices(o.indices);t.panel.queries.ids=i.idsByMode(t.panel.queries);var r=t.ejs.BoolQuery();n.each(t.panel.queries.ids,function(e){r=r.should(i.getEjsObj(e))});var s;t.panel.mode==="terms"?(e=e.facet(t.ejs.TermsFacet("pie").field(t.panel.query.field||t.panel.default_field).size(t.panel.size).exclude(t.panel.exclude).facetFilter(t.ejs.QueryFilter(t.ejs.FilteredQuery(r,u.getBoolFilter(u.ids))))).size(0),t.populate_modal(e),s=e.doSearch(),s.then(function(e){t.panelMeta.loading=!1,t.hits=e.hits.total,t.data=[];var r=0;n.each(e.facets.pie.terms,function(e){var n={label:e.term,data:e.count};t.data.push(),t.data.push(n),r+=1}),t.$emit("render")})):(e=e.query(r).filter(u.getBoolFilter(u.ids)).size(0),t.populate_modal(e),s=e.doSearch(),s.then(function(e){t.panelMeta.loading=!1
;var n=e.hits.total,r=t.panel.query.goal-n;t.data=[{label:"Complete",data:n,color:"#BF6730"},{data:r,color:"#e2d0c4"}],t.$emit("render")}))},t.populate_modal=function(n){t.modal={title:"Inspector",body:"<h5>Last Elasticsearch Query</h5><pre>curl -XGET "+s.elasticsearch+"/"+o.indices+"/_search?pretty -d'\n"+e.toJson(JSON.parse(n.toString()),!0)+"'</pre>"}}}]),o.directive("pie",["querySrv","filterSrv","dashboard",function(t,s,o){return{restrict:"A",link:function(u,a){function f(){a.css({height:u.panel.height||u.row.height});var e;u.panel.mode==="goal"?e={show:u.panel.labels,radius:0,formatter:function(e,t){var r=parseInt(u.row.height.replace("px",""),10)/8+String("px");return n.isUndefined(e)?"":'<div style="font-size:'+r+';font-weight:bold;text-align:center;padding:2px;color:#fff;">'+Math.round(t.percent)+"%</div>"}}:e={show:u.panel.labels,radius:2/3,formatter:function(e,t){return'<div "style="font-size:8pt;text-align:center;padding:2px;color:white;">'+e+"<br/>"+Math.round(t.percent)+"%</div>"
},threshold:.1};var i={series:{pie:{innerRadius:u.panel.donut?.45:0,tilt:u.panel.tilt?.45:1,radius:1,show:!0,combine:{color:"#999",label:"The Rest"},label:e,stroke:{width:0}}},grid:{backgroundColor:null,hoverable:!0,clickable:!0},legend:{show:!1},colors:t.colors};a.is(":visible")&&require(["vendor/jquery/jquery.flot.pie.js"],function(){u.legend=r.plot(a,u.data,i).getData(),u.$$phase||u.$apply()})}a.html('<center><img src="img/load_big.gif"></center>'),u.$on("render",function(){f()}),e.element(window).bind("resize",function(){f()}),a.bind("plotclick",function(e,t,n){if(!n)return;u.panel.mode==="terms"&&(s.set({type:"terms",field:u.panel.query.field,value:n.series.label}),o.refresh())});var l=r("<div>");a.bind("plothover",function(e,t,n){n?l.html([i.query_color_dot(n.series.color,15),n.series.label||"",parseFloat(n.series.percent).toFixed(1)+"%"].join(" ")).place_tt(t.pageX,t.pageY,{offset:10}):l.remove()})}}}])});
\ No newline at end of file
<div><div class="row-fluid"><div class="span12">No options here</div></div></div>
\ No newline at end of file
<div class="panel-query-meta row-fluid" style="width:170px"><style>.input-query-alias {
margin-bottom: 5px !important;
}
.panel-query-meta .pin {
text-decoration: underline;
}</style><a class="close" ng-click="render();dismiss();" href="">×</a> <i ng-click="toggle_pin(id);dismiss();" class="small pointer icon-pushpin"></i><label class="strong small">Query Alias</label><form><input class="input-medium input-query-alias" type="text" ng-model="querySrv.list[id].alias" placeholder="Alias..."><div><i ng-repeat="color in querySrv.colors" class="pointer" ng-class="{'icon-circle-blank':querySrv.list[id].color == color,'icon-circle':querySrv.list[id].color != color}" ng-style="{color:color}" ng-click="querySrv.list[id].color = color;render();"></i></div></form></div>
\ No newline at end of file
<div ng-controller="query" ng-init="init()" class="query-panel"><label class="small">{{panel.label}}</label><div ng-repeat="id in (unPinnedQueries = (querySrv.ids|pinnedQuery:false))" ng-class="{'short-query': unPinnedQueries.length>1}"><form class="form-search" style="position:relative;margin-bottom:5px" ng-submit="refresh()"><span class="begin-query"><i class="icon-circle pointer" data-unique="1" bs-popover="'app/panels/query/meta.html'" data-placement="right" ng-style="{color: querySrv.list[id].color}"></i> <i class="icon-remove-sign pointer remove-query" ng-show="querySrv.ids.length > 1" ng-click="querySrv.remove(id);refresh()"></i></span><input class="search-query panel-query" ng-class="{ 'input-block-level': unPinnedQueries.length==1, 'last-query': $last, 'has-remove': querySrv.ids.length > 1 }" bs-typeahead="panel.history" data-min-length="0" data-items="100" type="text" ng-model="querySrv.list[id].query"><span class="end-query"><i class="icon-search pointer" ng-click="refresh()" ng-show="$last"></i> <i class="icon-plus pointer" ng-click="querySrv.set({})" ng-show="$last"></i></span></form></div><div style="display:inline-block" ng-repeat="id in querySrv.ids|pinnedQuery:true"><span class="pointer" ng-show="$first" ng-click="panel.pinned = !panel.pinned"><small class="pins">Pinned</small> <i ng-class="{'icon-caret-right':panel.pinned,'icon-caret-left':!panel.pinned}"></i></span> <span ng-show="panel.pinned" class="pinned badge"><i class="icon-circle pointer" ng-style="{color: querySrv.list[id].color}" data-unique="1" bs-popover="'app/panels/query/meta.html'"></i><span bs-tooltip="querySrv.list[id].query">{{querySrv.list[id].alias || querySrv.list[id].query}}</span></span></div><span style="display:inline-block" ng-show="unPinnedQueries.length == 0"><i class="icon-search pointer" ng-click="refresh()"></i> <i class="icon-plus pointer" ng-click="querySrv.set({})"></i></span></div>
\ No newline at end of file
define("css",{load:function(e,t,n,r){function i(e){var t=document.getElementsByTagName("head")[0],n=document.createElement("link");n.href=e,n.rel="stylesheet",n.type="text/css",t.appendChild(n)}i(requirejs.toUrl(e)),n(!0)},pluginBuilder:"../vendor/require/css-build"}),define("css-embed",function(){function e(e){var t=document.getElementsByTagName("head")[0],n=document.createElement("style"),r=document.createTextNode(e);n.type="text/css",n.styleSheet?n.styleSheet.cssText=r.nodeValue:n.appendChild(r),t.appendChild(n)}return e}),define("css!panels/query/query.css",["css-embed"],function(e){return e(".short-query{display:inline-block;margin-right:10px}.begin-query{position:absolute;left:13px;top:5px}.end-query{position:absolute;right:15px;top:5px}.panel-query{padding-left:35px!important;height:31px!important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-search:hover .has-remove{padding-left:50px!important}.remove-query{opacity:0}.last-query{padding-right:45px!important}.form-search:hover .remove-query{opacity:1}.query-panel .pins{text-decoration:underline}.query-panel .pinned{margin-right:5px}"
),!0}),define("panels/query/module",["angular","app","underscore","css!./query.css"],function(e,t,n){var r=e.module("kibana.panels.query",[]);t.useModule(r),r.controller("query",["$scope","querySrv","$rootScope",function(e,t,r){e.panelMeta={status:"Stable",description:"Manage all of the queries on the dashboard. You almost certainly need one of these somewhere. This panel allows you to add, remove, label, pin and color queries"};var i={label:"Search",query:"*",pinned:!0,history:[],remember:10};n.defaults(e.panel,i),e.querySrv=t,e.init=function(){},e.refresh=function(){s(n.pluck(e.querySrv.list,"query")),r.$broadcast("refresh")},e.render=function(){r.$broadcast("render")},e.toggle_pin=function(e){t.list[e].pin=t.list[e].pin?!1:!0};var s=function(t){if(e.panel.remember>0){e.panel.history=n.union(t.reverse(),e.panel.history);var r=e.panel.history.length;r>e.panel.remember&&(e.panel.history=e.panel.history.slice(0,e.panel.remember))}};e.init()}])});
\ No newline at end of file
.short-query{display:inline-block;margin-right:10px}.begin-query{position:absolute;left:13px;top:5px}.end-query{position:absolute;right:15px;top:5px}.panel-query{padding-left:35px!important;height:31px!important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-search:hover .has-remove{padding-left:50px!important}.remove-query{opacity:0}.last-query{padding-right:45px!important}.form-search:hover .remove-query{opacity:1}.query-panel .pins{text-decoration:underline}.query-panel .pinned{margin-right:5px}
\ No newline at end of file
<div class="row-fluid"><div class="span4"><form class="input-append"><h6>Add Column</h6><input bs-typeahead="fields.list" type="text" class="input-small" ng-model="newfield"><button class="btn" ng-click="toggle_field(newfield);newfield=''"><i class="icon-plus"></i></button></form></div><div class="span8"><h6>Columns <small>Click to remove</small></h6><span style="margin-left:3px" ng-click="toggle_field(field)" ng-repeat="field in $parent.panel.fields" class="label pointer remove">{{field}}</span></div></div><div class="row-fluid"><div class="span4"><form class="input-append"><h6>Add field</h6><input bs-typeahead="fields.list" type="text" class="input-small" ng-model="newhighlight" ng-change="set_refresh(true)"><button class="btn" ng-click="toggle_highlight(newhighlight);newhighlight=''"><i class="icon-plus"></i></button></form></div><div class="span8"><h6>Highlighted fields <small>Click to remove</small></h6><span style="margin-left:3px" ng-click="toggle_highlight(field);set_refresh(true)" ng-repeat="field in $parent.panel.highlight" class="label remove pointer">{{field}}</span></div></div><h5>Options</h5><div class="row-fluid"><div class="span1"><h6>Header</h6><input type="checkbox" ng-model="panel.header" ng-checked="panel.header"></div><div class="span1"><h6>Sorting</h6><input type="checkbox" ng-model="panel.sortable" ng-checked="panel.sortable"></div><div class="span3" style="white-space:nowrap" ng-show="panel.sortable"><h6>Sort</h6><input ng-show="all_fields.length<=0 || !all_fields" style="width:85%" ng-model="panel.sort[0]" type="text"><select ng-show="all_fields.length>0" style="width:85%" ng-model="panel.sort[0]" ng-options="f for f in all_fields"></select><i ng-click="set_sort(panel.sort[0])" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i></div><div class="span2"><h6>Font Size</h6><select class="input-small" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></div><div class="span2"><h6>Trim Factor<tip>Trim fields to this long divided by # of rows</tip></h6><input type="number" class="input-small" ng-model="panel.trimFactor"></div></div>
\ No newline at end of file
<a class="close" ng-click="dismiss()" href="">×</a><h4>Micro Analysis of {{micropanel.field}} <i class="pointer icon-search" ng-click="fieldExists(micropanel.field,'must');dismiss();"></i> <i class="pointer icon-ban-circle" ng-click="fieldExists(micropanel.field,'mustNot');dismiss();"></i><br><small>{{micropanel.count}} events in the table set</small></h4><table style="width:100%" class="table table-striped table-condensed"><thead><th>{{micropanel.field}}</th><th>Action</th><th style="text-align:right">Count</th></thead><tbody><tr ng-repeat="field in micropanel.values"><td>{{{true: "__blank__", false:field[0] }[field[0] == '' || field[0] == undefined]|tableTruncate:panel.trimFactor:3}}</td><td style="width:40px"><i class="pointer icon-search" ng-click="build_search(micropanel.field,field[0]);dismiss();"></i> <i class="pointer icon-ban-circle" ng-click="build_search(micropanel.field,field[0],true);dismiss();"></i></td><td class="progress" style="width:100px;position:relative"><style scoped="">.progress {
overflow: visible;
}</style><div bs-tooltip="percent(field[1],data.length)" class="bar" ng-class="micropanelColor($index)" ng-style="{width: percent(field[1],data.length)}"></div><span style="position:absolute;right:20px">{{field[1]}}</span></td></tr></tbody></table><div class="progress"><div ng-repeat="field in micropanel.values" bs-tooltip="field[0]+' ('+percent(field[1],data.length)+')'" class="bar {{micropanelColor($index)}}" ng-style="{width: percent(field[1],data.length)};"></div></div><span ng-repeat="(field,count) in micropanel.related"><a ng-click="toggle_field(field)">{{field}}</a> ({{Math.round((count / micropanel.count) * 100)}}%),</span>
\ No newline at end of file
<div ng-controller="table" ng-init="init()"><style>.table-doc-table {
margin-left: 0px !important;
overflow-y: auto;
overflow-x: scroll;
}</style><span ng-show="panel.spyable" style="position:absolute;right:0px;top:0px" class="panelextra pointer"><i bs-modal="'app/partials/inspector.html'" class="icon-eye-open"></i></span><div class="row-fluid"><div ng-class="{'span3':panel.field_list}" ng-show="panel.field_list"><div class="sidebar-nav"><h5>Fields <i class="icon-chevron-sign-left pointer" ng-click="panel.field_list = !panel.field_list" bs-tooltip="'Hide field list'" ng-show="panel.field_list"></i></h5><ul class="unstyled" style="{{panel.overflow}}:{{panel.height || row.height}};overflow-y:auto;overflow-x:hidden"><li ng-style="panel.style" ng-repeat="field in fields.list"><i class="pointer" ng-class="{'icon-check': _.contains(panel.fields,field),'icon-check-empty': !_.contains(panel.fields,field)}" ng-click="toggle_field(field)"></i> <a class="pointer" data-unique="1" bs-popover="'app/panels/table/micropanel.html'" data-placement="right" ng-click="toggle_micropanel(field)" ng-class="{label: _.contains(panel.fields,field)}">{{field}}</a></li></ul></div></div><div style="{{panel.overflow}}:{{panel.height || row.height}}" ng-class="{'span9':panel.field_list,'span12':!panel.field_list}" class="table-doc-table"><i class="pull-left icon-chevron-sign-right pointer" ng-click="panel.field_list = !panel.field_list" bs-tooltip="'Show field list'" ng-show="!panel.field_list"></i><div class="row-fluid" ng-show="panel.paging"><div class="span1 offset1" style="text-align:right"><i ng-click="panel.offset = 0" ng-show="panel.offset > 0" class="icon-circle-arrow-left pointer"></i> <i ng-click="panel.offset = (panel.offset - panel.size)" ng-show="panel.offset > 0" class="icon-arrow-left pointer"></i></div><div class="span8" style="text-align:center"><strong>{{panel.offset}}</strong> to <strong>{{panel.offset + data.slice(panel.offset,panel.offset+panel.size).length}}</strong> <small>of {{data.length}} available for paging</small></div><div class="span1" style="text-align:left"><i ng-click="panel.offset = (panel.offset + panel.size)" ng-show="data.length > panel.offset+panel.size" class="icon-arrow-right pointer"></i></div></div><table class="table-hover table table-condensed" ng-style="panel.style"><thead ng-show="panel.header"><th ng-show="panel.fields.length<1">_source (select columns from the list to the left)</th><th style="white-space:nowrap" ng-repeat="field in panel.fields"><i ng-show="!$first" class="pointer link icon-caret-left" ng-click="_.move(panel.fields,$index,$index-1)"></i> <span class="pointer" ng-click="set_sort(field)" ng-show="panel.sortable">{{field}} <i ng-show="field == panel.sort[0]" class="pointer link" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i></span> <span ng-show="!panel.sortable">{{field}}</span> <i ng-show="!$last" class="pointer link icon-caret-right" ng-click="_.move(panel.fields,$index,$index+1)"></i></th></thead><tbody ng-repeat="event in data | slice:panel.offset:panel.offset+panel.size" ng-class-odd="'odd'"><tr ng-click="toggle_details(event)" class="pointer"><td ng-show="panel.fields.length<1">{{event._source|stringify|tableTruncate:panel.trimFactor:1}}</td><td ng-show="panel.fields.length>0" ng-repeat="field in panel.fields" ng-bind-html-unsafe="(event.highlight[field]||event._source[field]) |tableHighlight | tableTruncate:panel.trimFactor:panel.fields.length"></td></tr><tr ng-show="event.kibana.details"><td colspan="1000"><table class="table table-bordered table-condensed"><thead><th>Field</th><th>Action</th><th>Value</th></thead><tr ng-repeat="(key,value) in event.kibana.details._source" ng-class-odd="'odd'"><td>{{key}}</td><td style="white-space:nowrap"><i class="icon-search pointer" ng-click="build_search(key,value)" bs-tooltip="'Add filter to match this value'"></i> <i class="icon-ban-circle pointer" ng-click="build_search(key,value,true)" bs-tooltip="'Add filter to NOT match this value'"></i> <i class="pointer icon-th" ng-click="toggle_field(key)" bs-tooltip="'Toggle table column'"></i></td><td style="white-space:pre-wrap" ng-bind-html-unsafe="value|noXml|urlLink|stringify"></td></tr></table></td></tr></tbody></table><div class="row-fluid" ng-show="panel.paging"><div class="span1 offset3" style="text-align:right"><i ng-click="panel.offset = 0" ng-show="panel.offset > 0" class="icon-circle-arrow-left pointer"></i> <i ng-click="panel.offset = (panel.offset - panel.size)" ng-show="panel.offset > 0" class="icon-arrow-left pointer"></i></div><div class="span4" style="text-align:center"><strong>{{panel.offset}}</strong> to <strong>{{panel.offset + data.slice(panel.offset,panel.offset+panel.size).length}}</strong> <small>of {{data.length}} available for paging</small></div><div class="span1" style="text-align:left"><i ng-click="panel.offset = (panel.offset + panel.size)" ng-show="data.length > panel.offset+panel.size" class="icon-arrow-right pointer"></i></div></div></div></div></div>
\ No newline at end of file
define("panels/table/module",["angular","app","underscore","kbn","moment"],function(e,t,n,r,i){var s=e.module("kibana.panels.table",[]);t.useModule(s),s.controller("table",["$rootScope","$scope","fields","querySrv","dashboard","filterSrv",function(t,i,s,o,u,a){i.panelMeta={editorTabs:[{title:"Paging",src:"app/panels/table/pagination.html"},{title:"Queries",src:"app/partials/querySelect.html"}],status:"Stable",description:"A paginated table of records matching your query or queries. Click on a row to expand it and review all of the fields associated with that document. <p>"};var f={status:"Stable",queries:{mode:"all",ids:[]},size:100,pages:5,offset:0,sort:["_score","desc"],group:"default",style:{"font-size":"9pt"},overflow:"min-height",fields:[],highlight:[],sortable:!0,header:!0,paging:!0,field_list:!0,trimFactor:300,normTimes:!0,spyable:!0};n.defaults(i.panel,f),i.init=function(){i.Math=Math,i.$on("refresh",function(){i.get_data()}),i.fields=s,i.get_data()},i.percent=r.to_percent,i.toggle_micropanel=
function(e){var t=n.pluck(i.data,"_source");i.micropanel={field:e,values:r.top_field_values(t,e,10),related:r.get_related_fields(t,e),count:n.countBy(t,function(t){return n.contains(n.keys(t),e)})["true"]}},i.micropanelColor=function(e){var t=["bar-success","bar-warning","bar-danger","bar-info","bar-primary"];return e>t.length?"":t[e]},i.set_sort=function(e){i.panel.sort[0]===e?i.panel.sort[1]=i.panel.sort[1]==="asc"?"desc":"asc":i.panel.sort[0]=e,i.get_data()},i.toggle_field=function(e){n.indexOf(i.panel.fields,e)>-1?i.panel.fields=n.without(i.panel.fields,e):i.panel.fields.push(e)},i.toggle_highlight=function(e){n.indexOf(i.panel.highlight,e)>-1?i.panel.highlight=n.without(i.panel.highlight,e):i.panel.highlight.push(e)},i.toggle_details=function(e){e.kibana=e.kibana||{},e.kibana.details=e.kibana.details?!1:i.without_kibana(e)},i.page=function(e){i.panel.offset=e*i.panel.size,i.get_data()},i.build_search=function(t,r,s){var o;n.isArray(r)?o="("+n.map(r,function(t){return e.toJson(t)}).
join(" AND ")+")":n.isUndefined(r)?(o="*",s=!s):o=e.toJson(r),a.set({type:"field",field:t,query:o,mandate:s?"mustNot":"must"}),i.panel.offset=0,u.refresh()},i.fieldExists=function(e,t){a.set({type:"exists",field:e,mandate:t}),u.refresh()},i.get_data=function(e,t){i.panel.error=!1;if(u.indices.length===0)return;i.panelMeta.loading=!0,i.panel.queries.ids=o.idsByMode(i.panel.queries);var s=n.isUndefined(e)?0:e;i.segment=s;var f=i.ejs.Request().indices(u.indices[s]),l=i.ejs.BoolQuery();n.each(i.panel.queries.ids,function(e){l=l.should(o.getEjsObj(e))}),f=f.query(i.ejs.FilteredQuery(l,a.getBoolFilter(a.ids))).highlight(i.ejs.Highlight(i.panel.highlight).fragmentSize(2147483647).preTags("@start-highlight@").postTags("@end-highlight@")).size(i.panel.size*i.panel.pages).sort(i.panel.sort[0],i.panel.sort[1]),i.populate_modal(f);var c=f.doSearch();c.then(function(e){i.panelMeta.loading=!1,s===0&&(i.hits=0,i.data=[],t=i.query_id=(new Date).getTime());if(!n.isUndefined(e.error)){i.panel.error=i.parse_error
(e.error);return}if(i.query_id!==t)return;i.data=i.data.concat(n.map(e.hits.hits,function(e){return{_source:r.flatten_json(e._source),highlight:r.flatten_json(e.highlight||{}),_type:e._type,_index:e._index,_id:e._id,_sort:e.sort}})),i.hits+=e.hits.total,i.data=n.sortBy(i.data,function(e){return e._sort[0]}),i.panel.sort[1]==="desc"&&i.data.reverse(),i.data=i.data.slice(0,i.panel.size*i.panel.pages),(i.data.length<i.panel.size*i.panel.pages||!n.contains(a.timeField(),i.panel.sort[0])||i.panel.sort[1]!=="desc")&&s+1<u.indices.length&&i.get_data(s+1,i.query_id)})},i.populate_modal=function(t){i.inspector=e.toJson(JSON.parse(t.toString()),!0)},i.without_kibana=function(e){return{_source:e._source,highlight:e.highlight}},i.set_refresh=function(e){i.refresh=e},i.close_edit=function(){i.refresh&&i.get_data(),i.refresh=!1}}]),s.filter("tableHighlight",function(){return function(e){return!n.isUndefined(e)&&!n.isNull(e)&&e.toString().length>0?e.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;"
).replace(/>/g,"&gt;").replace(/\r?\n/g,"<br/>").replace(/@start-highlight@/g,'<code class="highlight">').replace(/@end-highlight@/g,"</code>"):""}}),s.filter("tableTruncate",function(){return function(e,t,r){return!n.isUndefined(e)&&!n.isNull(e)&&e.toString().length>0?e.length>t/r?e.substr(0,t/r)+"...":e:""}}),s.filter("tableFieldFormat",["fields",function(e){return function(t,r,s,o){var u;if(!n.isUndefined(e.mapping[s._index])&&!n.isUndefined(e.mapping[s._index][s._type])){u=e.mapping[s._index][s._type][r].type;if(u==="date"&&o.panel.normTimes)return i(t).format("YYYY-MM-DD HH:mm:ss")}return t}}])});
\ No newline at end of file
<div class="row-fluid"><div class="span3"><h6>Show Controls</h6><input type="checkbox" ng-model="panel.paging" ng-checked="panel.paging"></div><div class="span2"><h6>Overflow</h6><select class="input-small" ng-model="panel.overflow" ng-options="f.value as f.key for f in [{key:'scroll',value:'height'},{key:'expand',value:'min-height'}]"></select></div></div><div class="row-fluid"><div class="span2"><h6>Per Page</h6><input type="number" class="input-mini" ng-model="panel.size" ng-change="get_data()"></div><div class="span1"><h6>&nbsp;</h6><center><i class="icon-remove"></i><center></center></center></div><div class="span2"><h6>Page limit</h6><input type="number" class="input-mini" ng-model="panel.pages" ng-change="get_data()"></div><div class="span2 large"><h6>Pageable</h6><strong class="large">= {{panel.size * panel.pages}}</strong></div></div>
\ No newline at end of file
<div class="row-fluid"><div class="span2"><label class="small">Field</label><input type="text" class="input-small" bs-typeahead="fields.list" ng-model="panel.field" ng-change="set_refresh(true)"></div><div class="span2"><label class="small">Length</label><input class="input-small" type="number" ng-model="panel.size" ng-change="set_refresh(true)"></div><div class="span3"><label class="small">Order</label><select class="input-medium" ng-model="panel.order" ng-options="f for f in ['count','term','reverse_count','reverse_term']" ng-change="set_refresh(true)"></select></div><div class="span4"><label class="small">Exclude Terms(s) (comma seperated)</label><input array-join="" type="text" ng-model="panel.exclude"></div></div><div class="row-fluid"><div class="span2"><label class="small">Style</label><select class="input-small" ng-model="panel.chart" ng-options="f for f in ['bar','pie','table']"></select></div><div class="span2" ng-show="panel.chart == 'table'"><label class="small">Font Size</label><select class="input-mini" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></div><div class="span2" ng-show="panel.chart == 'bar' || panel.chart == 'pie'"><label class="small">Legend</label><select class="input-small" ng-model="panel.counter_pos" ng-options="f for f in ['above','below','none']"></select></div><div class="span3" ng-show="panel.chart != 'table' && panel.counter_pos != 'none'"><label class="small">Legend Format</label><select class="input-small" ng-model="panel.arrangement" ng-options="f for f in ['horizontal','vertical']"></select></div><div class="span1"><label class="small">Missing</label><input type="checkbox" ng-model="panel.missing" ng-checked="panel.missing"></div><div class="span1"><label class="small">Other</label><input type="checkbox" ng-model="panel.other" ng-checked="panel.other"></div><div class="span1" ng-show="panel.chart == 'pie'"><label class="small">Donut</label><input type="checkbox" ng-model="panel.donut" ng-checked="panel.donut"></div><div class="span1" ng-show="panel.chart == 'pie'"><label class="small">Tilt</label><input type="checkbox" ng-model="panel.tilt" ng-checked="panel.tilt"></div><div class="span1" ng-show="panel.chart == 'pie'"><label class="small">Labels</label><input type="checkbox" ng-model="panel.labels" ng-checked="panel.labels"></div></div>
\ No newline at end of file
<div ng-controller="terms" ng-init="init()"><span ng-show="panel.spyable" class="spy panelextra pointer"><i bs-modal="'app/partials/inspector.html'" class="icon-eye-open"></i></span> <div ng-show="panel.counter_pos == 'above' && (panel.chart == 'bar' || panel.chart == 'pie')" id="{{$id}}-legend"><table class="small" ng-show="panel.arrangement == 'vertical'"><tr ng-repeat="term in legend"><td><i class="icon-circle" ng-style="{color:term.color}"></i></td><td style="padding-right:10px;padding-left:10px">{{term.label}}</td><td>{{term.data[0][1]}}</td></tr></table><div class="small" ng-show="panel.arrangement == 'horizontal'" ng-repeat="term in legend" style="float:left;padding-left: 10px"><span><i class="icon-circle" ng-style="{color:term.color}"></i> {{term.label}} ({{term.data[0][1]}})</span></div><br></div><div style="clear:both"></div><div ng-show="panel.chart == 'pie' || panel.chart == 'bar'" terms-chart="" params="{{panel}}" style="position:relative" class="pointer"></div><div ng-show="panel.counter_pos == 'below' && (panel.chart == 'bar' || panel.chart == 'pie')" id="{{$id}}-legend"><table class="small" ng-show="panel.arrangement == 'vertical'"><tr ng-repeat="term in legend"><td><i class="icon-circle" ng-style="{color:term.color}"></i></td><td style="padding-right:10px;padding-left:10px">{{term.label}}</td><td>{{term.data[0][1]}}</td></tr></table><div class="small" ng-show="panel.arrangement == 'horizontal'" ng-repeat="term in legend" style="float:left;padding-left: 10px"><span><i class="icon-circle" ng-style="{color:term.color}"></i></span> {{term.label}} ({{term.data[0][1]}})</div><br></div><table ng-style="panel.style" class="table table-striped table-condensed" ng-show="panel.chart == 'table'"><thead><th>Term</th><th>Count</th><th>Action</th></thead><tr ng-repeat="term in data" ng-show="showMeta(term)"><td>{{term.label}}</td><td>{{term.data[0][1]}}</td><td><span ng-hide="term.meta == 'other'"><i class="icon-search pointer" ng-click="build_search(term)"></i> <i class="icon-ban-circle pointer" ng-click="build_search(term,true)"></i></span></td></tr></table></div>
\ No newline at end of file
define("panels/terms/module",["angular","app","underscore","jquery","kbn"],function(e,t,n,r,i){var s=e.module("kibana.panels.terms",[]);t.useModule(s),s.controller("terms",["$scope","querySrv","dashboard","filterSrv",function(t,r,i,s){t.panelMeta={editorTabs:[{title:"Queries",src:"app/partials/querySelect.html"}],status:"Beta",description:"Displays the results of an elasticsearch facet as a pie chart, bar chart, or a table"};var o={queries:{mode:"all",ids:[]},field:"_type",exclude:[],missing:!0,other:!0,size:10,order:"count",style:{"font-size":"10pt"},donut:!1,tilt:!1,labels:!0,arrangement:"horizontal",chart:"bar",counter_pos:"above",spyable:!0};n.defaults(t.panel,o),t.init=function(){t.hits=0,t.$on("refresh",function(){t.get_data()}),t.get_data()},t.get_data=function(){if(i.indices.length===0)return;t.panelMeta.loading=!0;var o,u,a;o=t.ejs.Request().indices(i.indices),t.panel.queries.ids=r.idsByMode(t.panel.queries),a=t.ejs.BoolQuery(),n.each(t.panel.queries.ids,function(e){a=a.should(
r.getEjsObj(e))}),o=o.facet(t.ejs.TermsFacet("terms").field(t.panel.field).size(t.panel.size).order(t.panel.order).exclude(t.panel.exclude).facetFilter(t.ejs.QueryFilter(t.ejs.FilteredQuery(a,s.getBoolFilter(s.ids))))).size(0),t.inspector=e.toJson(JSON.parse(o.toString()),!0),u=o.doSearch(),u.then(function(e){var r=0;t.panelMeta.loading=!1,t.hits=e.hits.total,t.data=[],n.each(e.facets.terms.terms,function(e){var n={label:e.term,data:[[r,e.count]],actions:!0};t.data.push(n),r+=1}),t.data.push({label:"Missing field",data:[[r,e.facets.terms.missing]],meta:"missing",color:"#aaa",opacity:0}),t.data.push({label:"Other values",data:[[r+1,e.facets.terms.other]],meta:"other",color:"#444"}),t.$emit("render")})},t.build_search=function(e,r){if(n.isUndefined(e.meta))s.set({type:"terms",field:t.panel.field,value:e.label,mandate:r?"mustNot":"must"});else{if(e.meta!=="missing")return;s.set({type:"exists",field:t.panel.field,mandate:r?"must":"mustNot"})}i.refresh()},t.set_refresh=function(e){t.refresh=
e},t.close_edit=function(){t.refresh&&t.get_data(),t.refresh=!1,t.$emit("render")},t.showMeta=function(e){return n.isUndefined(e.meta)?!0:e.meta==="other"&&!t.panel.other?!1:e.meta==="missing"&&!t.panel.missing?!1:!0}}]),s.directive("termsChart",["querySrv",function(t){return{restrict:"A",link:function(s,o){function u(){var e,i;o.css({height:s.panel.height||s.row.height}),i=n.clone(s.data),i=s.panel.missing?i:n.without(i,n.findWhere(i,{meta:"missing"})),i=s.panel.other?i:n.without(i,n.findWhere(i,{meta:"other"})),require(["jquery.flot.pie"],function(){try{s.panel.chart==="bar"&&(e=r.plot(o,i,{legend:{show:!1},series:{lines:{show:!1},bars:{show:!0,fill:1,barWidth:.8,horizontal:!1},shadowSize:1},yaxis:{show:!0,min:0,color:"#c8c8c8"},xaxis:{show:!1},grid:{borderWidth:0,borderColor:"#eee",color:"#eee",hoverable:!0,clickable:!0},colors:t.colors}));if(s.panel.chart==="pie"){var n=function(e,t){return"<div ng-click=\"build_search(panel.field,'"+e+"')"+' "style="font-size:8pt;text-align:center;padding:2px;color:white;">'+
e+"<br/>"+Math.round(t.percent)+"%</div>"};e=r.plot(o,i,{legend:{show:!1},series:{pie:{innerRadius:s.panel.donut?.4:0,tilt:s.panel.tilt?.45:1,radius:1,show:!0,combine:{color:"#999",label:"The Rest"},stroke:{width:0},label:{show:s.panel.labels,radius:2/3,formatter:n,threshold:.1}}},grid:{hoverable:!0,clickable:!0},colors:t.colors})}o.is(":visible")&&setTimeout(function(){s.legend=e.getData(),s.$$phase||s.$apply()})}catch(u){o.text(u)}})}s.$on("render",function(){u()}),e.element(window).bind("resize",function(){u()}),o.bind("plotclick",function(e,t,n){n&&s.build_search(s.data[n.seriesIndex])});var a=r("<div>");o.bind("plothover",function(e,t,n){if(n){var r=s.panel.chart==="bar"?n.datapoint[1]:n.datapoint[1][0][1];a.html(i.query_color_dot(n.series.color,20)+" "+n.series.label+" ("+r.toFixed(0)+")").place_tt(t.pageX,t.pageY)}else a.remove()})}}}])});
\ No newline at end of file
<div><div class="row-fluid"><div class="span4"><label class="small">Mode</label><select class="input-medium" ng-model="panel.mode" ng-options="f for f in ['html','markdown','text']"></select></div><div class="span2" ng-show="panel.mode == 'text'"><label class="small">Font Size</label><select class="input-mini" ng-model="panel.style['font-size']" ng-options="f for f in ['6pt','7pt','8pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></div></div><label class="small">Content <span ng-show="panel.mode == 'html'">(This area uses HTML sanitized via AngularJS's <a href="http://docs.angularjs.org/api/ngSanitize.$sanitize">$sanitize</a> service)</span> <span ng-show="panel.mode == 'markdown'">(This area uses <a target="_blank" href="http://en.wikipedia.org/wiki/Markdown">Markdown</a>. HTML is not supported)</span></label><textarea ng-model="panel.content" rows="6" style="width:95%"></textarea></div>
\ No newline at end of file
<div ng-controller="text" ng-init="init()"><markdown ng-show="ready && panel.mode == 'markdown'">{{panel.content}}</markdown><p ng-show="panel.mode == 'text'" ng-style="panel.style" ng-bind-html="panel.content | striphtml | newlines"></p><p ng-show="panel.mode == 'html'" ng-bind-html="panel.content"></p></div>
\ No newline at end of file
<div class="row-fluid"><div class="span3"><h6>Default Mode</h6><select style="width:85%" ng-model="panel.mode" ng-options="f for f in ['relative','absolute','since']"></select></div><div class="span3"><h6>Time Field</h6><input type="text" class="input-small" ng-model="panel.timefield"></div></div><div class="row-fluid"><h5>Relative mode <small>settings</small></h5><div class="span6"><h6>Relative time options <small>comma seperated</small></h6><input type="text" array-join="" class="input-large" ng-model="panel.time_options"></div><div class="span3"><h6>Default timespan</h6><select class="input-mini" ng-model="panel.timespan" ng-options="f for f in panel.time_options"></select></div><div class="row-fluid"><h5>Auto-refresh <small>settings</small></h5><div class="span1"><label class="small">Enable</label><input type="checkbox" ng-model="panel.refresh.enable" ng-checked="panel.refresh.enable"></div><div class="span2"><label class="small">Interval (seconds)</label><input type="number" class="input-mini" ng-model="panel.refresh.interval"></div><div class="span3"><label class="small">Minimum Interval (seconds)</label><input type="number" class="input-mini" ng-model="panel.refresh.min"></div></div></div>
\ No newline at end of file
<div ng-controller="timepicker" ng-init="init()"><style>.timepicker-block {
display: inline-block;
}</style><div class="row-fluid form-horizontal" ng-switch="panel.mode" ng-show="filterSrv.idsByType('time').length > 0"><div ng-switch-when="absolute"><div class="timepicker-block"><form class="nomargin"><label><small>From</small></label><input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.from.date" data-date-format="mm/dd/yyyy" bs-datepicker=""><input type="text" class="input-mini" ng-change="time_check()" data-show-meridian="false" data-show-seconds="true" ng-model="timepicker.from.time" bs-timepicker=""></form></div><div class="timepicker-block" style="margin-left:10px"><form class="nomargin"><label style="margin-left:5px"><small>To (<a ng-click="to_now()">now</a>)</small></label><input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.to.date" data-date-format="mm/dd/yyyy" bs-datepicker=""><input type="text" class="input-mini" ng-change="time_check()" data-show-meridian="false" data-show-seconds="true" ng-model="timepicker.to.time" bs-timepicker=""></form></div><div class="timepicker-block"><form class="nomargin"><button class="btn" ng-click="time_apply()"><i class="icon-ok"></i></button></form></div></div><div ng-switch-when="since"><div class="timepicker-block"><form class="nomargin"><label><small>Since</small></label><input type="text" class="input-smaller" ng-change="time_check()" ng-model="timepicker.from.date" data-date-format="mm/dd/yyyy" bs-datepicker=""><input type="text" class="input-mini" ng-change="time_check()" data-show-meridian="false" data-show-seconds="true" ng-model="timepicker.from.time" bs-timepicker=""></form></div><div class="timepicker-block" style="margin-left:10px"><form class="nomargin"><label><small><br></small></label><button class="btn" ng-click="time_apply()"><i class="icon-ok"></i></button></form></div></div><div ng-switch-when="relative"><div class="timepicker-block"><form class="nomargin input-append"><label><small>The last</small></label><button class="btn btn" ng-repeat="timespan in panel.time_options" ng-class="{'btn-success': (panel.timespan == timespan)}" ng-click="set_timespan(timespan)">{{timespan}}</button> </form></div></div></div><div class="row-fluid" ng-show="filterSrv.idsByType('time').length < 1"><div><div class="span11"><h4>No time filter present</h4></div></div></div><div class="row-fluid nomargin"><div class="span12 small" ng-show="filterSrv.idsByType('time').length > 0"><a class="link" ng-click="set_mode('relative')" ng-class="{'strong': (panel.mode == 'relative')}">Relative</a> | <a class="link" ng-click="set_mode('absolute')" ng-class="{'strong': (panel.mode == 'absolute')}">Absolute</a> | <a class="link" ng-click="set_mode('since')" ng-class="{'strong': (panel.mode == 'since')}">Since</a> <span ng-hide="panel.mode == 'absolute' || panel.mode == 'none'">|<input type="checkbox" ng-model="panel.refresh.enable" ng-change="refresh();">Auto-refresh <span ng-class="{'ng-cloak': !panel.refresh.enable}">every <a data-title="<small>Auto-refresh Settings</small>" data-placement="bottom" bs-popover="'app/panels/timepicker/refreshctrl.html'">{{panel.refresh.interval}}s</a>.</span></span></div><div class="span12 small" ng-show="filterSrv.idsByType('time').length < 1"><a class="btn btn-small" ng-click="time_apply()">Create a time filter</a></div></div></div>
\ No newline at end of file
define("panels/timepicker/module",["angular","app","underscore","moment","kbn"],function(e,t,n,r,i){var s=e.module("kibana.panels.timepicker",[]);t.useModule(s),s.controller("timepicker",["$scope","$rootScope","$timeout","timer","$http","dashboard","filterSrv",function(e,t,s,o,u,a,f){function h(t){return t.type="time",f.removeByType("time"),e.panel.filter_id=f.set(p(t)),e.panel.filter_id}function p(e){return e=n.clone(e),e.from=e.from.toDate(),e.to=e.to.toDate(),e}function d(t,n){e.timepicker={from:{time:t.format("HH:mm:ss"),date:t.format("MM/DD/YYYY")},to:{time:n.format("HH:mm:ss"),date:n.format("MM/DD/YYYY")}}}e.panelMeta={status:"Stable",description:"A panel for controlling the time range filters. If you have time based data, or if you're using time stamped indices, you need one of these"};var l={status:"Stable",mode:"relative",time_options:["5m","15m","1h","6h","12h","24h","2d","7d","30d"],timespan:"15m",timefield:"@timestamp",timeformat:"",refresh:{enable:!1,interval:30,min:3}};n.
defaults(e.panel,l),e.init=function(){e.refresh_interval=e.panel.refresh.interval,e.filterSrv=f;switch(e.panel.mode){case"absolute":e.time={from:r(e.panel.time.from,"MM/DD/YYYY HH:mm:ss")||r(i.time_ago(e.panel.timespan)),to:r(e.panel.time.to,"MM/DD/YYYY HH:mm:ss")||r()};break;case"since":e.time={from:r(e.panel.time.from,"MM/DD/YYYY HH:mm:ss")||r(i.time_ago(e.panel.timespan)),to:r()};break;case"relative":e.time={from:r(i.time_ago(e.panel.timespan)),to:r()}}e.time.field=e.panel.timefield,d(e.time.from,e.time.to),c(),e.panel.mode!=="absolute"&&h(e.time),a.refresh(),e.panel.refresh.enable&&e.set_interval(e.panel.refresh.interval),e.$on("refresh",function(){if(f.idsByType("time").length>0){var t=f.timeRange("min");if(e.time.from.diff(r.utc(t.from),"seconds")!==0||e.time.to.diff(r.utc(t.to),"seconds")!==0)e.set_mode("absolute"),d(r(t.from),r(t.to)),e.time=e.time_calc(),c()}})},e.set_interval=function(t){e.panel.refresh.interval=t;if(n.isNumber(e.panel.refresh.interval)){if(e.panel.refresh.interval<
e.panel.refresh.min){e.panel.refresh.interval=e.panel.refresh.min,o.cancel(e.refresh_timer);return}o.cancel(e.refresh_timer),e.refresh()}else o.cancel(e.refresh_timer)},e.refresh=function(){e.panel.refresh.enable?(o.cancel(e.refresh_timer),e.refresh_timer=o.register(s(function(){e.refresh(),e.time_apply()},e.panel.refresh.interval*1e3))):o.cancel(e.refresh_timer)};var c=function(){e.panel.mode!=="relative"?e.panel.time={from:e.time.from.format("MM/DD/YYYY HH:mm:ss"),to:e.time.to.format("MM/DD/YYYY HH:mm:ss")}:delete e.panel.time};e.set_mode=function(t){e.panel.mode=t,e.panel.refresh.enable=t==="absolute"?!1:e.panel.refresh.enable,c()},e.to_now=function(){e.timepicker.to={time:r().format("HH:mm:ss"),date:r().format("MM/DD/YYYY")}},e.set_timespan=function(t){e.panel.timespan=t,e.timepicker.from={time:r(i.time_ago(t)).format("HH:mm:ss"),date:r(i.time_ago(t)).format("MM/DD/YYYY")},e.time_apply()},e.close_edit=function(){e.time_apply()},e.time_calc=function(){var t,o;return n.isUndefined(e.timepicker
)?(t=e.panel.mode==="relative"?r(i.time_ago(e.panel.timespan)):e.time.from,o=e.panel.mode!=="absolute"?r():e.time.to):(t=e.panel.mode==="relative"?r(i.time_ago(e.panel.timespan)):r(r(e.timepicker.from.date).format("MM/DD/YYYY")+" "+e.timepicker.from.time,"MM/DD/YYYY HH:mm:ss"),o=e.panel.mode!=="absolute"?r():r(r(e.timepicker.to.date).format("MM/DD/YYYY")+" "+e.timepicker.to.time,"MM/DD/YYYY HH:mm:ss")),t.valueOf()>=o.valueOf()&&(t=r(o.valueOf()-1e3)),s(function(){d(t,o)}),{from:t,to:o}},e.time_apply=function(){e.panel.error="",f.removeByType("time"),e.time=e.time_calc(),e.time.field=e.panel.timefield,c(),h(e.time),a.refresh()},e.$watch("panel.mode",e.time_apply)}])});
\ No newline at end of file
<form name="refreshPopover" class="form-inline input-append" style="margin:0px"><label><small>Interval (seconds)</small></label><br><input type="number" class="input-mini" ng-model="refresh_interval"><button type="button" class="btn" ng-click="set_interval(refresh_interval);dismiss()"><i class="icon-ok"></i></button></form>
\ No newline at end of file
<div><div class="row-fluid"><div class="span12">The trends panel will give you a percentage representation of how your query has moved in your current timespan compared a specified amount of time ago. For example, if the time is 1:10pm, your time picker was set to "Last 10m", and the "Time Ago" parameter was set to '1h', the panel would show how much the query results have changed since 12:00-12:10pm</div></div><h4>Settings</h4><div class="row-fluid"><div class="span3" ng-hide="panel.auto_int"><label class="small">Use Elasticsearch date math format here (eg 1m, 5m, 1d, 2w, 1y)</label></div><div class="span3"><label class="small">Time Ago</label><input type="text" class="input-small" ng-model="panel.ago" ng-change="set_refresh(true)"></div><div class="span2"><label class="small">Font Size</label><select class="input-small" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></div><div class="span3"><label class="small">List Format</label><select class="input-small" ng-model="panel.arrangement" ng-options="f for f in ['horizontal','vertical']"></select></div></div></div>
\ No newline at end of file
<div ng-controller="trends" ng-init="init()"><div ng-style="panel.style" style="line-height:{{panel.style['font-size']}};display:inline-block;padding-right: 5px" ng-repeat="query in trends"><i class="icon-circle" style="color:{{query.info.color}}"></i> <span bs-tooltip="'Then: '+query.hits.old+', Now: '+query.hits.new" ng-class="{'text-success': query.hits.new >= query.hits.old, 'text-error': query.hits.old > query.hits.new}" class="pointer strong"><i class="large" ng-class="{'icon-caret-up': query.hits.new >= query.hits.old, 'icon-caret-down': query.hits.old > query.hits.new}"></i> {{query.percent}}%</span> <span class="tiny light" ng-show="query.info.alias != ''">({{query.info.alias}})</span><br ng-show="panel.arrangement == 'vertical'"></div></div>
\ No newline at end of file
define("panels/trends/module",["angular","app","underscore","kbn"],function(e,t,n,r){var i=e.module("kibana.panels.trends",[]);t.useModule(i),i.controller("trends",["$scope","kbnIndex","querySrv","dashboard","filterSrv",function(e,t,i,s,o){function f(e,t){return e===0?null:100*(t-e)/e}e.panelMeta={editorTabs:[{title:"Queries",src:"app/partials/querySelect.html"}],status:"Beta",description:'A stock-ticker style representation of how queries are moving over time. For example, if the time is 1:10pm, your time picker was set to "Last 10m", and the "Time Ago" parameter was set to \'1h\', the panel would show how much the query results have changed since 12:00-12:10pm'};var u={queries:{mode:"all",ids:[]},style:{"font-size":"14pt"},ago:"1d",arrangement:"vertical"};n.defaults(e.panel,u),e.init=function(){e.hits=0,e.$on("refresh",function(){e.get_data()}),e.get_data()},e.get_data=function(u,f){delete e.panel.error,e.panelMeta.loading=!0;if(s.indices.length===0)return;e.index=u>0?e.index:s.indices
,e.panel.queries.ids=i.idsByMode(e.panel.queries);var l=n.uniq(n.pluck(o.getByType("time"),"field"));if(l.length>1){e.panel.error="Time field must be consistent amongst time filters";return}if(l.length===0){e.panel.error="A time filter must exist for this panel to function";return}l=l[0],e.time=o.timeRange("min"),e.old_time={from:new Date(e.time.from.getTime()-r.interval_to_seconds(e.panel.ago)*1e3),to:new Date(e.time.to.getTime()-r.interval_to_seconds(e.panel.ago)*1e3)};var c=n.isUndefined(u)?0:u,h=e.ejs.Request(),p=n.difference(o.ids,o.idsByType("time"));n.each(e.panel.queries.ids,function(t){var n=e.ejs.FilteredQuery(i.getEjsObj(t),o.getBoolFilter(p).must(e.ejs.RangeFilter(l).from(e.time.from).to(e.time.to)));h=h.facet(e.ejs.QueryFacet(t).query(n)).size(0)}),n.each(e.panel.queries.ids,function(t){var n=e.ejs.FilteredQuery(i.getEjsObj(t),o.getBoolFilter(p).must(e.ejs.RangeFilter(l).from(e.old_time.from).to(e.old_time.to)));h=h.facet(e.ejs.QueryFacet("old_"+t).query(n)).size(0)}),c===0?
t.indices(e.old_time.from,e.old_time.to,s.current.index.pattern,s.current.index.interval).then(function(t){e.index=n.union(t,e.index),h=h.indices(e.index[c]),a(h.doSearch(),c,f)}):a(h.indices(e.index[c]).doSearch(),c,f)};var a=function(t,r,s){t.then(function(t){e.panelMeta.loading=!1,r===0&&(e.hits={},e.data=[],s=e.query_id=(new Date).getTime());if(!n.isUndefined(t.error)){e.panel.error=e.parse_error(t.error);return}var o=n.map(n.keys(t.facets),function(e){if(!isNaN(e))return parseInt(e,10)});if(e.query_id===s&&n.intersection(o,e.panel.queries.ids).length===e.panel.queries.ids.length){var u=0;n.each(e.panel.queries.ids,function(s){var o=t.facets[s].count,a=t.facets["old_"+s].count,l={"new":n.isUndefined(e.data[u])||r===0?o:e.data[u].hits.new+o,old:n.isUndefined(e.data[u])||r===0?a:e.data[u].hits.old+a};e.hits.new+=o,e.hits.old+=a;var c=f(l.old,l.new)==null?"?":Math.round(f(l.old,l.new)*100)/100;e.data[u]={info:i.list[s],hits:{"new":l.new,old:l.old},percent:c},u++}),e.$emit("render"),r<e
.index.length-1?e.get_data(r+1,s):e.trends=e.data}})};e.set_refresh=function(t){e.refresh=t},e.close_edit=function(){e.refresh&&e.get_data(),e.refresh=!1,e.$emit("render")}}])});
\ No newline at end of file
<li class="dropdown" bs-tooltip="'Load'" data-placement="bottom" ng-show="showDropdown('load')"><a href="#" class="dropdown-toggle" data-toggle="dropdown" ng-click="elasticsearch_dblist('*')"><i class="icon-folder-open"></i></a><ul class="dropdown-menu" style="padding:10px"><li ng-show="loader.load_local"><h5>Local File<tip>Load dashboard JSON layout from file</tip></h5><form><input type="file" id="dashupload" dash-upload=""><br></form></li><li ng-show="loader.load_gist"><h5>Gist<tip>Enter a gist number or url</tip></h5><form><input type="text" ng-model="gist.url" placeholder="Gist number or URL"><br><button class="btn" ng-click="gist_dblist(dashboard.gist_id(gist.url))" ng-show="dashboard.is_gist(gist.url)"><i class="icon-github-alt"></i> Get gist:{{gist.url | gistid}}</button><h6 ng-show="gist.files.length">Dashboards in gist:{{gist.url | gistid}} <small>click to load</small></h6><h6 ng-hide="gist.files.length">No gist dashboards found</h6><table class="table table-condensed table-striped"><tr ng-repeat="file in gist.files"><td><a ng-click="dashboard.dash_load(file)">{{file.title}}</a></td></tr></table></form></li><li ng-show="loader.load_elasticsearch"><h5>Elasticsearch</h5><form><input type="text" ng-model="elasticsearch.query" ng-change="elasticsearch_dblist('title:'+elasticsearch.query+'*')" placeholder="Type to filter"></form><h6 ng-show="elasticsearch.dashboards.length">Elasticsearch stored dashboards</h6><h6 ng-hide="elasticsearch.dashboards.length">No dashboards matching your query found</h6><table class="table table-condensed table-striped"><tr ng-repeat="row in elasticsearch.dashboards | orderBy:['_id']"><td><a ng-click="elasticsearch_delete(row._id)"><i class="icon-remove"></i></a></td><td><a href="#/dashboard/elasticsearch/{{row._id}}">{{row._id}}</a></td><td><a><i class="icon-share" ng-click="share = dashboard.share_link(row._id,'elasticsearch',row._id)" bs-modal="'app/panels/dashcontrol/share.html'"></i></a></td></tr></table></li></ul></li><li class="dropdown" bs-tooltip="'Save'" data-placement="bottom" ng-show="showDropdown('save')"><a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-save"></i></a><ul class="dropdown-menu" style="padding:10px"><li ng-show="loader.save_default || loader.save_local"><h5>Locally</h5><ul class="unstyled"><li><a class="link" ng-show="loader.save_local" ng-click="dashboard.to_file()"><i class="icon-download"></i> Export to File</a><tip>Export layout, not data, to file</tip></li><li><a class="link" ng-show="loader.save_default" ng-click="set_default()"><i class="icon-bookmark"></i> Set as Browser Default</a><tip>Store dashboard preference to browser's localStorage</tip></li><li><a class="link" ng-show="loader.save_default" ng-click="purge_default()"><i class="icon-ban-circle"></i> Clear Browser Default</a></li></ul></li><li ng-show="loader.save_gist"><h5>Gist</h5><form class="input-append"><input class="input-medium" placeholder="Title" type="text" ng-model="gist.title"><button class="btn" ng-click="save_gist()"><i class="icon-github-alt"></i></button></form><br><small ng-show="gist.last">Last gist: <a target="_blank" href="{{gist.last}}">{{gist.last}}</a></small></li><li ng-show="loader.save_elasticsearch"><h5>Elasticsearch</h5><form class="input-append"><input class="input-medium" placeholder="Title" type="text" ng-model="elasticsearch.title"><button class="btn" ng-click="elasticsearch_save('dashboard')"><i class="icon-save"></i></button></form></li></ul></li><li ng-show="showDropdown('share')"><a bs-tooltip="'Share'" data-placement="bottom" ng-click="elasticsearch_save('temp',loader.save_temp_ttl)" bs-modal="'app/partials/dashLoaderShare.html'"><i class="icon-share"></i></a></li>
\ No newline at end of file
<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3>{{share.title}} <small>shareable link</small></h3></div><div class="modal-body"><label>Share this dashboard with this URL</label><input ng-model="share.link" type="text" style="width:90%" onclick="this.select()" onfocus="this.select()" ng-change="share = dashboard.share_link(share.title,share.type,share.id)"></div><div class="modal-footer"><button type="button" class="btn btn-success" ng-click="dismiss();$broadcast('render')">Close</button></div>
\ No newline at end of file
<div class="row-fluid container" style="margin-top:10px"><div class="row-fluid kibana-row" ng-controller="RowCtrl" ng-repeat="(row_name, row) in dashboard.current.rows" ng-style="row_style(row)"><div class="row-control"><div class="row-fluid row-header" style="padding:0px;margin:0px;height:0px"><div style="vertical-align:bottom"><div><div ng-class="{'row-open': !row.collapse, 'row-close': row.collapse}" style="position:absolute;margin-left:-60px"><span ng-class="{pointer:row.collapsable}" ng-click="toggle_row(row)">{{row.title}}</span> <i ng-show="row.editable" class="icon-cog pointer editlink" bs-modal="'app/partials/roweditor.html'"></i></div></div></div></div><div class="row-fluid" style="padding-top:0px" ng-hide="row.collapse"><div ng-repeat="(name, panel) in row.panels" ng-hide="panel.span == 0 || panel.hide" class="span{{panel.span}} panel" style="min-height:{{row.height}}; position:relative"><div class="row-fluid"><div class="span12 alert alert-error panel-error" ng-hide="!panel.error"><a class="close" ng-click="panel.error=false">&times;</a> <i class="icon-exclamation-sign"></i> <strong>Oops!</strong> {{panel.error}}</div></div><div class="row-fluid"><kibana-panel type="panel.type" ng-cloak=""></kibana-panel></div></div></div></div></div></div>
\ No newline at end of file
<div class="modal-body"><div class="pull-right editor-title">Dashboard settings</div><div ng-model="editor.index" bs-tabs=""><div ng-repeat="tab in ['General','Index','Rows','Controls']" data-title="{{tab}}"></div></div><div ng-show="editor.index == 0"><div class="row-fluid"><div class="span4"><label class="small">Title</label><input type="text" class="input-large" ng-model="dashboard.current.title"></div><div class="span1"><label class="small">Editable</label><input type="checkbox" ng-model="dashboard.current.editable" ng-checked="dashboard.current.editable"></div><div class="span3"><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></div><div ng-show="editor.index == 1"><div class="row-fluid"><h4>Index Settings</h4><div ng-show="dashboard.current.index.interval != 'none'" class="row-fluid"><div class="span12"><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. 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 class="row-fluid"><div class="span2"><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="span4" ng-show="dashboard.current.index.interval != 'none'"><h6>Index pattern <small>Absolutes in []</small></h6><input type="text" class="input-medium" ng-model="dashboard.current.index.pattern"></div><div class="span2" 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="span4" 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></div><div ng-show="editor.index == 2"><div class="row-fluid"><div class="span12"><table class="table table-condensed table-striped"><thead><th>Title</th><th>Delete</th><th>Move</th></thead><tr ng-repeat="row in dashboard.current.rows"><td>{{row.title}}</td><td><i ng-click="dashboard.current.rows = _.without(dashboard.current.rows,row)" class="pointer icon-remove"></i></td><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></tr></table></div></div><div class="row-fluid"><form><div class="span5"><label class="small">Title</label><input type="text" class="input-large" ng-model="row.title" placeholder="New row"></div><div class="span2"><label class="small">Height</label><input type="text" class="input-mini" ng-model="row.height"></div><div class="span1"><label class="small">Editable</label><input type="checkbox" ng-model="row.editable" ng-checked="row.editable"></div></form></div></div><div ng-show="editor.index == 3" ng-controller="dashLoader"><h5>Allow saving to</h5><div class="row-fluid"><div class="span2"><label class="small">File</label><input type="checkbox" ng-model="loader.save_local" ng-checked="loader.save_local"></div><div class="span2"><label class="small">Browser</label><input type="checkbox" ng-model="loader.save_default" ng-checked="loader.save_default"></div><div class="span2"><label class="small">Gist<tip>Requires your domain to be OAUTH registered with Github<tip></tip></tip></label><input type="checkbox" ng-model="loader.save_gist" ng-checked="loader.save_gist"></div><div class="span2"><label class="small">Elasticsearch</label><input type="checkbox" ng-model="loader.save_elasticsearch" ng-checked="loader.save_elasticsearch"></div></div><h5>Allow loading from</h5><div class="row-fluid"><div class="span2"><label class="small">Local file</label><input type="checkbox" ng-model="loader.load_local" ng-checked="loader.load_local"></div><div class="span2"><label class="small">Gist</label><input type="checkbox" ng-model="loader.load_gist" ng-checked="loader.load_gist"></div><div class="span2"><label class="small">Elasticsearch</label><input type="checkbox" ng-model="loader.load_elasticsearch" ng-checked="loader.load_elasticsearch"></div><div class="span3" ng-show="loader.load.elasticsearch"><label class="small">ES list size</label><input class="input-mini" type="number" ng-model="loader.load_elasticsearch_size"></div></div><h5>Sharing</h5><div class="row-fluid"><div class="span2"><label class="small">Allow Sharing<tip>Allow generating adhoc links to dashboards</tip></label><input type="checkbox" ng-model="loader.save_temp" ng-checked="loader.save_temp"></div><div class="span2" ng-show="loader.save_temp"><label class="small">TTL<tip>Expire temp urls</tip></label><input type="checkbox" ng-model="loader.save_temp_ttl_enable"></div><div class="span5" ng-show="loader.save_temp &amp;&amp; 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="loader.save_temp_ttl"></div></div></div></div><div class="modal-footer"><button ng-click="add_row(dashboard.current,row); reset_row();" class="btn btn-success" ng-show="editor.index == 2">Create Row</button> <button type="button" class="btn btn-danger" ng-click="editor.index=0;dismiss();reset_panel();dashboard.refresh()">Close</button></div>
\ No newline at end of file
<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
<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
This diff is collapsed. Click to expand it.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
File mode changed from 100644 to 100755
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment