kibana-rack 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +1 -0
  3. data.tar.gz.sig +0 -0
  4. data/.editorconfig +13 -0
  5. data/.gitattributes +2 -0
  6. data/.gitignore +10 -0
  7. data/.overcommit.yml +11 -0
  8. data/.rspec +2 -0
  9. data/.rubocop.yml +24 -0
  10. data/.simplecov +12 -0
  11. data/.travis.yml +5 -0
  12. data/.yardopts +13 -0
  13. data/CHANGELOG.md +5 -0
  14. data/CONTRIBUTING.md +105 -0
  15. data/Gemfile +30 -0
  16. data/LICENSE.txt +22 -0
  17. data/README.md +269 -0
  18. data/Rakefile +27 -0
  19. data/dashboards/blank.json +32 -0
  20. data/dashboards/default.json +90 -0
  21. data/dashboards/guided.json +272 -0
  22. data/dashboards/logstash.js +138 -0
  23. data/dashboards/logstash.json +227 -0
  24. data/dashboards/noted.json +161 -0
  25. data/examples/dashboards/default.json +90 -0
  26. data/examples/rack/config.ru +14 -0
  27. data/examples/rack_basic_auth/config.ru +18 -0
  28. data/examples/rack_basic_auth/dashboards/default.json +90 -0
  29. data/examples/rails/app/controllers/application_controller.rb +3 -0
  30. data/examples/rails/app/helpers/application_helper.rb +2 -0
  31. data/examples/rails/app/kibana/blank.json +32 -0
  32. data/examples/rails/app/kibana/default.json +90 -0
  33. data/examples/rails/app/kibana/guided.json +272 -0
  34. data/examples/rails/app/kibana/logstash.json +227 -0
  35. data/examples/rails/app/kibana/noted.json +161 -0
  36. data/examples/rails/bin/bundle +3 -0
  37. data/examples/rails/bin/rails +4 -0
  38. data/examples/rails/bin/rake +4 -0
  39. data/examples/rails/config.ru +2 -0
  40. data/examples/rails/config/application.rb +11 -0
  41. data/examples/rails/config/boot.rb +2 -0
  42. data/examples/rails/config/environment.rb +2 -0
  43. data/examples/rails/config/environments/development.rb +7 -0
  44. data/examples/rails/config/environments/production.rb +11 -0
  45. data/examples/rails/config/environments/test.rb +11 -0
  46. data/examples/rails/config/initializers/cookies_serializer.rb +1 -0
  47. data/examples/rails/config/initializers/filter_parameter_logging.rb +1 -0
  48. data/examples/rails/config/initializers/kibana.rb +3 -0
  49. data/examples/rails/config/initializers/session_store.rb +1 -0
  50. data/examples/rails/config/initializers/wrap_parameters.rb +3 -0
  51. data/examples/rails/config/routes.rb +3 -0
  52. data/examples/rails/config/secrets.yml +9 -0
  53. data/examples/rails/log/.keep +0 -0
  54. data/examples/sinatra/config.ru +27 -0
  55. data/examples/sinatra/dashboards/default.json +90 -0
  56. data/kibana-rack.gemspec +28 -0
  57. data/lib/kibana/rack.rb +34 -0
  58. data/lib/kibana/rack/version.rb +5 -0
  59. data/lib/kibana/rack/web.rb +60 -0
  60. data/spec/fixtures/dashboards/default.json +90 -0
  61. data/spec/fixtures/dashboards/templated.json +1 -0
  62. data/spec/spec_helper.rb +32 -0
  63. data/spec/unit/kibana/rack/web_spec.rb +69 -0
  64. data/spec/unit/kibana/rack_spec.rb +4 -0
  65. data/tabolario.gpg +31 -0
  66. data/tabolario.pem +21 -0
  67. data/web/assets/LICENSE.md +13 -0
  68. data/web/assets/README.md +69 -0
  69. data/web/assets/app/app.js +24 -0
  70. data/web/assets/app/components/require.config.js +4 -0
  71. data/web/assets/app/factories/store.js +4 -0
  72. data/web/assets/app/panels/bettermap/editor.html +1 -0
  73. data/web/assets/app/panels/bettermap/leaflet/images/layers-2x.png +0 -0
  74. data/web/assets/app/panels/bettermap/leaflet/images/layers.png +0 -0
  75. data/web/assets/app/panels/bettermap/leaflet/images/marker-icon-2x.png +0 -0
  76. data/web/assets/app/panels/bettermap/leaflet/images/marker-icon.png +0 -0
  77. data/web/assets/app/panels/bettermap/leaflet/images/marker-shadow.png +0 -0
  78. data/web/assets/app/panels/bettermap/leaflet/leaflet.css +1 -0
  79. data/web/assets/app/panels/bettermap/leaflet/leaflet.ie.css +1 -0
  80. data/web/assets/app/panels/bettermap/leaflet/leaflet.js +7 -0
  81. data/web/assets/app/panels/bettermap/leaflet/plugins.css +1 -0
  82. data/web/assets/app/panels/bettermap/leaflet/plugins.js +4 -0
  83. data/web/assets/app/panels/bettermap/module.css +1 -0
  84. data/web/assets/app/panels/bettermap/module.html +3 -0
  85. data/web/assets/app/panels/bettermap/module.js +8 -0
  86. data/web/assets/app/panels/column/editor.html +1 -0
  87. data/web/assets/app/panels/column/module.html +1 -0
  88. data/web/assets/app/panels/column/module.js +4 -0
  89. data/web/assets/app/panels/column/panelgeneral.html +1 -0
  90. data/web/assets/app/panels/dashcontrol/editor.html +1 -0
  91. data/web/assets/app/panels/dashcontrol/module.html +1 -0
  92. data/web/assets/app/panels/dashcontrol/module.js +4 -0
  93. data/web/assets/app/panels/derivequeries/editor.html +1 -0
  94. data/web/assets/app/panels/derivequeries/module.html +1 -0
  95. data/web/assets/app/panels/derivequeries/module.js +4 -0
  96. data/web/assets/app/panels/fields/editor.html +1 -0
  97. data/web/assets/app/panels/fields/micropanel.html +1 -0
  98. data/web/assets/app/panels/fields/module.html +1 -0
  99. data/web/assets/app/panels/fields/module.js +4 -0
  100. data/web/assets/app/panels/filtering/editor.html +1 -0
  101. data/web/assets/app/panels/filtering/meta.html +3 -0
  102. data/web/assets/app/panels/filtering/module.html +30 -0
  103. data/web/assets/app/panels/filtering/module.js +4 -0
  104. data/web/assets/app/panels/goal/editor.html +1 -0
  105. data/web/assets/app/panels/goal/module.html +1 -0
  106. data/web/assets/app/panels/goal/module.js +4 -0
  107. data/web/assets/app/panels/histogram/editor.html +1 -0
  108. data/web/assets/app/panels/histogram/module.html +40 -0
  109. data/web/assets/app/panels/histogram/module.js +5 -0
  110. data/web/assets/app/panels/histogram/queriesEditor.html +9 -0
  111. data/web/assets/app/panels/histogram/styleEditor.html +1 -0
  112. data/web/assets/app/panels/hits/editor.html +1 -0
  113. data/web/assets/app/panels/hits/module.html +1 -0
  114. data/web/assets/app/panels/hits/module.js +4 -0
  115. data/web/assets/app/panels/map/editor.html +1 -0
  116. data/web/assets/app/panels/map/lib/map.europe.js +4 -0
  117. data/web/assets/app/panels/map/lib/map.usa.js +4 -0
  118. data/web/assets/app/panels/map/lib/map.world.js +4 -0
  119. data/web/assets/app/panels/map/module.html +58 -0
  120. data/web/assets/app/panels/map/module.js +5 -0
  121. data/web/assets/app/panels/query/editor.html +1 -0
  122. data/web/assets/app/panels/query/editors/lucene.html +0 -0
  123. data/web/assets/app/panels/query/editors/regex.html +0 -0
  124. data/web/assets/app/panels/query/editors/topN.html +1 -0
  125. data/web/assets/app/panels/query/help/lucene.html +1 -0
  126. data/web/assets/app/panels/query/help/regex.html +1 -0
  127. data/web/assets/app/panels/query/help/topN.html +1 -0
  128. data/web/assets/app/panels/query/helpModal.html +1 -0
  129. data/web/assets/app/panels/query/meta.html +3 -0
  130. data/web/assets/app/panels/query/module.html +1 -0
  131. data/web/assets/app/panels/query/module.js +4 -0
  132. data/web/assets/app/panels/query/query.css +1 -0
  133. data/web/assets/app/panels/sparklines/editor.html +1 -0
  134. data/web/assets/app/panels/sparklines/module.html +1 -0
  135. data/web/assets/app/panels/sparklines/module.js +4 -0
  136. data/web/assets/app/panels/stats/editor.html +1 -0
  137. data/web/assets/app/panels/stats/module.html +7 -0
  138. data/web/assets/app/panels/stats/module.js +4 -0
  139. data/web/assets/app/panels/table/editor.html +1 -0
  140. data/web/assets/app/panels/table/micropanel.html +3 -0
  141. data/web/assets/app/panels/table/modal.html +31 -0
  142. data/web/assets/app/panels/table/module.html +52 -0
  143. data/web/assets/app/panels/table/module.js +4 -0
  144. data/web/assets/app/panels/table/pagination.html +1 -0
  145. data/web/assets/app/panels/terms/editor.html +1 -0
  146. data/web/assets/app/panels/terms/module.html +24 -0
  147. data/web/assets/app/panels/terms/module.js +4 -0
  148. data/web/assets/app/panels/text/editor.html +1 -0
  149. data/web/assets/app/panels/text/module.html +1 -0
  150. data/web/assets/app/panels/text/module.js +4 -0
  151. data/web/assets/app/panels/timepicker/custom.html +31 -0
  152. data/web/assets/app/panels/timepicker/editor.html +1 -0
  153. data/web/assets/app/panels/timepicker/module.html +3 -0
  154. data/web/assets/app/panels/timepicker/module.js +4 -0
  155. data/web/assets/app/panels/timepicker/refreshctrl.html +1 -0
  156. data/web/assets/app/panels/trends/editor.html +1 -0
  157. data/web/assets/app/panels/trends/module.html +9 -0
  158. data/web/assets/app/panels/trends/module.js +4 -0
  159. data/web/assets/app/partials/dashLoader.html +3 -0
  160. data/web/assets/app/partials/dashLoaderShare.html +1 -0
  161. data/web/assets/app/partials/dashboard.html +1 -0
  162. data/web/assets/app/partials/dasheditor.html +1 -0
  163. data/web/assets/app/partials/inspector.html +2 -0
  164. data/web/assets/app/partials/load.html +1 -0
  165. data/web/assets/app/partials/modal.html +1 -0
  166. data/web/assets/app/partials/paneladd.html +1 -0
  167. data/web/assets/app/partials/paneleditor.html +1 -0
  168. data/web/assets/app/partials/panelgeneral.html +1 -0
  169. data/web/assets/app/partials/querySelect.html +9 -0
  170. data/web/assets/app/partials/roweditor.html +1 -0
  171. data/web/assets/build.txt +153 -0
  172. data/web/assets/css/animate.min.css +1 -0
  173. data/web/assets/css/bootstrap-responsive.min.css +9 -0
  174. data/web/assets/css/bootstrap.dark.less +6290 -0
  175. data/web/assets/css/bootstrap.dark.min.css +9 -0
  176. data/web/assets/css/bootstrap.light.less +6287 -0
  177. data/web/assets/css/bootstrap.light.min.css +9 -0
  178. data/web/assets/css/font-awesome.min.css +1 -0
  179. data/web/assets/css/normalize.min.css +1 -0
  180. data/web/assets/css/timepicker.css +18 -0
  181. data/web/assets/favicon.ico +0 -0
  182. data/web/assets/font/FontAwesome.otf +0 -0
  183. data/web/assets/font/fontawesome-webfont.eot +0 -0
  184. data/web/assets/font/fontawesome-webfont.svg +399 -0
  185. data/web/assets/font/fontawesome-webfont.ttf +0 -0
  186. data/web/assets/font/fontawesome-webfont.woff +0 -0
  187. data/web/assets/img/annotation-icon.png +0 -0
  188. data/web/assets/img/cubes.png +0 -0
  189. data/web/assets/img/glyphicons-halflings-white.png +0 -0
  190. data/web/assets/img/glyphicons-halflings.png +0 -0
  191. data/web/assets/img/kibana.png +0 -0
  192. data/web/assets/img/light.png +0 -0
  193. data/web/assets/img/load.gif +0 -0
  194. data/web/assets/img/load_big.gif +0 -0
  195. data/web/assets/img/small.png +0 -0
  196. data/web/assets/index.html +1 -0
  197. data/web/assets/vendor/LICENSE.json +94 -0
  198. data/web/assets/vendor/bootstrap/less/tests/buttons.html +139 -0
  199. data/web/assets/vendor/bootstrap/less/tests/css-tests.css +3 -0
  200. data/web/assets/vendor/bootstrap/less/tests/css-tests.html +1399 -0
  201. data/web/assets/vendor/bootstrap/less/tests/forms-responsive.html +71 -0
  202. data/web/assets/vendor/bootstrap/less/tests/forms.html +179 -0
  203. data/web/assets/vendor/bootstrap/less/tests/navbar-fixed-top.html +104 -0
  204. data/web/assets/vendor/bootstrap/less/tests/navbar-static-top.html +107 -0
  205. data/web/assets/vendor/bootstrap/less/tests/navbar.html +107 -0
  206. data/web/assets/vendor/require/css-build.js +4 -0
  207. data/web/assets/vendor/require/require.js +4 -0
  208. data/web/assets/vendor/require/tmpl.js +4 -0
  209. data/web/assets/vendor/timezone.js +4 -0
  210. data/web/views/config.erb +80 -0
  211. data/web/views/index.erb +56 -0
  212. metadata +336 -0
  213. metadata.gz.sig +3 -0
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'bundler/setup'
2
+ require 'bundler/gem_tasks'
3
+ require 'inch'
4
+ require 'inch/cli'
5
+ require 'inch/rake'
6
+ require 'rspec/core/rake_task'
7
+ require 'rubocop/rake_task'
8
+ require 'yard/rake/yardoc_task'
9
+
10
+ namespace :lint do
11
+ desc 'Lint inline documentation'
12
+ Inch::Rake::Suggest.new(:docs)
13
+
14
+ desc 'Lint code style'
15
+ RuboCop::RakeTask.new(:ruby)
16
+ end
17
+
18
+ desc 'Run all linters'
19
+ task lint: %w(lint:ruby lint:docs)
20
+
21
+ desc 'Run all tests'
22
+ RSpec::Core::RakeTask.new(:spec)
23
+
24
+ desc 'Generate documentation'
25
+ YARD::Rake::YardocTask.new
26
+
27
+ task default: %i(lint spec)
@@ -0,0 +1,32 @@
1
+ {
2
+ "title": "New Dashboard",
3
+ "services": {
4
+ "query": {
5
+ "list": {
6
+ "0": {
7
+ "query": "*",
8
+ "alias": "",
9
+ "color": "#7EB26D",
10
+ "id": 0
11
+ }
12
+ },
13
+ "ids": [
14
+ 0
15
+ ]
16
+ },
17
+ "filter": {
18
+ "list": {},
19
+ "ids": []
20
+ }
21
+ },
22
+ "rows": [
23
+ ],
24
+ "editable": true,
25
+ "failover": false,
26
+ "index": {
27
+ "interval": "none",
28
+ "pattern": "[logstash-]YYYY.MM.DD",
29
+ "default": "_all",
30
+ "warm_fields": false
31
+ }
32
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "title": "Introduction",
3
+ "services": {
4
+ "query": {
5
+ "list": {
6
+ "0": {
7
+ "query": "*",
8
+ "alias": "",
9
+ "color": "#7EB26D",
10
+ "id": 0,
11
+ "pin": false,
12
+ "type": "lucene"
13
+ }
14
+ },
15
+ "ids": [
16
+ 0
17
+ ]
18
+ },
19
+ "filter": {
20
+ "list": {},
21
+ "ids": []
22
+ }
23
+ },
24
+ "rows": [
25
+ {
26
+ "title": "Intro",
27
+ "height": "450px",
28
+ "editable": false,
29
+ "collapse": false,
30
+ "collapsable": false,
31
+ "panels": [
32
+ {
33
+ "error": false,
34
+ "span": 4,
35
+ "editable": false,
36
+ "group": [
37
+ "default"
38
+ ],
39
+ "type": "text",
40
+ "mode": "markdown",
41
+ "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 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?",
42
+ "style": {},
43
+ "title": "",
44
+ "status": "Stable"
45
+ },
46
+ {
47
+ "error": false,
48
+ "span": 8,
49
+ "editable": false,
50
+ "group": [
51
+ "default"
52
+ ],
53
+ "type": "text",
54
+ "mode": "markdown",
55
+ "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.90.9 or above. \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*",
56
+ "style": {},
57
+ "status": "Stable"
58
+ }
59
+ ],
60
+ "notice": false
61
+ }
62
+ ],
63
+ "editable": false,
64
+ "index": {
65
+ "interval": "none",
66
+ "pattern": "[logstash-]YYYY.MM.DD",
67
+ "default": "_all",
68
+ "warm_fields": false
69
+ },
70
+ "style": "dark",
71
+ "failover": false,
72
+ "panel_hints": true,
73
+ "pulldowns": [],
74
+ "nav": [],
75
+ "loader": {
76
+ "save_gist": false,
77
+ "save_elasticsearch": true,
78
+ "save_local": true,
79
+ "save_default": true,
80
+ "save_temp": true,
81
+ "save_temp_ttl_enable": true,
82
+ "save_temp_ttl": "30d",
83
+ "load_gist": true,
84
+ "load_elasticsearch": true,
85
+ "load_elasticsearch_size": 20,
86
+ "load_local": true,
87
+ "hide": false
88
+ },
89
+ "refresh": false
90
+ }
@@ -0,0 +1,272 @@
1
+ {
2
+ "title": "Your Basic Dashboard",
3
+ "services": {
4
+ "query": {
5
+ "list": {
6
+ "0": {
7
+ "query": "*",
8
+ "alias": "",
9
+ "color": "#7EB26D",
10
+ "id": 0,
11
+ "pin": false,
12
+ "type": "lucene"
13
+ }
14
+ },
15
+ "ids": [
16
+ 0
17
+ ]
18
+ },
19
+ "filter": {
20
+ "list": {},
21
+ "ids": []
22
+ }
23
+ },
24
+ "rows": [
25
+ {
26
+ "title": "Options",
27
+ "height": "50px",
28
+ "editable": true,
29
+ "collapse": false,
30
+ "collapsable": true,
31
+ "panels": [
32
+ {
33
+ "error": false,
34
+ "span": 7,
35
+ "editable": true,
36
+ "group": [
37
+ "default"
38
+ ],
39
+ "type": "text",
40
+ "status": "Stable",
41
+ "mode": "markdown",
42
+ "content": "If you have a field with a timestamp in it, you can set a time filter using the control in the navigation bar. You'll need to click the cog icon to configure the field that your timestamp is in.",
43
+ "style": {},
44
+ "title": "Have a timestamp somewhere?"
45
+ },
46
+ {
47
+ "error": false,
48
+ "span": 5,
49
+ "editable": true,
50
+ "group": [
51
+ "default"
52
+ ],
53
+ "type": "text",
54
+ "status": "Stable",
55
+ "mode": "markdown",
56
+ "content": "See the *Filters* bar above? Click it to expand the filters panel. Right now there are none. click on one of the icons in the document types list to filter down to only that document type",
57
+ "style": {},
58
+ "title": "About filters"
59
+ }
60
+ ],
61
+ "notice": false
62
+ },
63
+ {
64
+ "title": "Graph",
65
+ "height": "250px",
66
+ "editable": true,
67
+ "collapse": false,
68
+ "collapsable": true,
69
+ "panels": [
70
+ {
71
+ "error": false,
72
+ "span": 3,
73
+ "editable": true,
74
+ "group": [
75
+ "default"
76
+ ],
77
+ "type": "terms",
78
+ "queries": {
79
+ "mode": "all",
80
+ "ids": [
81
+ 0
82
+ ]
83
+ },
84
+ "field": "_type",
85
+ "exclude": [],
86
+ "missing": true,
87
+ "other": true,
88
+ "size": 100,
89
+ "order": "count",
90
+ "style": {
91
+ "font-size": "10pt"
92
+ },
93
+ "donut": false,
94
+ "tilt": false,
95
+ "labels": true,
96
+ "arrangement": "horizontal",
97
+ "chart": "pie",
98
+ "counter_pos": "none",
99
+ "title": "Document types",
100
+ "spyable": true
101
+ },
102
+ {
103
+ "error": false,
104
+ "span": 3,
105
+ "editable": true,
106
+ "group": [
107
+ "default"
108
+ ],
109
+ "type": "terms",
110
+ "queries": {
111
+ "mode": "all",
112
+ "ids": [
113
+ 0
114
+ ]
115
+ },
116
+ "field": "_type",
117
+ "exclude": [],
118
+ "missing": true,
119
+ "other": true,
120
+ "size": 10,
121
+ "order": "count",
122
+ "style": {
123
+ "font-size": "10pt"
124
+ },
125
+ "donut": false,
126
+ "tilt": false,
127
+ "labels": true,
128
+ "arrangement": "horizontal",
129
+ "chart": "table",
130
+ "counter_pos": "above",
131
+ "spyable": true,
132
+ "title": "Document Types"
133
+ },
134
+ {
135
+ "error": false,
136
+ "span": 6,
137
+ "editable": true,
138
+ "group": [
139
+ "default"
140
+ ],
141
+ "type": "text",
142
+ "status": "Stable",
143
+ "mode": "markdown",
144
+ "content": "It'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 navigation bar at the top. You can also add rows from that dialog. You can edit individual panels by click on the cog icon on the panel you want to edit\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",
145
+ "style": {},
146
+ "title": "The most generic dashboard ever"
147
+ }
148
+ ],
149
+ "notice": false
150
+ },
151
+ {
152
+ "title": "Events",
153
+ "height": "650px",
154
+ "editable": true,
155
+ "collapse": false,
156
+ "collapsable": true,
157
+ "panels": [
158
+ {
159
+ "error": false,
160
+ "span": 12,
161
+ "editable": true,
162
+ "group": [
163
+ "default"
164
+ ],
165
+ "type": "table",
166
+ "size": 100,
167
+ "pages": 5,
168
+ "offset": 0,
169
+ "sort": [
170
+ "_score",
171
+ "desc"
172
+ ],
173
+ "style": {
174
+ "font-size": "9pt"
175
+ },
176
+ "overflow": "min-height",
177
+ "fields": [],
178
+ "highlight": [],
179
+ "sortable": true,
180
+ "header": true,
181
+ "paging": true,
182
+ "spyable": true,
183
+ "queries": {
184
+ "mode": "all",
185
+ "ids": [
186
+ 0
187
+ ]
188
+ },
189
+ "field_list": true,
190
+ "status": "Stable",
191
+ "trimFactor": 300,
192
+ "normTimes": true,
193
+ "title": "Documents"
194
+ }
195
+ ],
196
+ "notice": false
197
+ }
198
+ ],
199
+ "editable": true,
200
+ "index": {
201
+ "interval": "none",
202
+ "pattern": "[logstash-]YYYY.MM.DD",
203
+ "default": "_all",
204
+ "warm_fields": false
205
+ },
206
+ "style": "dark",
207
+ "failover": false,
208
+ "panel_hints": true,
209
+ "loader": {
210
+ "save_gist": false,
211
+ "save_elasticsearch": true,
212
+ "save_local": true,
213
+ "save_default": true,
214
+ "save_temp": true,
215
+ "save_temp_ttl_enable": true,
216
+ "save_temp_ttl": "30d",
217
+ "load_gist": true,
218
+ "load_elasticsearch": true,
219
+ "load_elasticsearch_size": 20,
220
+ "load_local": true,
221
+ "hide": false
222
+ },
223
+ "pulldowns": [
224
+ {
225
+ "type": "query",
226
+ "collapse": false,
227
+ "notice": false,
228
+ "query": "*",
229
+ "pinned": true,
230
+ "history": [],
231
+ "remember": 10
232
+ },
233
+ {
234
+ "type": "filtering",
235
+ "collapse": true,
236
+ "notice": false
237
+ }
238
+ ],
239
+ "nav": [
240
+ {
241
+ "type": "timepicker",
242
+ "collapse": false,
243
+ "notice": false,
244
+ "status": "Stable",
245
+ "time_options": [
246
+ "5m",
247
+ "15m",
248
+ "1h",
249
+ "6h",
250
+ "12h",
251
+ "24h",
252
+ "2d",
253
+ "7d",
254
+ "30d"
255
+ ],
256
+ "refresh_intervals": [
257
+ "5s",
258
+ "10s",
259
+ "30s",
260
+ "1m",
261
+ "5m",
262
+ "15m",
263
+ "30m",
264
+ "1h",
265
+ "2h",
266
+ "1d"
267
+ ],
268
+ "timefield": "@timestamp"
269
+ }
270
+ ],
271
+ "refresh": false
272
+ }
@@ -0,0 +1,138 @@
1
+ /* global _ */
2
+
3
+ /*
4
+ * Complex scripted Logstash dashboard
5
+ * This script generates a dashboard object that Kibana can load. It also takes a number of user
6
+ * supplied URL parameters, none are required:
7
+ *
8
+ * index :: Which index to search? If this is specified, interval is set to 'none'
9
+ * pattern :: Does nothing if index is specified. Set a timestamped index pattern. Default: [logstash-]YYYY.MM.DD
10
+ * interval :: Sets the index interval (eg: day,week,month,year), Default: day
11
+ *
12
+ * split :: The character to split the queries on Default: ','
13
+ * query :: By default, a comma separated list of queries to run. Default: *
14
+ *
15
+ * from :: Search this amount of time back, eg 15m, 1h, 2d. Default: 15m
16
+ * timefield :: The field containing the time to filter on, Default: @timestamp
17
+ *
18
+ * fields :: comma separated list of fields to show in the table
19
+ * sort :: comma separated field to sort on, and direction, eg sort=@timestamp,desc
20
+ *
21
+ */
22
+
23
+
24
+
25
+ // Setup some variables
26
+ var dashboard, queries, _d_timespan;
27
+
28
+ // All url parameters are available via the ARGS object
29
+ var ARGS;
30
+
31
+ // Set a default timespan if one isn't specified
32
+ _d_timespan = '1d';
33
+
34
+ // Intialize a skeleton with nothing but a rows array and service object
35
+ dashboard = {
36
+ rows : [],
37
+ services : {}
38
+ };
39
+
40
+ // Set a title
41
+ dashboard.title = 'Logstash Search';
42
+
43
+ // Allow the user to set the index, if they dont, fall back to logstash.
44
+ if(!_.isUndefined(ARGS.index)) {
45
+ dashboard.index = {
46
+ default: ARGS.index,
47
+ interval: 'none'
48
+ };
49
+ } else {
50
+ // Don't fail to default
51
+ dashboard.failover = false;
52
+ dashboard.index = {
53
+ default: ARGS.index||'ADD_A_TIME_FILTER',
54
+ pattern: ARGS.pattern||'[logstash-]YYYY.MM.DD',
55
+ interval: ARGS.interval||'day'
56
+ };
57
+ }
58
+
59
+ // In this dashboard we let users pass queries as comma separated list to the query parameter.
60
+ // Or they can specify a split character using the split aparameter
61
+ // If query is defined, split it into a list of query objects
62
+ // NOTE: ids must be integers, hence the parseInt()s
63
+ if(!_.isUndefined(ARGS.query)) {
64
+ queries = _.object(_.map(ARGS.query.split(ARGS.split||','), function(v,k) {
65
+ return [k,{
66
+ query: v,
67
+ id: parseInt(k,10),
68
+ alias: v
69
+ }];
70
+ }));
71
+ } else {
72
+ // No queries passed? Initialize a single query to match everything
73
+ queries = {
74
+ 0: {
75
+ query: '*',
76
+ id: 0,
77
+ }
78
+ };
79
+ }
80
+
81
+ // Now populate the query service with our objects
82
+ dashboard.services.query = {
83
+ list : queries,
84
+ ids : _.map(_.keys(queries),function(v){return parseInt(v,10);})
85
+ };
86
+
87
+ // Lets also add a default time filter, the value of which can be specified by the user
88
+ dashboard.services.filter = {
89
+ list: {
90
+ 0: {
91
+ from: "now-"+(ARGS.from||_d_timespan),
92
+ to: "now",
93
+ field: ARGS.timefield||"@timestamp",
94
+ type: "time",
95
+ active: true,
96
+ id: 0,
97
+ }
98
+ },
99
+ ids: [0]
100
+ };
101
+
102
+ // Ok, lets make some rows. The Filters row is collapsed by default
103
+ dashboard.rows = [
104
+ {
105
+ title: "Chart",
106
+ height: "300px"
107
+ },
108
+ {
109
+ title: "Events",
110
+ height: "400px"
111
+ }
112
+ ];
113
+
114
+ // And a histogram that allows the user to specify the interval and time field
115
+ dashboard.rows[0].panels = [
116
+ {
117
+ title: 'events over time',
118
+ type: 'histogram',
119
+ time_field: ARGS.timefield||"@timestamp",
120
+ auto_int: true,
121
+ span: 12
122
+ }
123
+ ];
124
+
125
+ // And a table row where you can specify field and sort order
126
+ dashboard.rows[1].panels = [
127
+ {
128
+ title: 'all events',
129
+ type: 'table',
130
+ fields: !_.isUndefined(ARGS.fields) ? ARGS.fields.split(',') : [],
131
+ sort: !_.isUndefined(ARGS.sort) ? ARGS.sort.split(',') : [ARGS.timefield||'@timestamp','desc'],
132
+ overflow: 'expand',
133
+ span: 12
134
+ }
135
+ ];
136
+
137
+ // Now return the object and we're good!
138
+ return dashboard;