3
0
mirror of https://github.com/grafana/grafana.git synced 2025-02-25 18:55:37 -06:00

- Removed the "dist" directory

- Created a grunt task to build, compress, and upload the build to s3
 - Updated the README to point users to downloads.elasticsearch.org
This commit is contained in:
Spencer Alger 2013-09-16 15:14:20 -07:00
parent a59f9e617f
commit 259562136f
121 changed files with 57 additions and 4057 deletions

4
.gitignore vendored
View File

@ -1 +1,3 @@
node_modules
node_modules
.aws-config.json
dist

View File

@ -4,6 +4,7 @@ module.exports = function (grunt) {
var config = {
pkg: grunt.file.readJSON('package.json'),
aws: grunt.file.readJSON('.aws-config.json'),
srcDir: 'src',
destDir: 'dist',
tempDir: 'tmp',
@ -16,7 +17,7 @@ module.exports = function (grunt) {
},
clean: {
on_start: ['<%= destDir %>', '<%= tempDir %>'],
after_require: ['<%= tempDir %>'],
temp: ['<%= tempDir %>'],
},
copy: {
everthing_left_in_src: {
@ -149,6 +150,29 @@ module.exports = function (grunt) {
me: {
// Target-specific file lists and/or options go here.
},
},
zip: {
dist: {
cwd: '<%= destDir %>',
src: ['<%= destDir %>/**/*','LICENSE.md','README.md'],
dest: '<%= tempDir %>/dist.zip'
}
},
s3: {
options: {
key: '<%= aws.key %>',
secret: '<%= aws.secret %>',
bucket: 'download.elasticsearch.org',
access: 'private'
},
dist: {
upload: [
{
src: '<%= tempDir %>/dist.zip',
dest: 'kibana/releases/<%= pkg.name %>-latest.zip',
}
]
}
}
};
@ -198,6 +222,8 @@ module.exports = function (grunt) {
config.requirejs.compile_temp.options.modules = requireModules;
// load plugins
grunt.loadNpmTasks('grunt-s3');
grunt.loadNpmTasks('grunt-zip');
grunt.loadNpmTasks('grunt-ngmin');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-less');
@ -224,11 +250,18 @@ module.exports = function (grunt) {
'copy:everthing_left_in_src',
'ngmin',
'requirejs:compile_temp',
'clean:after_require',
'clean:temp',
'write_revision_to_dest', // runs git-describe and replace:config
'uglify:dest'
]);
grunt.registerTask('distribute', [
'build',
'zip:dist',
's3:dist',
'clean:temp'
]);
grunt.registerTask('write_revision_to_dest', function() {
grunt.event.once('git-describe', function (desc) {
grunt.config('string-replace.config', {

View File

@ -1,7 +1,7 @@
# Kibana
__NOTE__: You have reached the Kibana 3 repository.
Kibana 3 is completely new version of Kibana written entirely in HTML and Javascript. You can find
__NOTE__: You have reached the Kibana 3 repository.
Kibana 3 is completely new version of Kibana written entirely in HTML and Javascript. You can find
the Kibana 2 repository at [https://github.com/rashidkpc/Kibana](https://github.com/rashidkpc/Kibana)
### Important!
@ -17,41 +17,41 @@ The dashboard storage format has changed in Kibana 3 milestone 3. Existing dashb
* Index configuration has been moved from the timepicker, to the main dashboard editor
* The stringquery panel has been replaced with a more polished 'query' panel
More information about Kibana 3 can be found at [http://www.elasticsearch.org/overview/kibana/](http://www.elasticsearch.org/overview/kibana/)
More information about Kibana 3 can be found at [http://www.elasticsearch.org/overview/kibana/](http://www.elasticsearch.org/overview/kibana/)
## Overview
Kibana is an open source (Apache Licensed), browser based analytics and search interface to Logstash
and other timestamped data sets stored in ElasticSearch. With those in place Kibana is a snap to
setup and start using (seriously). Kibana strives to be easy to get started with, while also being
Kibana is an open source (Apache Licensed), browser based analytics and search interface to Logstash
and other timestamped data sets stored in ElasticSearch. With those in place Kibana is a snap to
setup and start using (seriously). Kibana strives to be easy to get started with, while also being
flexible and powerful
### Requirements
* A modern web browser. The latest version of Chrome, Safari and Firefox have all been tested to
* A modern web browser. The latest version of Chrome, Safari and Firefox have all been tested to
work. IE9 and greater should work. IE8 does not.
* A webserver. No extensions are required, as long as it can serve plain html it will work
* A browser reachable Elasticsearch server. Port 9200 must be open, or a proxy configured to allow
* A browser reachable Elasticsearch server. Port 9200 must be open, or a proxy configured to allow
access to it.
### Installation
1. Copy the contents of the dist/ directory to your webserver
2. Edit config.js in your deployed directory to point to your elasticsearch server. This should __not be
http://localhost:9200__, but rather the fully qualified domain name of your elasticsearch server.
1. Download and extract [http://download.elasticsearch.org/kibana/releases/kibana-latest.zip](http://download.elasticsearch.org/kibana/releases/kibana-latest.zip) to your webserver.
2. Edit config.js in your deployed directory to point to your elasticsearch server. This should __not be
http://localhost:9200__, but rather the fully qualified domain name of your elasticsearch server.
The url entered here _must be reachable_ by your browser.
3. Point your browser at your installation. If you're using Logstash with the default indexing
configuration the included Kibana logstash interface should work nicely.
3. Point your browser at your installation. If you're using Logstash with the default indexing
configuration the included Kibana logstash interface should work nicely.
### FAQ
__Q__: Why doesnt it work? I have http://localhost:9200 in my config.js, my webserver and elasticsearch
server are on the same machine
server are on the same machine
__A__: Kibana 3 does not work like previous versions of Kibana. To ease deployment, the server side
component has been eliminated. Thus __the browser connects directly to Elasticsearch__. The default
config.js setup works for the webserver+Elasticsearch on the same machine scenario. Do not set it
to http://localhost:9200 unless your browser and elasticsearch are on the same machine
__Q__: How do I secure this? I don't want to leave 9200 open.
__A__: A simple nginx virtual host and proxy configuration can be found in the sample/nginx.conf
__Q__: How do I secure this? I don't want to leave 9200 open.
__A__: A simple nginx virtual host and proxy configuration can be found in the sample/nginx.conf
### Support

19
dist/app/app.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
require.config({baseUrl:"app",urlArgs:"r=2534463",paths:{config:"../config",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:"../vendor/jquery/jquery-1.8.0","extend-jquery":"components/extend-jquery","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:{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"]}});

View File

@ -1,41 +0,0 @@
{
"title": "",
"services": {
"query": {
"idQueue": [
1,
2,
3,
4
],
"list": {
"0": {
"query": "*",
"alias": "",
"color": "#7EB26D",
"id": 0
}
},
"ids": [
0
]
},
"filter": {
"idQueue": [
0,
1,
2
],
"list": {},
"ids": []
}
},
"rows": [
],
"editable": true,
"index": {
"interval": "none",
"pattern": "[logstash-]YYYY.MM.DD",
"default": "NOT_CONFIGURED"
}
}

View File

@ -1,102 +0,0 @@
{
"title": "Introduction",
"services": {
"query": {
"idQueue": [
1,
2,
3,
4
],
"list": {
"0": {
"query": "*",
"alias": "",
"color": "#7EB26D",
"id": 0
}
},
"ids": [
0
]
},
"filter": {
"idQueue": [
1,
2
],
"list": {
"0": {
"from": "2013-07-27T22:08:06.800Z",
"to": "2013-07-27T23:08:06.801Z",
"field": "@timestamp",
"type": "time",
"mandate": "must",
"active": true,
"alias": "",
"id": 0
}
},
"ids": [
0
]
}
},
"rows": [
{
"title": "Intro",
"height": "450px",
"editable": true,
"collapse": false,
"collapsable": false,
"panels": [
{
"error": false,
"span": 4,
"editable": true,
"group": [
"default"
],
"type": "text",
"mode": "markdown",
"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"
},
{
"error": false,
"span": 1,
"editable": false,
"group": [
"default"
],
"type": "text",
"mode": "markdown",
"content": "",
"style": {},
"status": "Stable"
},
{
"error": false,
"span": 7,
"editable": true,
"group": [
"default"
],
"type": "text",
"mode": "markdown",
"content": "### Welcome to Kibana. \nGlad you could make it. Happy to have you here! Lets get started, shall we?\n##### Requirements\n* **A good browser.** \n The latest version of Chrome or Firefox is recommended. Safari (latest version) and Internet Explorer 9 and above are also supported.\n* **A webserver.** \n Just somewhere to host the HTML and Javascript. Basically any webserver will work.\n* **Elasticsearch** \n 0.20.5 or above. Kibana will soon move to requiring Elasticsearch 0.90 or above, so upgrading is recommended.\n\n##### Configuration\nIf Kibana and Elasticsearch are on the same host, and you're using the default Elasticsearch port, then you're all set. Kibana is configured to use that setup by default! \n\nIf not, you need to edit *config.js* and set the *elasticsearch* parameter with the URL (including port, probably 9200) of your Elasticsearch server. The host part should be the entire, fully qualified domain name, or IP, **not localhost**.\n#### Are you a Logstash User?\n+ **YES** - Great! We have a prebuilt dashboard: [(Logstash Dashboard)](index.html#/dashboard/file/logstash.json). See the note to the right about making it your global default \n\n+ **NO** - Hey, no problem, you just have a bit of setup to do. You have a few choices: \n\n 1. [Sample Dashboard](index.html#/dashboard/file/guided.json) *I don't have much data yet, please extract some basics for me* \n 2. [Unconfigured Dashboard](index.html#/dashboard/file/noted.json) *I have a lot of data and I don't want Kibana to query it at once*\n 3. [Blank Dashboard](index.html#/dashboard/file/blank.json) *I'm comfortable figuring it out on my own*",
"style": {},
"status": "Stable"
}
]
}
],
"editable": true,
"index": {
"interval": "none",
"pattern": "[logstash-]YYYY.MM.DD",
"default": "_all"
}
}

View File

@ -1,246 +0,0 @@
{
"title": "Your Basic Dashboard",
"services": {
"query": {
"idQueue": [
1,
2,
3,
4
],
"list": {
"0": {
"query": "*",
"alias": "",
"color": "#7EB26D",
"id": 0
}
},
"ids": [
0
]
},
"filter": {
"idQueue": [
0,
1,
2
],
"list": {},
"ids": []
}
},
"rows": [
{
"title": "Options",
"height": "50px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 5,
"editable": true,
"group": [
"default"
],
"type": "text",
"status": "Stable",
"mode": "markdown",
"content": "If you have a field with a timestamp in it, you might want to add a 'timepicker' panel here. Click the cog icon over to the left to do so. You can also remove these information text panels there",
"style": {},
"title": "Have a timestamp somewhere?"
}
]
},
{
"title": "Query",
"height": "50px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 5,
"editable": true,
"group": [
"default"
],
"type": "query",
"label": "Search",
"history": [
"*"
],
"remember": 10,
"pinned": true,
"query": "*"
},
{
"error": false,
"span": 7,
"editable": true,
"group": [
"default"
],
"type": "text",
"status": "Stable",
"mode": "markdown",
"content": "#### Filtering\nSee the small *Filters* text to the left below? Click it to expand the filters row. Right now there are none. click on one of the icons in the document types list to filter down to only that document type",
"style": {}
}
]
},
{
"title": "Filters",
"height": "50px",
"editable": true,
"collapse": true,
"collapsable": true,
"panels": [
{
"error": false,
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "filtering"
}
]
},
{
"title": "Graph",
"height": "250px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 3,
"editable": true,
"group": [
"default"
],
"type": "terms",
"queries": {
"mode": "all",
"ids": [
0
]
},
"field": "_type",
"exclude": [],
"missing": true,
"other": true,
"size": 100,
"order": "count",
"style": {
"font-size": "10pt"
},
"donut": false,
"tilt": false,
"labels": true,
"arrangement": "horizontal",
"chart": "pie",
"counter_pos": "none",
"title": "Document types"
},
{
"error": false,
"span": 3,
"editable": true,
"group": [
"default"
],
"type": "terms",
"queries": {
"mode": "all",
"ids": [
0
]
},
"field": "_type",
"exclude": [],
"missing": true,
"other": true,
"size": 10,
"order": "count",
"style": {
"font-size": "10pt"
},
"donut": false,
"tilt": false,
"labels": true,
"arrangement": "horizontal",
"chart": "table",
"counter_pos": "above"
},
{
"error": false,
"span": 6,
"editable": true,
"group": [
"default"
],
"type": "text",
"status": "Stable",
"mode": "markdown",
"content": "### The most generic dashboard ever\nIt's the best I can do without knowing much about your data! I've tried to pick some sane defaults for you. The two *terms* panels to the left of this *text* panel show a breakdown of your document type. \n\nKibana is currently configured to point at the special Elasticsearch *_all* index. You can change that by clicking on the cog icon in the title bar. You can also add rows from that dialog. You can edit individual panels by click on the link that appears in their top right when yuo mouse over them\n\nThe *table* panel below has attempted to list your fields to the left, select a few to view them in the table. To add more panels, of different types, click the cog on the row label to the far left",
"style": {}
}
]
},
{
"title": "Events",
"height": "650px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "table",
"size": 100,
"pages": 5,
"offset": 0,
"sort": [
"_id",
"desc"
],
"style": {
"font-size": "9pt"
},
"overflow": "min-height",
"fields": [],
"highlight": [],
"sortable": true,
"header": true,
"paging": true,
"spyable": true,
"queries": {
"mode": "all",
"ids": [
0
]
},
"field_list": true,
"status": "Stable"
}
]
}
],
"editable": true,
"index": {
"interval": "none",
"pattern": "[logstash-]YYYY.MM.DD",
"default": "_all"
}
}

View File

@ -1,172 +0,0 @@
/* global _, kbn */
/*
* Complex scripted Logstash dashboard
* This script generates a dashboard object that Kibana can load. It also takes a number of user
* supplied URL parameters, none are required:
*
* index :: Which index to search? If this is specified, interval is set to 'none'
* pattern :: Does nothing if index is specified. Set a timestamped index pattern. Default: [logstash-]YYYY.MM.DD
* interval :: Sets the index interval (eg: day,week,month,year), Default: day
*
* split :: The character to split the queries on Default: ','
* query :: By default, a comma seperated list of queries to run. Default: *
*
* from :: Search this amount of time back, eg 15m, 1h, 2d. Default: 15m
* timefield :: The field containing the time to filter on, Default: @timestamp
*
* fields :: comma seperated list of fields to show in the table
* sort :: comma seperated field to sort on, and direction, eg sort=@timestamp,desc
*
*/
// Setup some variables
var dashboard, queries, _d_timespan;
// All url parameters are available via the ARGS object
var ARGS;
// Set a default timespan if one isn't specified
_d_timespan = '1h';
// Intialize a skeleton with nothing but a rows array and service object
dashboard = {
rows : [],
services : {}
};
// Set a title
dashboard.title = 'Logstash Search';
// Allow the user to set the index, if they dont, fall back to logstash.
if(!_.isUndefined(ARGS.index)) {
dashboard.index = {
default: ARGS.index,
interval: 'none'
};
} else {
// Don't fail to default
dashboard.failover = false;
dashboard.index = {
default: ARGS.index||'ADD_A_TIME_FILTER',
pattern: ARGS.pattern||'[logstash-]YYYY.MM.DD',
interval: ARGS.interval||'day'
};
}
// In this dashboard we let users pass queries as comma seperated list to the query parameter.
// Or they can specify a split character using the split aparameter
// If query is defined, split it into a list of query objects
// NOTE: ids must be integers, hence the parseInt()s
if(!_.isUndefined(ARGS.query)) {
queries = _.object(_.map(ARGS.query.split(ARGS.split||','), function(v,k) {
return [k,{
query: v,
id: parseInt(k,10),
alias: v
}];
}));
} else {
// No queries passed? Initialize a single query to match everything
queries = {
0: {
query: '*',
id: 0
}
};
}
// Now populate the query service with our objects
dashboard.services.query = {
list : queries,
ids : _.map(_.keys(queries),function(v){return parseInt(v,10);})
};
// Lets also add a default time filter, the value of which can be specified by the user
// This isn't strictly needed, but it gets rid of the info alert about the missing time filter
dashboard.services.filter = {
list: {
0: {
from: kbn.time_ago(ARGS.from||_d_timespan),
to: new Date(),
field: ARGS.timefield||"@timestamp",
type: "time",
active: true,
id: 0
}
},
ids: [0]
};
// Ok, lets make some rows. The Filters row is collapsed by default
dashboard.rows = [
{
title: "Options",
height: "30px"
},
{
title: "Query",
height: "30px"
},
{
title: "Filters",
height: "100px",
collapse: true
},
{
title: "Chart",
height: "300px"
},
{
title: "Events",
height: "400px"
}
];
// Setup some panels. A query panel and a filter panel on the same row
dashboard.rows[0].panels = [
{
type: 'timepicker',
span: 6,
timespan: ARGS.from||_d_timespan
}
];
// Add a filtering panel to the 3rd row
dashboard.rows[1].panels = [
{
type: 'query'
}
];
// Add a filtering panel to the 3rd row
dashboard.rows[2].panels = [
{
type: 'filtering'
}
];
// And a histogram that allows the user to specify the interval and time field
dashboard.rows[3].panels = [
{
type: 'histogram',
time_field: ARGS.timefield||"@timestamp",
auto_int: true
}
];
// And a table row where you can specify field and sort order
dashboard.rows[4].panels = [
{
type: 'table',
fields: !_.isUndefined(ARGS.fields) ? ARGS.fields.split(',') : [],
sort: !_.isUndefined(ARGS.sort) ? ARGS.sort.split(',') : [ARGS.timefield||'@timestamp','desc'],
overflow: 'expand'
}
];
// Now return the object and we're good!
return dashboard;

View File

@ -1,217 +0,0 @@
{
"title": "Logstash Search",
"services": {
"query": {
"idQueue": [
1
],
"list": {
"0": {
"query": "{{ARGS.query || '*'}}",
"alias": "",
"color": "#7EB26D",
"id": 0
}
},
"ids": [
0
]
},
"filter": {
"idQueue": [
1
],
"list": {
"0": {
"from": "2013-07-30T18:58:13.977Z",
"to": "2013-07-30T19:58:13.977Z",
"field": "@timestamp",
"type": "time",
"mandate": "must",
"active": true,
"alias": "",
"id": 0
}
},
"ids": [
0
]
}
},
"rows": [
{
"title": "Options",
"height": "50px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": "",
"span": 6,
"editable": true,
"group": [
"default"
],
"type": "timepicker",
"mode": "relative",
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
],
"timespan": "{{ARGS.from || '1h'}}",
"timefield": "@timestamp",
"timeformat": "",
"refresh": {
"enable": false,
"interval": 30,
"min": 3
},
"filter_id": 0,
"status": "Stable"
}
]
},
{
"title": "Query",
"height": "50px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "query",
"label": "Search",
"history": [],
"remember": 10,
"pinned": true,
"query": "*"
}
]
},
{
"title": "Filters",
"height": "50px",
"editable": true,
"collapse": true,
"collapsable": true,
"panels": [
{
"error": false,
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "filtering"
}
]
},
{
"title": "Graph",
"height": "350px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "histogram",
"mode": "count",
"time_field": "@timestamp",
"value_field": null,
"auto_int": true,
"resolution": 100,
"interval": "30s",
"fill": 3,
"linewidth": 3,
"timezone": "browser",
"spyable": true,
"zoomlinks": true,
"bars": true,
"stack": true,
"points": false,
"lines": false,
"legend": true,
"x-axis": true,
"y-axis": true,
"percentage": false,
"interactive": true,
"queries": {
"mode": "all",
"ids": [
0
]
},
"title": "Events over time"
}
]
},
{
"title": "Events",
"height": "350px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "table",
"size": 100,
"pages": 5,
"offset": 0,
"sort": [
"@timestamp",
"desc"
],
"style": {
"font-size": "9pt"
},
"overflow": "min-height",
"fields": [],
"highlight": [],
"sortable": true,
"header": true,
"paging": true,
"spyable": true,
"queries": {
"mode": "all",
"ids": [
0
]
},
"field_list": true,
"status": "Stable"
}
]
}
],
"editable": true,
"index": {
"interval": "day",
"pattern": "[logstash-]YYYY.MM.DD",
"default": "NO_TIME_FILTER_OR_INDEX_PATTERN_NOT_MATCHED"
}
}

