/*! kibana - v3.1.2 - 2014-11-07
 * Copyright (c) 2014 Rashid Khan; Licensed Apache License */

function jsonPath(obj,expr,arg){var P={resultType:arg&&arg.resultType||"VALUE",result:[],normalize:function(a){var b=[];return a.replace(/[\['](\??\(.*?\))[\]']/g,function(a,c){return"[#"+(b.push(c)-1)+"]"}).replace(/'?\.'?|\['?/g,";").replace(/;;;|;;/g,";..;").replace(/;$|'?\]|'$/g,"").replace(/#([0-9]+)/g,function(a,c){return b[c]})},asPath:function(a){for(var b=a.split(";"),c="$",d=1,e=b.length;e>d;d++)c+=/^[0-9*]+$/.test(b[d])?"["+b[d]+"]":"['"+b[d]+"']";return c},store:function(a,b){return a&&(P.result[P.result.length]="PATH"==P.resultType?P.asPath(a):b),!!a},trace:function(a,b,c){if(a){var d=a.split(";"),e=d.shift();if(d=d.join(";"),b&&b.hasOwnProperty(e))P.trace(d,b[e],c+";"+e);else if("*"===e)P.walk(e,d,b,c,function(a,b,c,d,e){P.trace(a+";"+c,d,e)});else if(".."===e)P.trace(d,b,c),P.walk(e,d,b,c,function(a,b,c,d,e){"object"==typeof d[a]&&P.trace("..;"+c,d[a],e+";"+a)});else if(/,/.test(e))for(var f=e.split(/'?,'?/),g=0,h=f.length;h>g;g++)P.trace(f[g]+";"+d,b,c);else/^\(.*?\)$/.test(e)?P.trace(P.eval(e,b,c.substr(c.lastIndexOf(";")+1))+";"+d,b,c):/^\?\(.*?\)$/.test(e)?P.walk(e,d,b,c,function(a,b,c,d,e){P.eval(b.replace(/^\?\((.*?)\)$/,"$1"),d[a],a)&&P.trace(a+";"+c,d,e)}):/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(e)&&P.slice(e,d,b,c)}else P.store(c,b)},walk:function(a,b,c,d,e){if(c instanceof Array)for(var f=0,g=c.length;g>f;f++)f in c&&e(f,a,b,c,d);else if("object"==typeof c)for(var h in c)c.hasOwnProperty(h)&&e(h,a,b,c,d)},slice:function(a,b,c,d){if(c instanceof Array){var e=c.length,f=0,g=e,h=1;a.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g,function(a,b,c,d){f=parseInt(b||f),g=parseInt(c||g),h=parseInt(d||h)}),f=0>f?Math.max(0,f+e):Math.min(e,f),g=0>g?Math.max(0,g+e):Math.min(e,g);for(var i=f;g>i;i+=h)P.trace(i+";"+b,c,d)}},eval:function(x,_v,_vname){try{return $&&_v&&eval(x.replace(/@/g,"_v"))}catch(e){throw new SyntaxError("jsonPath: "+e.message+": "+x.replace(/@/g,"_v").replace(/\^/g,"_a"))}}},$=obj;return expr&&obj&&("VALUE"==P.resultType||"PATH"==P.resultType)?(P.trace(P.normalize(expr).replace(/^\$;/,""),obj,"$"),P.result.length?P.result:!1):void 0}define("jsonpath",function(a){return function(){var b;return b||a.jsonPath}}(this)),define("panels/table/module",["angular","app","lodash","kbn","moment","jsonpath"],function(a,b,c,d,e){var f=a.module("kibana.panels.table",[]);b.useModule(f),f.controller("table",["$rootScope","$scope","$modal","$q","$compile","$timeout","fields","querySrv","dashboard","filterSrv",function(b,e,f,g,h,i,j,k,l,m){e.panelMeta={modals:[{description:"Inspect",icon:"icon-info-sign",partial:"app/partials/inspector.html",show:e.panel.spyable}],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 n={size:100,pages:5,offset:0,sort:["_score","desc"],overflow:"min-height",fields:[],highlight:[],sortable:!0,header:!0,paging:!0,field_list:!0,all_fields:!1,trimFactor:300,localTime:!1,timeField:"@timestamp",spyable:!0,queries:{mode:"all",ids:[]},style:{"font-size":"9pt"},normTimes:!0};c.defaults(e.panel,n),e.init=function(){e.columns={},c.each(e.panel.fields,function(a){e.columns[a]=!0}),e.Math=Math,e.identity=a.identity,e.$on("refresh",function(){e.get_data()}),e.fields=j,e.get_data()},e.percent=d.to_percent,e.closeFacet=function(){e.modalField&&delete e.modalField},e.termsModal=function(b,c){e.closeFacet(),i(function(){e.modalField=b,e.adhocOpts={height:"200px",chart:c,field:b,span:e.panel.span,type:"terms",title:"Top 10 terms in field "+b},o(a.toJson(e.adhocOpts),"terms")},0)},e.statsModal=function(b){e.closeFacet(),i(function(){e.modalField=b,e.adhocOpts={height:"200px",field:b,mode:"mean",span:e.panel.span,type:"stats",title:"Statistics for "+b},o(a.toJson(e.adhocOpts),"stats")},0)};var o=function(a,b){e.facetPanel=a,e.facetType=b};e.toggle_micropanel=function(a,b){var f=c.map(e.data,function(a){return a.kibana._source}),g=d.top_field_values(f,a,10,b);e.micropanel={field:a,grouped:b,values:g.counts,hasArrays:g.hasArrays,related:d.get_related_fields(f,a),limit:10,count:c.countBy(f,function(b){return c.contains(c.keys(b),a)})["true"]};var h=e.ejs.client.get("/"+l.indices+"/_mapping/field/"+a,void 0,void 0,function(a,b){console.log(b)});return h.then(function(a){var b=c.uniq(jsonPath(a,"*.*.*.*.mapping.*.type"));c.isArray(b)&&(e.micropanel.type=b.join(", ")),c.intersection(b,["long","float","integer","double"]).length>0&&(e.micropanel.hasStats=!0)})},e.micropanelColor=function(a){var b=["bar-success","bar-warning","bar-danger","bar-info","bar-primary"];return a>b.length?"":b[a]},e.set_sort=function(a){e.panel.sort[0]===a?e.panel.sort[1]="asc"===e.panel.sort[1]?"desc":"asc":e.panel.sort[0]=a,e.get_data()},e.toggle_field=function(a){c.indexOf(e.panel.fields,a)>-1?(e.panel.fields=c.without(e.panel.fields,a),delete e.columns[a]):(e.panel.fields.push(a),e.columns[a]=!0)},e.toggle_highlight=function(a){c.indexOf(e.panel.highlight,a)>-1?e.panel.highlight=c.without(e.panel.highlight,a):e.panel.highlight.push(a)},e.toggle_details=function(a){a.kibana.details=a.kibana.details?!1:!0,a.kibana.view=a.kibana.view||"table"},e.page=function(a){e.panel.offset=a*e.panel.size,e.get_data()},e.build_search=function(b,d,f){var g;c.isArray(d)?g="("+c.map(d,function(b){return a.toJson(b)}).join(" AND ")+")":c.isUndefined(d)?(g="*",f=!f):g=a.toJson(d),e.panel.offset=0,m.set({type:"field",field:b,query:g,mandate:f?"mustNot":"must"})},e.fieldExists=function(a,b){m.set({type:"exists",field:a,mandate:b})},e.get_data=function(a,b){var f,g,h,i,j;e.panel.error=!1,0!==l.indices.length&&(j=[e.ejs.Sort(e.panel.sort[0]).order(e.panel.sort[1]).ignoreUnmapped(!0)],e.panel.localTime&&j.push(e.ejs.Sort(e.panel.timeField).order(e.panel.sort[1]).ignoreUnmapped(!0)),e.panelMeta.loading=!0,f=c.isUndefined(a)?0:a,e.segment=f,g=e.ejs.Request().indices(l.indices[f]),e.panel.queries.ids=k.idsByMode(e.panel.queries),i=k.getQueryObjs(e.panel.queries.ids),h=e.ejs.BoolQuery(),c.each(i,function(a){h=h.should(k.toEjsObj(a))}),g=g.query(e.ejs.FilteredQuery(h,m.getBoolFilter(m.ids()))).highlight(e.ejs.Highlight(e.panel.highlight).fragmentSize(2147483647).preTags("@start-highlight@").postTags("@end-highlight@")).size(e.panel.size*e.panel.pages).sort(j),e.populate_modal(g),g.doSearch().then(function(a){return e.panelMeta.loading=!1,0===f&&(e.panel.offset=0,e.hits=0,e.data=[],e.current_fields=[],b=e.query_id=(new Date).getTime()),c.isUndefined(a.error)?void(e.query_id===b&&(e.data=e.data.concat(c.map(a.hits.hits,function(a){var b=c.clone(a),f=c.omit(a,"_source","sort","_score");return b.kibana={_source:c.extend(d.flatten_json(a._source),f),highlight:d.flatten_json(a.highlight||{})},e.current_fields=e.current_fields.concat(c.keys(b.kibana._source)),b})),e.current_fields=c.uniq(e.current_fields),e.hits+=a.hits.total,e.data=c.sortBy(e.data,function(a){return c.isUndefined(a.sort)?a._score:a.sort[0]}),"desc"===e.panel.sort[1]&&e.data.reverse(),e.data=e.data.slice(0,e.panel.size*e.panel.pages),(e.data.length<e.panel.size*e.panel.pages||!c.contains(m.timeField(),e.panel.sort[0])||"desc"!==e.panel.sort[1])&&f+1<l.indices.length&&e.get_data(f+1,e.query_id))):void(e.panel.error=e.parse_error(a.error))}))},e.populate_modal=function(b){e.inspector=a.toJson(JSON.parse(b.toString()),!0)},e.without_kibana=function(a){var b=c.clone(a);return delete b.kibana,b},e.set_refresh=function(a){e.refresh=a},e.close_edit=function(){e.refresh&&e.get_data(),e.columns=[],c.each(e.panel.fields,function(a){e.columns[a]=!0}),e.refresh=!1},e.locate=function(a,b){b=b.split(".");for(var c=/(.+)\[(\d+)\]/,d=0;d<b.length;d++){var e=c.exec(b[d]);a=e?a[e[1]][parseInt(e[2],10)]:a[b[d]]}return a}}]),f.filter("tableHighlight",function(){return function(a){return!c.isUndefined(a)&&!c.isNull(a)&&a.toString().length>0?a.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>"):""}}),f.filter("tableTruncate",function(){return function(a,b,d){return!c.isUndefined(a)&&!c.isNull(a)&&a.toString().length>0?a.length>b/d?a.substr(0,b/d)+"...":a:""}}),f.filter("tableJson",function(){var b;return function(d,e){return!c.isUndefined(d)&&!c.isNull(d)&&d.toString().length>0?(b=a.toJson(d,e>0?!0:!1),b=b.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),e>1&&(b=b.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,function(a){var b="number";return/^"/.test(a)?b=/:$/.test(a)?"key strong":"":/true|false/.test(a)?b="boolean":/null/.test(a)&&(b="null"),'<span class="'+b+'">'+a+"</span>"})),b):""}}),f.filter("tableLocalTime",function(){return function(a,b){return e(b.sort[1]).format("YYYY-MM-DDTHH:mm:ss.SSSZ")}})});