View File

@ -1,178 +0,0 @@
{
"title": "Your Basic Dashboard",
"services": {
"query": {
"idQueue": [
1,
2,
3,
4
],
"list": {
"0": {
"query": "*",
"alias": "",
"color": "#7EB26D",
"id": 0
}
},
"ids": [
0
]
},
"filter": {
"idQueue": [
0,
1,
2
],
"list": {},
"ids": []
}
},
"rows": [
{
"title": "Options",
"height": "50px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 5,
"editable": true,
"group": [
"default"
],
"type": "text",
"status": "Stable",
"mode": "markdown",
"content": "If you have a field with a timestamp in it, you might want to add a 'timepicker' panel here. Click the cog icon over to the left to do so. You can also remove these information text panels there",
"style": {},
"title": "Have a timestamp somewhere?"
}
]
},
{
"title": "Query",
"height": "50px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "query",
"label": "Search",
"history": [
"*"
],
"remember": 10,
"pinned": true,
"query": "*"
}
]
},
{
"title": "Filters",
"height": "50px",
"editable": true,
"collapse": true,
"collapsable": true,
"panels": [
{
"error": false,
"span": 3,
"editable": true,
"group": [
"default"
],
"type": "text",
"status": "Stable",
"mode": "markdown",
"content": "You found the filter row! This row has a 'filtering' panel in it that lists any active filters. You usually want one of these on any dashboard.",
"style": {}
},
{
"error": false,
"span": 9,
"editable": true,
"group": [
"default"
],
"type": "filtering"
}
]
},
{
"title": "Graph",
"height": "250px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 4,
"editable": true,
"group": [
"default"
],
"type": "text",
"status": "Stable",
"mode": "markdown",
"content": "See the small Filters text above this? Click it to expand the filters row. Right now there are none, but if you were to add a Table panel, you could click on event fields to drill down and add some. Or if you had timestamped data and used a time picker, your time filter would appear there",
"style": {},
"title": "Filtering"
},
{
"error": false,
"span": 8,
"editable": true,
"group": [
"default"
],
"type": "text",
"status": "Stable",
"mode": "markdown",
"content": "### Start here\nThis dashboard doesn't run any queries, but it's the best I can do without knowing much about your data!\n\n##### Kibana is currently configured to point at the special Elasticsearch *_all* index. You can change that by clicking on the cog icon in the title bar of this dashboard\nIf you have several indices and a lot of data, you should probably do that before you add any new panels. You can also add rows from that dialog. You can edit individual panels by click on the link that appears in their top right when you mouse over them",
"style": {}
}
]
},
{
"title": "Table",
"height": "650px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"error": false,
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "text",
"status": "Stable",
"mode": "markdown",
"content": "## A good place for a table\nThis is a good place for a table panel. Table panels present your data in a tabular format and allow you pick the fields you want to see, sort on them, and drill down.",
"style": {}
}
]
}
],
"editable": true,
"index": {
"interval": "none",
"pattern": "[logstash-]YYYY.MM.DD",
"default": "_all"
}
}

View File

@ -1 +0,0 @@
<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>

View File

@ -1,3 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.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}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.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}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<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>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/column/module",["angular","app","underscore","config"],function(a,b,c,d){var e=a.module("kibana.panels.column",[]);b.useModule(e),e.controller("column",["$scope","$rootScope","$timeout",function(a,b,d){a.panelMeta={status:"Stable",description:"A pseudo panel that lets you add other panels to be arranged in a column withdefined heights."};var e={panels:[]};c.defaults(a.panel,e),a.init=function(){a.reset_panel()},a.toggle_row=function(b){b.collapse=b.collapse?!1:!0,b.collapse||d(function(){a.send_render()})},a.send_render=function(){a.$broadcast("render")},a.add_panel=function(b){a.panel.panels.push(b)},a.reset_panel=function(b){a.new_panel={loading:!1,error:!1,sizeable:!1,span:12,height:"150px",editable:!0,type:b}}}]),e.directive("columnEdit",["$compile","$timeout",function(b,d){return{scope:{new_panel:"=panel",row:"=",config:"=",dashboards:"=",type:"=type"},link:function(e,f){e.$on("render",function(){d(function(){e.panel=e.new_panel;var d="<div ng-include src=\"partial('panelgeneral')\"></div>";c.isUndefined(e.type)||""===e.type||(d=d+"<div ng-include src=\"'app/panels/"+e.type+"/editor.html'\"></div>"),f.html(b(a.element(d))(e))})})}}}]),e.filter("withoutColumn",function(){return function(){return c.without(d.panel_names,"column")}})});

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/dashcontrol/module",["angular","app","underscore"],function(a,b,c){var d=a.module("kibana.panels.dashcontrol",[]);b.useModule(d),d.controller("dashcontrol",["$scope","$http","timer","dashboard","alertSrv",function(a,b,d,e,f){a.panelMeta={status:"Deprecated",description:"This panel has been moved to the navigation bar. See the dashboard setting editor to configure it."},a.panel=a.panel||{};var g={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"};c.defaults(a.panel,g),a.init=function(){a.gist_pattern=/(^\d{5,}$)|(^[a-z0-9]{10,}$)|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/,a.gist={},a.elasticsearch={}},a.set_default=function(){e.set_default()?f.set("Local Default Set",e.current.title+" has been set as your local default","success",5e3):f.set("Incompatible Browser","Sorry, your browser is too old for this feature","error",5e3)},a.purge_default=function(){e.purge_default()?f.set("Local Default Clear","Your local default dashboard has been cleared","success",5e3):f.set("Incompatible Browser","Sorry, your browser is too old for this feature","error",5e3)},a.elasticsearch_save=function(b,d){e.elasticsearch_save(b,a.elasticsearch.title||e.current.title,a.panel.ttl_enable?d:!1).then(function(d){c.isUndefined(d._id)?f.set("Save failed","Dashboard could not be saved to Elasticsearch","error",5e3):(f.set("Dashboard Saved",'This dashboard has been saved to Elasticsearch as "'+d._id+'"',"success",5e3),"temp"===b&&(a.share=e.share_link(e.current.title,"temp",d._id)))})},a.elasticsearch_delete=function(b){e.elasticsearch_delete(b).then(function(d){if(c.isUndefined(d))f.set("Dashboard Not Deleted","An error occurred deleting the dashboard","error",5e3);else if(d.found){f.set("Dashboard Deleted",b+" has been deleted","success",5e3);var e=c.where(a.elasticsearch.dashboards,{_id:b})[0];a.elasticsearch.dashboards=c.without(a.elasticsearch.dashboards,e)}else f.set("Dashboard Not Found","Could not find "+b+" in Elasticsearch","warning",5e3)})},a.elasticsearch_dblist=function(b){e.elasticsearch_list(b,a.panel.elasticsearch_size).then(function(b){c.isUndefined(b.hits)||(a.panel.error=!1,a.hits=b.hits.total,a.elasticsearch.dashboards=b.hits.hits)})},a.save_gist=function(){e.save_gist(a.gist.title).then(function(b){c.isUndefined(b)?f.set("Save failed","Gist could not be saved","error",5e3):(a.gist.last=b,f.set("Gist saved",'You will be able to access your exported dashboard file at <a href="'+b+'">'+b+"</a> in a moment","success"))})},a.gist_dblist=function(b){e.gist_list(b).then(function(b){b&&b.length>0?a.gist.files=b:f.set("Gist Failed","Could not retrieve dashboard list from gist","error",5e3)})}}]),d.directive("dashUpload",["timer","dashboard","alertSrv",function(a,b,c){return{restrict:"A",link:function(a){function d(c){for(var d,e=c.target.files,f=function(){return function(c){b.dash_load(JSON.parse(c.target.result)),a.$apply()}},g=0;d=e[g];g++){var h=new FileReader;h.onload=f(d),h.readAsText(d)}}window.File&&window.FileReader&&window.FileList&&window.Blob?document.getElementById("dashupload").addEventListener("change",d,!1):c.set("Oops","Sorry, the HTML5 File APIs are not fully supported in this browser.","error")}}}]),d.filter("gistid",function(){var a=/(\d{5,})|([a-z0-9]{10,})|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/;return function(b){if(!c.isUndefined(b)){var d=b.match(a);if(!c.isNull(d)&&!c.isUndefined(d))return d[0].replace(/.*\//,"")}}})});

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1,16 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/derivequeries/module",["angular","app","underscore"],function(a,b,c){var d=a.module("kibana.panels.derivequeries",[]);b.useModule(d),d.controller("derivequeries",["$scope","$rootScope","querySrv","fields","dashboard","filterSrv",function(b,d,e,f,g,h){b.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 i={loading:!1,label:"Search",query:"*",ids:[],field:"_type",fields:[],spyable:!0,rest:!1,size:5,mode:"terms only",exclude:[],history:[],remember:10};c.defaults(b.panel,i),b.init=function(){b.editing=!1,b.panel.fields=f.list},b.get_data=function(){if(j(b.panel.query),0!==g.indices.length){b.panelMeta.loading=!0;var a=b.ejs.Request().indices(g.indices);a=a.facet(b.ejs.TermsFacet("query").field(b.panel.field).size(b.panel.size).exclude(b.panel.exclude).facetFilter(b.ejs.QueryFilter(b.ejs.FilteredQuery(b.ejs.QueryStringQuery(b.panel.query||"*"),h.getBoolFilter(h.ids))))).size(0),b.populate_modal(a);var d=a.doSearch();d.then(function(a){b.panelMeta.loading=!1;var d;""===b.panel.query||"terms only"===b.panel.mode?d="":"AND"===b.panel.mode?d=" AND ("+b.panel.query+")":"OR"===b.panel.mode&&(d=" OR ("+b.panel.query+")");var f=[],h=a.facets.query.terms,i=[];if(c.each(h,function(a){var c=b.panel.field+':"'+a.term+'"'+d,g=e.findQuery(c);g?f.push(g.id):f.push(e.set({alias:a.term,query:c})),i.push("NOT ("+c+")")}),b.panel.rest){var j=i.join(" AND "),k=e.findQuery(j);k?f.push(k.id):f.push(e.set({alias:"other",query:j}))}c.each(c.difference(b.panel.ids,f),function(a){e.remove(a)}),b.panel.ids=f,g.refresh()})}},b.set_refresh=function(a){b.refresh=a},b.close_edit=function(){b.refresh&&b.get_data(),b.refresh=!1},b.populate_modal=function(c){b.inspector=a.toJson(JSON.parse(c.toString()),!0)};var j=function(a){if(a=c.isArray(a)?a:[a],b.panel.remember>0){b.panel.history=c.union(a.reverse(),b.panel.history);var d=b.panel.history.length;d>b.panel.remember&&(b.panel.history=b.panel.history.slice(0,b.panel.remember))}}}])});

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<div ng-controller="fields" ng-init="init()"><h4>The 'fields' panel is deprecated.</h4>The table panel now integrates a field selector.</div>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/fields/module",["angular","app","underscore"],function(a,b,c){var d=a.module("kibana.panels.fields",[]);b.useModule(d),d.controller("fields",["$scope",function(a){a.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 b={style:{},arrange:"vertical",micropanel_position:"right"};c.defaults(a.panel,b),a.init=function(){}}])});

View File

@ -1 +0,0 @@
<div><div class="row-fluid"><div class="span12">No options here</div></div></div>

View File

@ -1,3 +0,0 @@
<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>

View File

@ -1,40 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/filtering/module",["angular","app","underscore"],function(a,b,c){var d=a.module("kibana.panels.filtering",[]);b.useModule(d),d.controller("filtering",["$scope","filterSrv","$rootScope","dashboard",function(a,b,d,e){a.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 f={};c.defaults(a.panel,f),a.init=function(){a.filterSrv=b},a.remove=function(a){b.remove(a),e.refresh()},a.toggle=function(a){b.list[a].active=!b.list[a].active,e.refresh()},a.refresh=function(){d.$broadcast("refresh")},a.render=function(){d.$broadcast("render")},a.show_key=function(a){return!c.contains(["type","id","alias","mandate","active","editing"],a)},a.isEditable=function(a){var b=["time"];return c.contains(b,a.type)?!1:!0}}])});

View File

@ -1 +0,0 @@
<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>

View File

@ -1,16 +0,0 @@
<div ng-controller="histogram" ng-init="init()" style="min-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>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/hits/module",["angular","app","underscore","jquery","kbn","jquery.flot","jquery.flot.pie"],function(a,b,c,d,e){var f=a.module("kibana.panels.hits",[]);b.useModule(f),f.controller("hits",["$scope","querySrv","dashboard","filterSrv",function(b,d,e,f){b.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 g={queries:{mode:"all",ids:[]},style:{"font-size":"10pt"},arrangement:"horizontal",chart:"bar",counter_pos:"above",donut:!1,tilt:!1,labels:!0,spyable:!0};c.defaults(b.panel,g),b.init=function(){b.hits=0,b.$on("refresh",function(){b.get_data()}),b.get_data()},b.get_data=function(g,h){if(delete b.panel.error,b.panelMeta.loading=!0,0!==e.indices.length){var i=c.isUndefined(g)?0:g,j=b.ejs.Request().indices(e.indices[i]);b.panel.queries.ids=d.idsByMode(b.panel.queries),c.each(b.panel.queries.ids,function(a){var c=b.ejs.FilteredQuery(d.getEjsObj(a),f.getBoolFilter(f.ids));j=j.facet(b.ejs.QueryFacet(a).query(c)).size(0)}),b.inspector=a.toJson(JSON.parse(j.toString()),!0);var k=j.doSearch();k.then(function(a){if(b.panelMeta.loading=!1,0===i&&(b.hits=0,b.data=[],h=b.query_id=(new Date).getTime()),!c.isUndefined(a.error))return b.panel.error=b.parse_error(a.error),void 0;var f=c.map(c.keys(a.facets),function(a){return parseInt(a,10)});if(b.query_id===h&&c.intersection(f,b.panel.queries.ids).length===b.panel.queries.ids.length){var g=0;c.each(b.panel.queries.ids,function(e){var f=a.facets[e],h=c.isUndefined(b.data[g])||0===i?f.count:b.data[g].hits+f.count;b.hits+=f.count,b.data[g]={info:d.list[e],id:e,hits:h,data:[[g,h]]},g++}),b.$emit("render"),i<e.indices.length-1&&b.get_data(i+1,h)}})}},b.set_refresh=function(a){b.refresh=a},b.close_edit=function(){b.refresh&&b.get_data(),b.refresh=!1,b.$emit("render")}}]),f.directive("hitsChart",["querySrv",function(b){return{restrict:"A",link:function(f,g){function h(){g.css({height:f.panel.height||f.row.height});try{c.each(f.data,function(a){a.label=a.info.alias,a.color=a.info.color})}catch(a){return}try{"bar"===f.panel.chart&&(f.plot=d.plot(g,f.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:b.colors})),"pie"===f.panel.chart&&(f.plot=d.plot(g,f.data,{legend:{show:!1},series:{pie:{innerRadius:f.panel.donut?.4:0,tilt:f.panel.tilt?.45:1,radius:1,show:!0,combine:{color:"#999",label:"The Rest"},stroke:{width:0},label:{show:f.panel.labels,radius:2/3,formatter:function(a,b){return"<div ng-click=\"build_search(panel.query.field,'"+a+"')"+' "style="font-size:8pt;text-align:center;padding:2px;color:white;">'+a+"<br/>"+Math.round(b.percent)+"%</div>"},threshold:.1}}},grid:{hoverable:!0,clickable:!0},colors:b.colors}))}catch(a){g.text(a)}}f.$on("render",function(){h()}),a.element(window).bind("resize",function(){h()});var i=d("<div>");g.bind("plothover",function(a,b,c){if(c){var d="bar"===f.panel.chart?c.datapoint[1]:c.datapoint[1][0][1];i.html(e.query_color_dot(c.series.color,20)+" "+d.toFixed(0)).place_tt(b.pageX,b.pageY)}else i.remove()})}}}])});

View File

@ -1 +0,0 @@
<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>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,58 +0,0 @@
<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>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/pie/module",["angular","app","underscore","jquery","kbn","config"],function(a,b,c,d,e,f){var g=a.module("kibana.panels.pie",[]);b.useModule(g),g.controller("pie",["$scope","$rootScope","querySrv","dashboard","filterSrv",function(b,d,e,g,h){b.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 i={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};c.defaults(b.panel,i),b.init=function(){b.$on("refresh",function(){b.get_data()}),b.get_data()},b.set_mode=function(a){switch(a){case"terms":b.panel.query={field:"_all"};break;case"goal":b.panel.query={goal:100}}},b.set_refresh=function(a){b.refresh=a},b.close_edit=function(){b.refresh&&b.get_data(),b.refresh=!1,b.$emit("render")},b.get_data=function(){if(0!==g.indices.length){b.panelMeta.loading=!0;var a=b.ejs.Request().indices(g.indices);b.panel.queries.ids=e.idsByMode(b.panel.queries);var d=b.ejs.BoolQuery();c.each(b.panel.queries.ids,function(a){d=d.should(e.getEjsObj(a))});var f;"terms"===b.panel.mode?(a=a.facet(b.ejs.TermsFacet("pie").field(b.panel.query.field||b.panel.default_field).size(b.panel.size).exclude(b.panel.exclude).facetFilter(b.ejs.QueryFilter(b.ejs.FilteredQuery(d,h.getBoolFilter(h.ids))))).size(0),b.populate_modal(a),f=a.doSearch(),f.then(function(a){b.panelMeta.loading=!1,b.hits=a.hits.total,b.data=[];var d=0;c.each(a.facets.pie.terms,function(a){var c={label:a.term,data:a.count};b.data.push(),b.data.push(c),d+=1}),b.$emit("render")})):(a=a.query(d).filter(h.getBoolFilter(h.ids)).size(0),b.populate_modal(a),f=a.doSearch(),f.then(function(a){b.panelMeta.loading=!1;var c=a.hits.total,d=b.panel.query.goal-c;b.data=[{label:"Complete",data:c,color:"#BF6730"},{data:d,color:"#e2d0c4"}],b.$emit("render")}))}},b.populate_modal=function(c){b.modal={title:"Inspector",body:"<h5>Last Elasticsearch Query</h5><pre>curl -XGET "+f.elasticsearch+"/"+g.indices+"/_search?pretty -d'\n"+a.toJson(JSON.parse(c.toString()),!0)+"'</pre>"}}}]),g.directive("pie",["querySrv","filterSrv","dashboard",function(b,f,g){return{restrict:"A",link:function(h,i){function j(){i.css({height:h.panel.height||h.row.height});var a;a="goal"===h.panel.mode?{show:h.panel.labels,radius:0,formatter:function(a,b){var d=parseInt(h.row.height.replace("px",""),10)/8+String("px");return c.isUndefined(a)?"":'<div style="font-size:'+d+';font-weight:bold;text-align:center;padding:2px;color:#fff;">'+Math.round(b.percent)+"%</div>"}}:{show:h.panel.labels,radius:2/3,formatter:function(a,b){return'<div "style="font-size:8pt;text-align:center;padding:2px;color:white;">'+a+"<br/>"+Math.round(b.percent)+"%</div>"},threshold:.1};var e={series:{pie:{innerRadius:h.panel.donut?.45:0,tilt:h.panel.tilt?.45:1,radius:1,show:!0,combine:{color:"#999",label:"The Rest"},label:a,stroke:{width:0}}},grid:{backgroundColor:null,hoverable:!0,clickable:!0},legend:{show:!1},colors:b.colors};i.is(":visible")&&require(["vendor/jquery/jquery.flot.pie.js"],function(){h.legend=d.plot(i,h.data,e).getData(),h.$$phase||h.$apply()})}i.html('<center><img src="img/load_big.gif"></center>'),h.$on("render",function(){j()}),a.element(window).bind("resize",function(){j()}),i.bind("plotclick",function(a,b,c){c&&"terms"===h.panel.mode&&(f.set({type:"terms",field:h.panel.query.field,value:c.series.label}),g.refresh())});var k=d("<div>");i.bind("plothover",function(a,b,c){c?k.html([e.query_color_dot(c.series.color,15),c.series.label||"",parseFloat(c.series.percent).toFixed(1)+"%"].join(" ")).place_tt(b.pageX,b.pageY,{offset:10}):k.remove()})}}}])});

View File

@ -1 +0,0 @@
<div><div class="row-fluid"><div class="span12">No options here</div></div></div>

View File

@ -1,6 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("css",{load:function(a,b,c){function d(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("link");c.href=a,c.rel="stylesheet",c.type="text/css",b.appendChild(c)}d(requirejs.toUrl(a)),c(!0)},pluginBuilder:"../vendor/require/css-build"}),define("css-embed",function(){function a(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("style"),d=document.createTextNode(a);c.type="text/css",c.styleSheet?c.styleSheet.cssText=d.nodeValue:c.appendChild(d),b.appendChild(c)}return a}),define("css!panels/query/query.css",["css-embed"],function(a){return a(".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(a,b,c){var d=a.module("kibana.panels.query",[]);b.useModule(d),d.controller("query",["$scope","querySrv","$rootScope",function(a,b,d){a.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 e={label:"Search",query:"*",pinned:!0,history:[],remember:10};c.defaults(a.panel,e),a.querySrv=b,a.init=function(){},a.refresh=function(){f(c.pluck(a.querySrv.list,"query")),d.$broadcast("refresh")},a.render=function(){d.$broadcast("render")},a.toggle_pin=function(a){b.list[a].pin=b.list[a].pin?!1:!0};var f=function(b){if(a.panel.remember>0){a.panel.history=c.union(b.reverse(),a.panel.history);var d=a.panel.history.length;d>a.panel.remember&&(a.panel.history=a.panel.history.slice(0,a.panel.remember))}};a.init()}])});

View File

@ -1 +0,0 @@
.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}

View File

@ -1 +0,0 @@
<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>

View File

@ -1,3 +0,0 @@
<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>

View File

@ -1,5 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/table/module",["angular","app","underscore","kbn","moment"],function(a,b,c,d,e){var f=a.module("kibana.panels.table",[]);b.useModule(f),f.controller("table",["$rootScope","$scope","fields","querySrv","dashboard","filterSrv",function(b,e,f,g,h,i){e.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 j={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};c.defaults(e.panel,j),e.init=function(){e.Math=Math,e.$on("refresh",function(){e.get_data()}),e.fields=f,e.get_data()},e.percent=d.to_percent,e.toggle_micropanel=function(a){var b=c.pluck(e.data,"_source");e.micropanel={field:a,values:d.top_field_values(b,a,10),related:d.get_related_fields(b,a),count:c.countBy(b,function(b){return c.contains(c.keys(b),a)})["true"]}},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):e.panel.fields.push(a)},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=a.kibana||{},a.kibana.details=a.kibana.details?!1:e.without_kibana(a)},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),i.set({type:"field",field:b,query:g,mandate:f?"mustNot":"must"}),e.panel.offset=0,h.refresh()},e.fieldExists=function(a,b){i.set({type:"exists",field:a,mandate:b}),h.refresh()},e.get_data=function(a,b){if(e.panel.error=!1,0!==h.indices.length){e.panelMeta.loading=!0,e.panel.queries.ids=g.idsByMode(e.panel.queries);var f=c.isUndefined(a)?0:a;e.segment=f;var j=e.ejs.Request().indices(h.indices[f]),k=e.ejs.BoolQuery();c.each(e.panel.queries.ids,function(a){k=k.should(g.getEjsObj(a))}),j=j.query(e.ejs.FilteredQuery(k,i.getBoolFilter(i.ids))).highlight(e.ejs.Highlight(e.panel.highlight).fragmentSize(2147483647).preTags("@start-highlight@").postTags("@end-highlight@")).size(e.panel.size*e.panel.pages).sort(e.panel.sort[0],e.panel.sort[1]),e.populate_modal(j);var l=j.doSearch();l.then(function(a){return e.panelMeta.loading=!1,0===f&&(e.hits=0,e.data=[],b=e.query_id=(new Date).getTime()),c.isUndefined(a.error)?(e.query_id===b&&(e.data=e.data.concat(c.map(a.hits.hits,function(a){return{_source:d.flatten_json(a._source),highlight:d.flatten_json(a.highlight||{}),_type:a._type,_index:a._index,_id:a._id,_sort:a.sort}})),e.hits+=a.hits.total,e.data=c.sortBy(e.data,function(a){return 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(i.timeField(),e.panel.sort[0])||"desc"!==e.panel.sort[1])&&f+1<h.indices.length&&e.get_data(f+1,e.query_id)),void 0):(e.panel.error=e.parse_error(a.error),void 0)})}},e.populate_modal=function(b){e.inspector=a.toJson(JSON.parse(b.toString()),!0)},e.without_kibana=function(a){return{_source:a._source,highlight:a.highlight}},e.set_refresh=function(a){e.refresh=a},e.close_edit=function(){e.refresh&&e.get_data(),e.refresh=!1}}]),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("tableFieldFormat",["fields",function(a){return function(b,d,f,g){var h;return c.isUndefined(a.mapping[f._index])||c.isUndefined(a.mapping[f._index][f._type])||(h=a.mapping[f._index][f._type][d].type,"date"!==h||!g.panel.normTimes)?b:e(b).format("YYYY-MM-DD HH:mm:ss")}}])});

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/terms/module",["angular","app","underscore","jquery","kbn"],function(a,b,c,d,e){var f=a.module("kibana.panels.terms",[]);b.useModule(f),f.controller("terms",["$scope","querySrv","dashboard","filterSrv",function(b,d,e,f){b.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 g={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};c.defaults(b.panel,g),b.init=function(){b.hits=0,b.$on("refresh",function(){b.get_data()}),b.get_data()},b.get_data=function(){if(0!==e.indices.length){b.panelMeta.loading=!0;var g,h,i;g=b.ejs.Request().indices(e.indices),b.panel.queries.ids=d.idsByMode(b.panel.queries),i=b.ejs.BoolQuery(),c.each(b.panel.queries.ids,function(a){i=i.should(d.getEjsObj(a))}),g=g.facet(b.ejs.TermsFacet("terms").field(b.panel.field).size(b.panel.size).order(b.panel.order).exclude(b.panel.exclude).facetFilter(b.ejs.QueryFilter(b.ejs.FilteredQuery(i,f.getBoolFilter(f.ids))))).size(0),b.inspector=a.toJson(JSON.parse(g.toString()),!0),h=g.doSearch(),h.then(function(a){var d=0;b.panelMeta.loading=!1,b.hits=a.hits.total,b.data=[],c.each(a.facets.terms.terms,function(a){var c={label:a.term,data:[[d,a.count]],actions:!0};b.data.push(c),d+=1}),b.data.push({label:"Missing field",data:[[d,a.facets.terms.missing]],meta:"missing",color:"#aaa",opacity:0}),b.data.push({label:"Other values",data:[[d+1,a.facets.terms.other]],meta:"other",color:"#444"}),b.$emit("render")})}},b.build_search=function(a,d){if(c.isUndefined(a.meta))f.set({type:"terms",field:b.panel.field,value:a.label,mandate:d?"mustNot":"must"});else{if("missing"!==a.meta)return;f.set({type:"exists",field:b.panel.field,mandate:d?"must":"mustNot"})}e.refresh()},b.set_refresh=function(a){b.refresh=a},b.close_edit=function(){b.refresh&&b.get_data(),b.refresh=!1,b.$emit("render")},b.showMeta=function(a){return c.isUndefined(a.meta)?!0:"other"!==a.meta||b.panel.other?"missing"!==a.meta||b.panel.missing?!0:!1:!1}}]),f.directive("termsChart",["querySrv",function(b){return{restrict:"A",link:function(f,g){function h(){var a,e;g.css({height:f.panel.height||f.row.height}),e=c.clone(f.data),e=f.panel.missing?e:c.without(e,c.findWhere(e,{meta:"missing"})),e=f.panel.other?e:c.without(e,c.findWhere(e,{meta:"other"})),require(["jquery.flot.pie"],function(){try{if("bar"===f.panel.chart&&(a=d.plot(g,e,{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:b.colors})),"pie"===f.panel.chart){var c=function(a,b){return"<div ng-click=\"build_search(panel.field,'"+a+"')"+' "style="font-size:8pt;text-align:center;padding:2px;color:white;">'+a+"<br/>"+Math.round(b.percent)+"%</div>"};a=d.plot(g,e,{legend:{show:!1},series:{pie:{innerRadius:f.panel.donut?.4:0,tilt:f.panel.tilt?.45:1,radius:1,show:!0,combine:{color:"#999",label:"The Rest"},stroke:{width:0},label:{show:f.panel.labels,radius:2/3,formatter:c,threshold:.1}}},grid:{hoverable:!0,clickable:!0},colors:b.colors})}g.is(":visible")&&setTimeout(function(){f.legend=a.getData(),f.$$phase||f.$apply()})}catch(h){g.text(h)}})}f.$on("render",function(){h()}),a.element(window).bind("resize",function(){h()}),g.bind("plotclick",function(a,b,c){c&&f.build_search(f.data[c.seriesIndex])});var i=d("<div>");g.bind("plothover",function(a,b,c){if(c){var d="bar"===f.panel.chart?c.datapoint[1]:c.datapoint[1][0][1];i.html(e.query_color_dot(c.series.color,20)+" "+c.series.label+" ("+d.toFixed(0)+")").place_tt(b.pageX,b.pageY)}else i.remove()})}}}])});

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<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>

View File

@ -1,3 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/timepicker/module",["angular","app","underscore","moment","kbn"],function(a,b,c,d,e){var f=a.module("kibana.panels.timepicker",[]);b.useModule(f),f.controller("timepicker",["$scope","$rootScope","$timeout","timer","$http","dashboard","filterSrv",function(a,b,f,g,h,i,j){function k(b){return b.type="time",j.removeByType("time"),a.panel.filter_id=j.set(l(b)),a.panel.filter_id}function l(a){return a=c.clone(a),a.from=a.from.toDate(),a.to=a.to.toDate(),a}function m(b,c){a.timepicker={from:{time:b.format("HH:mm:ss"),date:b.format("MM/DD/YYYY")},to:{time:c.format("HH:mm:ss"),date:c.format("MM/DD/YYYY")}}}a.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 n={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}};c.defaults(a.panel,n),a.init=function(){switch(a.refresh_interval=a.panel.refresh.interval,a.filterSrv=j,a.panel.mode){case"absolute":a.time={from:d(a.panel.time.from,"MM/DD/YYYY HH:mm:ss")||d(e.time_ago(a.panel.timespan)),to:d(a.panel.time.to,"MM/DD/YYYY HH:mm:ss")||d()};break;case"since":a.time={from:d(a.panel.time.from,"MM/DD/YYYY HH:mm:ss")||d(e.time_ago(a.panel.timespan)),to:d()};break;case"relative":a.time={from:d(e.time_ago(a.panel.timespan)),to:d()}}a.time.field=a.panel.timefield,m(a.time.from,a.time.to),o(),"absolute"!==a.panel.mode&&k(a.time),i.refresh(),a.panel.refresh.enable&&a.set_interval(a.panel.refresh.interval),a.$on("refresh",function(){if(j.idsByType("time").length>0){var b=j.timeRange("min");(0!==a.time.from.diff(d.utc(b.from),"seconds")||0!==a.time.to.diff(d.utc(b.to),"seconds"))&&(a.set_mode("absolute"),m(d(b.from),d(b.to)),a.time=a.time_calc(),o())}})},a.set_interval=function(b){if(a.panel.refresh.interval=b,c.isNumber(a.panel.refresh.interval)){if(a.panel.refresh.interval<a.panel.refresh.min)return a.panel.refresh.interval=a.panel.refresh.min,g.cancel(a.refresh_timer),void 0;g.cancel(a.refresh_timer),a.refresh()}else g.cancel(a.refresh_timer)},a.refresh=function(){a.panel.refresh.enable?(g.cancel(a.refresh_timer),a.refresh_timer=g.register(f(function(){a.refresh(),a.time_apply()},1e3*a.panel.refresh.interval))):g.cancel(a.refresh_timer)};var o=function(){"relative"!==a.panel.mode?a.panel.time={from:a.time.from.format("MM/DD/YYYY HH:mm:ss"),to:a.time.to.format("MM/DD/YYYY HH:mm:ss")}:delete a.panel.time};a.set_mode=function(b){a.panel.mode=b,a.panel.refresh.enable="absolute"===b?!1:a.panel.refresh.enable,o()},a.to_now=function(){a.timepicker.to={time:d().format("HH:mm:ss"),date:d().format("MM/DD/YYYY")}},a.set_timespan=function(b){a.panel.timespan=b,a.timepicker.from={time:d(e.time_ago(b)).format("HH:mm:ss"),date:d(e.time_ago(b)).format("MM/DD/YYYY")},a.time_apply()},a.close_edit=function(){a.time_apply()},a.time_calc=function(){var b,g;return c.isUndefined(a.timepicker)?(b="relative"===a.panel.mode?d(e.time_ago(a.panel.timespan)):a.time.from,g="absolute"!==a.panel.mode?d():a.time.to):(b="relative"===a.panel.mode?d(e.time_ago(a.panel.timespan)):d(d(a.timepicker.from.date).format("MM/DD/YYYY")+" "+a.timepicker.from.time,"MM/DD/YYYY HH:mm:ss"),g="absolute"!==a.panel.mode?d():d(d(a.timepicker.to.date).format("MM/DD/YYYY")+" "+a.timepicker.to.time,"MM/DD/YYYY HH:mm:ss")),b.valueOf()>=g.valueOf()&&(b=d(g.valueOf()-1e3)),f(function(){m(b,g)}),{from:b,to:g}},a.time_apply=function(){a.panel.error="",j.removeByType("time"),a.time=a.time_calc(),a.time.field=a.panel.timefield,o(),k(a.time),i.refresh()},a.$watch("panel.mode",a.time_apply)}])});

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1,4 +0,0 @@
/*! kibana - v3.0.0m3pre - 2013-09-16
* Copyright (c) 2013 Rashid Khan; Licensed Apache License */
define("panels/trends/module",["angular","app","underscore","kbn"],function(a,b,c,d){var e=a.module("kibana.panels.trends",[]);b.useModule(e),e.controller("trends",["$scope","kbnIndex","querySrv","dashboard","filterSrv",function(a,b,e,f,g){function h(a,b){return 0===a?null:100*(b-a)/a}a.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 i={queries:{mode:"all",ids:[]},style:{"font-size":"14pt"},ago:"1d",arrangement:"vertical"};c.defaults(a.panel,i),a.init=function(){a.hits=0,a.$on("refresh",function(){a.get_data()}),a.get_data()},a.get_data=function(h,i){if(delete a.panel.error,a.panelMeta.loading=!0,0!==f.indices.length){a.index=h>0?a.index:f.indices,a.panel.queries.ids=e.idsByMode(a.panel.queries);var k=c.uniq(c.pluck(g.getByType("time"),"field"));if(k.length>1)return a.panel.error="Time field must be consistent amongst time filters",void 0;if(0===k.length)return a.panel.error="A time filter must exist for this panel to function",void 0;k=k[0],a.time=g.timeRange("min"),a.old_time={from:new Date(a.time.from.getTime()-1e3*d.interval_to_seconds(a.panel.ago)),to:new Date(a.time.to.getTime()-1e3*d.interval_to_seconds(a.panel.ago))};var l=c.isUndefined(h)?0:h,m=a.ejs.Request(),n=c.difference(g.ids,g.idsByType("time"));c.each(a.panel.queries.ids,function(b){var c=a.ejs.FilteredQuery(e.getEjsObj(b),g.getBoolFilter(n).must(a.ejs.RangeFilter(k).from(a.time.from).to(a.time.to)));m=m.facet(a.ejs.QueryFacet(b).query(c)).size(0)}),c.each(a.panel.queries.ids,function(b){var c=a.ejs.FilteredQuery(e.getEjsObj(b),g.getBoolFilter(n).must(a.ejs.RangeFilter(k).from(a.old_time.from).to(a.old_time.to)));m=m.facet(a.ejs.QueryFacet("old_"+b).query(c)).size(0)}),0===l?b.indices(a.old_time.from,a.old_time.to,f.current.index.pattern,f.current.index.interval).then(function(b){a.index=c.union(b,a.index),m=m.indices(a.index[l]),j(m.doSearch(),l,i)}):j(m.indices(a.index[l]).doSearch(),l,i)}};var j=function(b,d,f){b.then(function(b){if(a.panelMeta.loading=!1,0===d&&(a.hits={},a.data=[],f=a.query_id=(new Date).getTime()),!c.isUndefined(b.error))return a.panel.error=a.parse_error(b.error),void 0;var g=c.map(c.keys(b.facets),function(a){return isNaN(a)?void 0:parseInt(a,10)});if(a.query_id===f&&c.intersection(g,a.panel.queries.ids).length===a.panel.queries.ids.length){var i=0;c.each(a.panel.queries.ids,function(f){var g=b.facets[f].count,j=b.facets["old_"+f].count,k={"new":c.isUndefined(a.data[i])||0===d?g:a.data[i].hits.new+g,old:c.isUndefined(a.data[i])||0===d?j:a.data[i].hits.old+j};a.hits.new+=g,a.hits.old+=j;var l=null==h(k.old,k.new)?"?":Math.round(100*h(k.old,k.new))/100;a.data[i]={info:e.list[f],hits:{"new":k.new,old:k.old},percent:l},i++}),a.$emit("render"),d<a.index.length-1?a.get_data(d+1,f):a.trends=a.data}})};a.set_refresh=function(b){a.refresh=b},a.close_edit=function(){a.refresh&&a.get_data(),a.refresh=!1,a.$emit("render")}}])});

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

View File

@ -1 +0,0 @@
<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>

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3>Last Elasticsearch Query</h3></div><div class="modal-body"><div><pre>curl -XGET '{{config.elasticsearch}}/{{dashboard.indices|stringify}}/_search?pretty' -d '{{inspector}}'
</pre></div></div><div class="modal-footer"><button type="button" class="btn btn-success" ng-click="dismiss()">Close</button></div>

View File

@ -1 +0,0 @@
<div style="margin-top:50px" ng-controller="dashcontrol"><strong>type:</strong>{{type}}<br><strong>id:</strong>{{id}}<br></div>

View File

@ -1 +0,0 @@
<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3>{{modal.title}}</h3></div><div class="modal-body"><div ng-bind-html="modal.body"></div></div><div class="modal-footer"><button type="button" class="btn btn-danger" ng-click="dismiss()">Close</button></div>

View File

@ -1 +0,0 @@
<div ng-include="'app/partials/panelgeneral.html'"></div><div ng-include="edit_path(panel.type)"></div><div ng-repeat="tab in panelMeta.editorTabs"><h4>{{tab.title}}</h4><div ng-include="tab.src"></div></div>

View File

@ -1 +0,0 @@
<div class="modal-body"><div class="pull-right editor-title">{{panel.type}} settings</div><div ng-model="editor.index" bs-tabs=""><div ng-repeat="tab in setEditorTabs(panelMeta)" data-title="{{tab}}"></div></div><div ng-show="editorTabs[editor.index] == 'General'"><div ng-include="" src="'app/partials/panelgeneral.html'"></div></div><div ng-show="editorTabs[editor.index] == 'Panel'"><div ng-include="" src="edit_path(panel.type)"></div></div><div ng-repeat="tab in panelMeta.editorTabs" ng-show="editorTabs[editor.index] == tab.title"><div ng-include="" src="tab.src"></div></div></div><div class="modal-footer"><button type="button" class="btn btn-danger" ng-click="editor.index=0;close_edit();dismiss()">Close</button></div>

View File

@ -1 +0,0 @@
<div class="row-fluid"><div class="span12"><strong>{{panelMeta.status}}</strong> // <span ng-bind-html="panelMeta.description"></span></div></div><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" ng-hide="panel.sizeable == false"><label class="small">Span</label><select class="input-mini" ng-model="panel.span" ng-options="f for f in [0,1,2,3,4,5,6,7,8,9,10,11,12]"></select></div><div class="span2"><label class="small">Editable</label><input type="checkbox" ng-model="panel.editable" ng-checked="panel.editable"></div><div class="span2" ng-show="!_.isUndefined(panel.spyable)"><label class="small">Spyable <i class="icon-question-sign" bs-tooltip="'Allow query reveal via <i class=icon-eye-open></i>'"></i></label><input type="checkbox" ng-model="panel.spyable" ng-checked="panel.spyable"></div></div>

View File

@ -1,9 +0,0 @@
<div class="row-fluid"><style>.querySelect .query {
margin-right: 5px;
}
.querySelect .selected {
border: 3px solid;
}
.querySelect .unselected {
border: 0px solid;
}</style><div class="span2" style="margin-left:0px"><label class="small">Queries</label><select class="input-small" ng-change="set_refresh(true);" ng-model="panel.queries.mode" ng-options="f for f in ['all','pinned','unpinned','selected']"></select></div><div class="span9 querySelect" ng-show="panel.queries.mode == 'selected'"><label class="small">Selected Queries</label><span ng-style="{'border-color': querySrv.list[id].color}" ng-class="{selected:_.contains(panel.queries.ids,id),unselected:!_.contains(panel.queries.ids,id)}" ng-repeat="id in querySrv.ids" ng-click="panel.queries.ids = _.toggleInOut(panel.queries.ids,id);set_refresh(true);" class="query pointer badge"><i class="icon-circle" ng-style="{color: querySrv.list[id].color}"></i> <span>{{querySrv.list[id].alias || querySrv.list[id].query}}</span></span></div></div>

View File

@ -1 +0,0 @@
<div class="modal-body"><div class="pull-right editor-title">Row settings</div><div ng-model="editor.index" bs-tabs=""><div ng-repeat="tab in ['General','Panels','Add Panel']" data-title="{{tab}}"></div></div><div class="row-fluid" ng-show="editor.index == 0"><div class="span4"><label class="small">Title</label><input type="text" class="input-medium" ng-model="row.title"></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><div class="span1"><label class="small">Collapsable</label><input type="checkbox" ng-model="row.collapsable" ng-checked="row.collapsable"></div></div><div class="row-fluid" ng-show="editor.index == 1"><div class="span12"><h4>Panels</h4><table class="table table-condensed table-striped"><thead><th>Title</th><th>Type</th><th>Span</th><th>Delete</th><th>Move</th><th></th><th>Hide</th></thead><tr ng-repeat="panel in row.panels"><td>{{panel.title}}</td><td>{{panel.type}}</td><td><select ng-hide="panel.sizeable == false" class="input-mini" ng-model="panel.span" ng-options="f for f in [0,1,2,3,4,5,6,7,8,9,10,11,12]"></select></td><td><i ng-click="row.panels = _.without(row.panels,panel)" class="pointer icon-remove"></i></td><td><i ng-click="_.move(row.panels,$index,$index-1)" ng-hide="$first" class="pointer icon-arrow-up"></i></td><td><i ng-click="_.move(row.panels,$index,$index+1)" ng-hide="$last" class="pointer icon-arrow-down"></i></td><td><input type="checkbox" ng-model="panel.hide" ng-checked="panel.hide"></td></tr></table></div></div><div class="row-fluid" ng-show="editor.index == 2"><h4>Select Panel Type</h4><form class="input-append"><select class="input-medium input-append" ng-model="panel.type" ng-options="f for f in config.panel_names|stringSort"></select><small ng-show="!panel.type">Select Type</small></form><div ng-show="!(_.isUndefined(panel.type))"><div add-panel="{{panel.type}}"></div></div></div></div><div class="modal-footer"><button ng-show="panel.type &amp;&amp; editor.index == 2" ng-click="add_panel(row,panel); reset_panel(); editor.index == 1;" class="btn btn-success" ng-disabled="panel.loadingEditor">Add Panel</button> <button type="button" class="btn btn-danger" ng-click="editor.index=0;dismiss();reset_panel();close_edit()">Close</button></div>

120
dist/build.txt vendored
View File

@ -1,120 +0,0 @@
app/app.js
----------------
vendor/jquery/jquery-1.8.0.js
vendor/angular/angular.js
vendor/underscore.js
app/components/underscore.extended.js
app/../vendor/elasticjs/elastic.js
vendor/elasticjs/elastic-angular-client.js
vendor/bootstrap/bootstrap.js
vendor/angular/angular-sanitize.js
vendor/angular/timepicker.js
vendor/angular/datepicker.js
vendor/angular/angular-strap.js
app/components/extend-jquery.js
app/components/settings.js
app/services/alertSrv.js
app/components/kbn.js
vendor/moment.js
vendor/modernizr-2.6.1.js
app/services/dashboard.js
app/services/fields.js
app/services/filterSrv.js
app/services/kbnIndex.js
app/services/querySrv.js
app/services/timer.js
app/services/all.js
app/controllers/dash.js
app/controllers/dashLoader.js
app/controllers/row.js
app/controllers/all.js
app/directives/addPanel.js
app/directives/arrayJoin.js
app/directives/dashUpload.js
app/directives/kibanaPanel.js
app/directives/ngBlur.js
app/directives/ngModelOnBlur.js
app/directives/tip.js
app/directives/all.js
app/filters/all.js
app/app.js
vendor/jquery/jquery.flot.js
vendor/jquery/jquery.flot.pie.js
vendor/require/text.js
app/panels/bettermap/module.js
----------------
app/panels/bettermap/leaflet/leaflet-src.js
vendor/require/css.js
css!panels/bettermap/leaflet/leaflet.css
css!panels/bettermap/leaflet/plugins.css
app/panels/bettermap/module.js
app/panels/column/module.js
----------------
app/panels/column/module.js
app/panels/dashcontrol/module.js
----------------
app/panels/dashcontrol/module.js
app/panels/derivequeries/module.js
----------------
app/panels/derivequeries/module.js
app/panels/fields/module.js
----------------
app/panels/fields/module.js
app/panels/filtering/module.js
----------------
app/panels/filtering/module.js
app/panels/histogram/module.js
----------------
app/panels/histogram/timeSeries.js
vendor/jquery/jquery.flot.selection.js
vendor/jquery/jquery.flot.time.js
vendor/jquery/jquery.flot.stack.js
app/panels/histogram/module.js
app/panels/hits/module.js
----------------
app/panels/hits/module.js
app/panels/map/module.js
----------------
app/panels/map/lib/jquery.jvectormap.min.js
app/panels/map/module.js
app/panels/pie/module.js
----------------
app/panels/pie/module.js
app/panels/query/module.js
----------------
vendor/require/css.js
css!panels/query/query.css
app/panels/query/module.js
app/panels/table/module.js
----------------
app/panels/table/module.js
app/panels/terms/module.js
----------------
app/panels/terms/module.js
app/panels/text/module.js
----------------
app/panels/text/lib/showdown.js
app/panels/text/module.js
app/panels/timepicker/module.js
----------------
app/panels/timepicker/module.js
app/panels/trends/module.js
----------------
app/panels/trends/module.js

54
dist/config.js vendored
View File

@ -1,54 +0,0 @@
/**
* These is the app's configuration, If you need to configure
* the default dashboard, please see dashboards/default
*/
define(['settings'],
function (Settings) {
return new Settings({
/**
* 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
*
* 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
* @type {String}
*/
elasticsearch: "http://"+window.location.hostname+":9200",
/**
* The default ES index to use for storing Kibana specific object
* such as stored dashboards
* @type {String}
*/
kibana_index: "kibana-int",
/**
* Panel modules available. Panels will only be loaded when they are defined in the
* dashboard, but this list is used in the "add panel" interface.
* @type {Array}
*/
panel_names: [
'histogram',
'map',
'pie',
'table',
'filtering',
'timepicker',
'text',
'fields',
'hits',
'dashcontrol',
'column',
'derivequeries',
'trends',
'bettermap',
'query',
'terms'
]
});
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More