kibana-sinatra 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +1 -0
  7. data/kibana-sinatra.gemspec +24 -0
  8. data/lib/kibana/assets/app/app.js +140 -0
  9. data/lib/kibana/assets/app/components/extend-jquery.js +46 -0
  10. data/lib/kibana/assets/app/components/kbn.js +332 -0
  11. data/lib/kibana/assets/app/components/require.config.js +90 -0
  12. data/lib/kibana/assets/app/components/settings.js +27 -0
  13. data/lib/kibana/assets/app/components/underscore.extended.js +32 -0
  14. data/lib/kibana/assets/app/controllers/all.js +5 -0
  15. data/lib/kibana/assets/app/controllers/dash.js +91 -0
  16. data/lib/kibana/assets/app/controllers/dashLoader.js +123 -0
  17. data/lib/kibana/assets/app/controllers/row.js +76 -0
  18. data/lib/kibana/assets/app/dashboards/blank.json +42 -0
  19. data/lib/kibana/assets/app/dashboards/default.json +89 -0
  20. data/lib/kibana/assets/app/dashboards/guided.json +274 -0
  21. data/lib/kibana/assets/app/dashboards/logstash.js +181 -0
  22. data/lib/kibana/assets/app/dashboards/logstash.json +222 -0
  23. data/lib/kibana/assets/app/dashboards/noted.json +202 -0
  24. data/lib/kibana/assets/app/directives/addPanel.js +30 -0
  25. data/lib/kibana/assets/app/directives/all.js +10 -0
  26. data/lib/kibana/assets/app/directives/arrayJoin.js +34 -0
  27. data/lib/kibana/assets/app/directives/confirmClick.js +26 -0
  28. data/lib/kibana/assets/app/directives/dashUpload.js +37 -0
  29. data/lib/kibana/assets/app/directives/kibanaPanel.js +103 -0
  30. data/lib/kibana/assets/app/directives/ngBlur.js +20 -0
  31. data/lib/kibana/assets/app/directives/ngModelOnBlur.js +25 -0
  32. data/lib/kibana/assets/app/directives/tip.js +20 -0
  33. data/lib/kibana/assets/app/filters/all.js +110 -0
  34. data/lib/kibana/assets/app/panels/bettermap/editor.html +17 -0
  35. data/lib/kibana/assets/app/panels/bettermap/leaflet/images/layers-2x.png +0 -0
  36. data/lib/kibana/assets/app/panels/bettermap/leaflet/images/layers.png +0 -0
  37. data/lib/kibana/assets/app/panels/bettermap/leaflet/images/marker-icon-2x.png +0 -0
  38. data/lib/kibana/assets/app/panels/bettermap/leaflet/images/marker-icon.png +0 -0
  39. data/lib/kibana/assets/app/panels/bettermap/leaflet/images/marker-shadow.png +0 -0
  40. data/lib/kibana/assets/app/panels/bettermap/leaflet/leaflet-src.js +8724 -0
  41. data/lib/kibana/assets/app/panels/bettermap/leaflet/leaflet.css +463 -0
  42. data/lib/kibana/assets/app/panels/bettermap/leaflet/leaflet.ie.css +51 -0
  43. data/lib/kibana/assets/app/panels/bettermap/leaflet/leaflet.js +8 -0
  44. data/lib/kibana/assets/app/panels/bettermap/leaflet/plugins.css +75 -0
  45. data/lib/kibana/assets/app/panels/bettermap/leaflet/plugins.js +16 -0
  46. data/lib/kibana/assets/app/panels/bettermap/module.css +4 -0
  47. data/lib/kibana/assets/app/panels/bettermap/module.html +6 -0
  48. data/lib/kibana/assets/app/panels/bettermap/module.js +232 -0
  49. data/lib/kibana/assets/app/panels/column/editor.html +36 -0
  50. data/lib/kibana/assets/app/panels/column/module.html +16 -0
  51. data/lib/kibana/assets/app/panels/column/module.js +105 -0
  52. data/lib/kibana/assets/app/panels/column/panelgeneral.html +11 -0
  53. data/lib/kibana/assets/app/panels/dashcontrol/editor.html +44 -0
  54. data/lib/kibana/assets/app/panels/dashcontrol/load.html +40 -0
  55. data/lib/kibana/assets/app/panels/dashcontrol/module.html +6 -0
  56. data/lib/kibana/assets/app/panels/dashcontrol/module.js +198 -0
  57. data/lib/kibana/assets/app/panels/dashcontrol/save.html +30 -0
  58. data/lib/kibana/assets/app/panels/dashcontrol/share.html +11 -0
  59. data/lib/kibana/assets/app/panels/derivequeries/editor.html +23 -0
  60. data/lib/kibana/assets/app/panels/derivequeries/module.html +33 -0
  61. data/lib/kibana/assets/app/panels/derivequeries/module.js +160 -0
  62. data/lib/kibana/assets/app/panels/fields/editor.html +10 -0
  63. data/lib/kibana/assets/app/panels/fields/micropanel.html +25 -0
  64. data/lib/kibana/assets/app/panels/fields/module.html +3 -0
  65. data/lib/kibana/assets/app/panels/fields/module.js +37 -0
  66. data/lib/kibana/assets/app/panels/filtering/editor.html +7 -0
  67. data/lib/kibana/assets/app/panels/filtering/meta.html +15 -0
  68. data/lib/kibana/assets/app/panels/filtering/module.html +78 -0
  69. data/lib/kibana/assets/app/panels/filtering/module.js +66 -0
  70. data/lib/kibana/assets/app/panels/histogram/editor.html +74 -0
  71. data/lib/kibana/assets/app/panels/histogram/interval.js +57 -0
  72. data/lib/kibana/assets/app/panels/histogram/module.html +91 -0
  73. data/lib/kibana/assets/app/panels/histogram/module.js +511 -0
  74. data/lib/kibana/assets/app/panels/histogram/timeSeries.js +179 -0
  75. data/lib/kibana/assets/app/panels/hits/editor.html +29 -0
  76. data/lib/kibana/assets/app/panels/hits/module.html +44 -0
  77. data/lib/kibana/assets/app/panels/hits/module.js +270 -0
  78. data/lib/kibana/assets/app/panels/map/editor.html +15 -0
  79. data/lib/kibana/assets/app/panels/map/lib/jquery.jvectormap.min.js +8 -0
  80. data/lib/kibana/assets/app/panels/map/lib/map.europe.js +1 -0
  81. data/lib/kibana/assets/app/panels/map/lib/map.usa.js +1 -0
  82. data/lib/kibana/assets/app/panels/map/lib/map.world.js +1 -0
  83. data/lib/kibana/assets/app/panels/map/module.html +63 -0
  84. data/lib/kibana/assets/app/panels/map/module.js +185 -0
  85. data/lib/kibana/assets/app/panels/pie/editor.html +49 -0
  86. data/lib/kibana/assets/app/panels/pie/module.html +12 -0
  87. data/lib/kibana/assets/app/panels/pie/module.js +297 -0
  88. data/lib/kibana/assets/app/panels/query/editor.html +7 -0
  89. data/lib/kibana/assets/app/panels/query/meta.html +21 -0
  90. data/lib/kibana/assets/app/panels/query/module.html +25 -0
  91. data/lib/kibana/assets/app/panels/query/module.js +69 -0
  92. data/lib/kibana/assets/app/panels/query/query.css +39 -0
  93. data/lib/kibana/assets/app/panels/table/editor.html +48 -0
  94. data/lib/kibana/assets/app/panels/table/micropanel.html +44 -0
  95. data/lib/kibana/assets/app/panels/table/module.html +104 -0
  96. data/lib/kibana/assets/app/panels/table/module.js +389 -0
  97. data/lib/kibana/assets/app/panels/table/pagination.html +27 -0
  98. data/lib/kibana/assets/app/panels/terms/editor.html +51 -0
  99. data/lib/kibana/assets/app/panels/terms/module.html +55 -0
  100. data/lib/kibana/assets/app/panels/terms/module.js +307 -0
  101. data/lib/kibana/assets/app/panels/text/editor.html +16 -0
  102. data/lib/kibana/assets/app/panels/text/lib/showdown.js +1454 -0
  103. data/lib/kibana/assets/app/panels/text/module.html +10 -0
  104. data/lib/kibana/assets/app/panels/text/module.js +85 -0
  105. data/lib/kibana/assets/app/panels/timepicker/editor.html +34 -0
  106. data/lib/kibana/assets/app/panels/timepicker/module.html +73 -0
  107. data/lib/kibana/assets/app/panels/timepicker/module.js +268 -0
  108. data/lib/kibana/assets/app/panels/timepicker/refreshctrl.html +5 -0
  109. data/lib/kibana/assets/app/panels/trends/editor.html +20 -0
  110. data/lib/kibana/assets/app/panels/trends/module.html +11 -0
  111. data/lib/kibana/assets/app/panels/trends/module.js +232 -0
  112. data/lib/kibana/assets/app/partials/dashLoader.html +78 -0
  113. data/lib/kibana/assets/app/partials/dashLoaderShare.html +11 -0
  114. data/lib/kibana/assets/app/partials/dashboard.html +77 -0
  115. data/lib/kibana/assets/app/partials/dasheditor.html +151 -0
  116. data/lib/kibana/assets/app/partials/inspector.html +15 -0
  117. data/lib/kibana/assets/app/partials/load.html +4 -0
  118. data/lib/kibana/assets/app/partials/modal.html +12 -0
  119. data/lib/kibana/assets/app/partials/paneladd.html +6 -0
  120. data/lib/kibana/assets/app/partials/paneleditor.html +23 -0
  121. data/lib/kibana/assets/app/partials/panelgeneral.html +22 -0
  122. data/lib/kibana/assets/app/partials/querySelect.html +24 -0
  123. data/lib/kibana/assets/app/partials/roweditor.html +65 -0
  124. data/lib/kibana/assets/app/services/alertSrv.js +49 -0
  125. data/lib/kibana/assets/app/services/all.js +11 -0
  126. data/lib/kibana/assets/app/services/dashboard.js +417 -0
  127. data/lib/kibana/assets/app/services/fields.js +96 -0
  128. data/lib/kibana/assets/app/services/filterSrv.js +200 -0
  129. data/lib/kibana/assets/app/services/kbnIndex.js +101 -0
  130. data/lib/kibana/assets/app/services/panelMove.js +83 -0
  131. data/lib/kibana/assets/app/services/querySrv.js +147 -0
  132. data/lib/kibana/assets/app/services/timer.js +34 -0
  133. data/lib/kibana/assets/css/animate.min.css +3270 -0
  134. data/lib/kibana/assets/css/bootstrap-responsive.min.css +9 -0
  135. data/lib/kibana/assets/css/bootstrap.dark.min.css +9 -0
  136. data/lib/kibana/assets/css/bootstrap.light.min.css +9 -0
  137. data/lib/kibana/assets/css/font-awesome.min.css +403 -0
  138. data/lib/kibana/assets/css/main.css +193 -0
  139. data/lib/kibana/assets/css/normalize.min.css +1 -0
  140. data/lib/kibana/assets/css/timepicker.css +423 -0
  141. data/lib/kibana/assets/font/FontAwesome.otf +0 -0
  142. data/lib/kibana/assets/font/fontawesome-webfont.eot +0 -0
  143. data/lib/kibana/assets/font/fontawesome-webfont.svg +399 -0
  144. data/lib/kibana/assets/font/fontawesome-webfont.ttf +0 -0
  145. data/lib/kibana/assets/font/fontawesome-webfont.woff +0 -0
  146. data/lib/kibana/assets/img/glyphicons-halflings-white.png +0 -0
  147. data/lib/kibana/assets/img/glyphicons-halflings.png +0 -0
  148. data/lib/kibana/assets/img/kibana.png +0 -0
  149. data/lib/kibana/assets/img/load.gif +0 -0
  150. data/lib/kibana/assets/img/load_big.gif +0 -0
  151. data/lib/kibana/assets/index.html +49 -0
  152. data/lib/kibana/assets/vendor/angular/angular-dragdrop.js +304 -0
  153. data/lib/kibana/assets/vendor/angular/angular-sanitize.js +556 -0
  154. data/lib/kibana/assets/vendor/angular/angular-strap.js +875 -0
  155. data/lib/kibana/assets/vendor/angular/angular.js +15158 -0
  156. data/lib/kibana/assets/vendor/angular/datepicker.js +1046 -0
  157. data/lib/kibana/assets/vendor/angular/timepicker.js +888 -0
  158. data/lib/kibana/assets/vendor/bootstrap/bootstrap.js +2280 -0
  159. data/lib/kibana/assets/vendor/bootstrap/less/accordion.less +34 -0
  160. data/lib/kibana/assets/vendor/bootstrap/less/alerts.less +79 -0
  161. data/lib/kibana/assets/vendor/bootstrap/less/bootstrap.dark.less +4 -0
  162. data/lib/kibana/assets/vendor/bootstrap/less/bootstrap.less +63 -0
  163. data/lib/kibana/assets/vendor/bootstrap/less/bootstrap.light.less +4 -0
  164. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.dark.less +554 -0
  165. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.light.less +9 -0
  166. data/lib/kibana/assets/vendor/bootstrap/less/breadcrumbs.less +24 -0
  167. data/lib/kibana/assets/vendor/bootstrap/less/button-groups.less +229 -0
  168. data/lib/kibana/assets/vendor/bootstrap/less/buttons.less +228 -0
  169. data/lib/kibana/assets/vendor/bootstrap/less/carousel.less +158 -0
  170. data/lib/kibana/assets/vendor/bootstrap/less/close.less +32 -0
  171. data/lib/kibana/assets/vendor/bootstrap/less/code.less +61 -0
  172. data/lib/kibana/assets/vendor/bootstrap/less/component-animations.less +22 -0
  173. data/lib/kibana/assets/vendor/bootstrap/less/dropdowns.less +248 -0
  174. data/lib/kibana/assets/vendor/bootstrap/less/forms.less +690 -0
  175. data/lib/kibana/assets/vendor/bootstrap/less/grid.less +21 -0
  176. data/lib/kibana/assets/vendor/bootstrap/less/hero-unit.less +25 -0
  177. data/lib/kibana/assets/vendor/bootstrap/less/labels-badges.less +84 -0
  178. data/lib/kibana/assets/vendor/bootstrap/less/layouts.less +16 -0
  179. data/lib/kibana/assets/vendor/bootstrap/less/media.less +55 -0
  180. data/lib/kibana/assets/vendor/bootstrap/less/mixins.less +702 -0
  181. data/lib/kibana/assets/vendor/bootstrap/less/modals.less +95 -0
  182. data/lib/kibana/assets/vendor/bootstrap/less/navbar.less +497 -0
  183. data/lib/kibana/assets/vendor/bootstrap/less/navs.less +409 -0
  184. data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +237 -0
  185. data/lib/kibana/assets/vendor/bootstrap/less/pager.less +43 -0
  186. data/lib/kibana/assets/vendor/bootstrap/less/pagination.less +123 -0
  187. data/lib/kibana/assets/vendor/bootstrap/less/popovers.less +133 -0
  188. data/lib/kibana/assets/vendor/bootstrap/less/progress-bars.less +122 -0
  189. data/lib/kibana/assets/vendor/bootstrap/less/reset.less +216 -0
  190. data/lib/kibana/assets/vendor/bootstrap/less/responsive-1200px-min.less +28 -0
  191. data/lib/kibana/assets/vendor/bootstrap/less/responsive-767px-max.less +193 -0
  192. data/lib/kibana/assets/vendor/bootstrap/less/responsive-768px-979px.less +19 -0
  193. data/lib/kibana/assets/vendor/bootstrap/less/responsive-navbar.less +189 -0
  194. data/lib/kibana/assets/vendor/bootstrap/less/responsive-utilities.less +59 -0
  195. data/lib/kibana/assets/vendor/bootstrap/less/responsive.less +48 -0
  196. data/lib/kibana/assets/vendor/bootstrap/less/scaffolding.less +53 -0
  197. data/lib/kibana/assets/vendor/bootstrap/less/sprites.less +197 -0
  198. data/lib/kibana/assets/vendor/bootstrap/less/tables.less +244 -0
  199. data/lib/kibana/assets/vendor/bootstrap/less/tests/buttons.html +139 -0
  200. data/lib/kibana/assets/vendor/bootstrap/less/tests/css-tests.css +150 -0
  201. data/lib/kibana/assets/vendor/bootstrap/less/tests/css-tests.html +1399 -0
  202. data/lib/kibana/assets/vendor/bootstrap/less/tests/forms-responsive.html +71 -0
  203. data/lib/kibana/assets/vendor/bootstrap/less/tests/forms.html +179 -0
  204. data/lib/kibana/assets/vendor/bootstrap/less/tests/navbar-fixed-top.html +104 -0
  205. data/lib/kibana/assets/vendor/bootstrap/less/tests/navbar-static-top.html +107 -0
  206. data/lib/kibana/assets/vendor/bootstrap/less/tests/navbar.html +107 -0
  207. data/lib/kibana/assets/vendor/bootstrap/less/thumbnails.less +53 -0
  208. data/lib/kibana/assets/vendor/bootstrap/less/tooltip.less +70 -0
  209. data/lib/kibana/assets/vendor/bootstrap/less/type.less +247 -0
  210. data/lib/kibana/assets/vendor/bootstrap/less/utilities.less +30 -0
  211. data/lib/kibana/assets/vendor/bootstrap/less/variables.dark.less +304 -0
  212. data/lib/kibana/assets/vendor/bootstrap/less/variables.less +301 -0
  213. data/lib/kibana/assets/vendor/bootstrap/less/variables.light.less +301 -0
  214. data/lib/kibana/assets/vendor/bootstrap/less/wells.less +29 -0
  215. data/lib/kibana/assets/vendor/elasticjs/elastic-angular-client.js +81 -0
  216. data/lib/kibana/assets/vendor/elasticjs/elastic.js +19993 -0
  217. data/lib/kibana/assets/vendor/filesaver.js +216 -0
  218. data/lib/kibana/assets/vendor/jquery/jquery-1.8.0.js +2 -0
  219. data/lib/kibana/assets/vendor/jquery/jquery-ui-1.10.3.js +5253 -0
  220. data/lib/kibana/assets/vendor/jquery/jquery.flot.js +3060 -0
  221. data/lib/kibana/assets/vendor/jquery/jquery.flot.pie.js +817 -0
  222. data/lib/kibana/assets/vendor/jquery/jquery.flot.selection.js +360 -0
  223. data/lib/kibana/assets/vendor/jquery/jquery.flot.stack.js +188 -0
  224. data/lib/kibana/assets/vendor/jquery/jquery.flot.stackpercent.js +126 -0
  225. data/lib/kibana/assets/vendor/jquery/jquery.flot.time.js +431 -0
  226. data/lib/kibana/assets/vendor/modernizr-2.6.1.js +4 -0
  227. data/lib/kibana/assets/vendor/moment.js +1662 -0
  228. data/lib/kibana/assets/vendor/require/css-build.js +78 -0
  229. data/lib/kibana/assets/vendor/require/css.js +23 -0
  230. data/lib/kibana/assets/vendor/require/require.js +2024 -0
  231. data/lib/kibana/assets/vendor/require/text.js +386 -0
  232. data/lib/kibana/assets/vendor/require/tmpl.js +17 -0
  233. data/lib/kibana/assets/vendor/timezone.js +993 -0
  234. data/lib/kibana/assets/vendor/underscore.js +1246 -0
  235. data/lib/kibana/sinatra.rb +3 -0
  236. data/lib/kibana/sinatra/version.rb +5 -0
  237. data/lib/kibana/sinatra/web.rb +28 -0
  238. data/lib/kibana/views/config.erb +54 -0
  239. metadata +325 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6c47667fea1a8f40992e94933560d24476c55e5a
4
+ data.tar.gz: f61f2d585cb4f182ba696d5908992f3de1eaf842
5
+ SHA512:
6
+ metadata.gz: 3210da00beeb85b4caafc21f75b2557408f0266ed719de1ac14dd4cabc0858525eac05f0ad227cb5fb1b468de47be1d4d7e0b9c4508275e8e5abf5e3eb32c5ce
7
+ data.tar.gz: 3cf521038c0e6bba9d4decaf8ae4f65e9dfa9d43ad203a421ab417786804b674f462c176ba8a93124eba7b086fed0316c89369e89575768d103a9880bb423081
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in kibana-rails.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Ian Neubert
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Kibana::Sinatra
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'kibana-sinatra'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install kibana-sinatra
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'kibana/sinatra/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "kibana-sinatra"
8
+ spec.version = Kibana::Sinatra::VERSION
9
+ spec.authors = ["Ian Neubert"]
10
+ spec.email = ["ian@ianneubert.com"]
11
+ spec.description = %q{This gem packages up Kibana 3 into a Sinatra app that can be used stand alone, or with Rails.}
12
+ spec.summary = %q{This gem packages up Kibana 3 into a Sinatra app that can be used stand alone, or with Rails.}
13
+ spec.homepage = "http://github.com/ianneub/kibana-sinatra"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "sinatra", "~> 1.4"
24
+ end
@@ -0,0 +1,140 @@
1
+ /**
2
+ * main app level module
3
+ */
4
+ define([
5
+ 'angular',
6
+ 'jquery',
7
+ 'underscore',
8
+ 'require',
9
+
10
+ 'elasticjs',
11
+ 'bootstrap',
12
+ 'angular-sanitize',
13
+ 'angular-strap',
14
+ 'angular-dragdrop',
15
+ 'extend-jquery'
16
+ ],
17
+ function (angular, $, _, appLevelRequire) {
18
+ "use strict";
19
+
20
+ var app = angular.module('kibana', []),
21
+ // we will keep a reference to each module defined before boot, so that we can
22
+ // go back and allow it to define new features later. Once we boot, this will be false
23
+ pre_boot_modules = [],
24
+ // these are the functions that we need to call to register different
25
+ // features if we define them after boot time
26
+ register_fns = {};
27
+
28
+ /**
29
+ * Tells the application to watch the module, once bootstraping has completed
30
+ * the modules controller, service, etc. functions will be overwritten to register directly
31
+ * with this application.
32
+ * @param {[type]} module [description]
33
+ * @return {[type]} [description]
34
+ */
35
+ app.useModule = function (module) {
36
+ if (pre_boot_modules) {
37
+ pre_boot_modules.push(module);
38
+ } else {
39
+ _.extend(module, register_fns);
40
+ }
41
+ return module;
42
+ };
43
+
44
+ app.safeApply = function ($scope, fn) {
45
+ switch($scope.$$phase) {
46
+ case '$apply':
47
+ // $digest hasn't started, we should be good
48
+ $scope.$eval(fn);
49
+ break;
50
+ case '$digest':
51
+ // waiting to $apply the changes
52
+ setTimeout(function () { app.safeApply($scope, fn); }, 10);
53
+ break;
54
+ default:
55
+ // clear to begin an $apply $$phase
56
+ $scope.$apply(fn);
57
+ break;
58
+ }
59
+ };
60
+
61
+ app.config(function ($routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {
62
+ $routeProvider
63
+ .when('/dashboard', {
64
+ templateUrl: 'app/partials/dashboard.html',
65
+ })
66
+ .when('/dashboard/:kbnType/:kbnId', {
67
+ templateUrl: 'app/partials/dashboard.html',
68
+ })
69
+ .when('/dashboard/:kbnType/:kbnId/:params', {
70
+ templateUrl: 'app/partials/dashboard.html'
71
+ })
72
+ .otherwise({
73
+ redirectTo: 'dashboard'
74
+ });
75
+ // this is how the internet told me to dynamically add modules :/
76
+ register_fns.controller = $controllerProvider.register;
77
+ register_fns.directive = $compileProvider.directive;
78
+ register_fns.factory = $provide.factory;
79
+ register_fns.service = $provide.service;
80
+ register_fns.filter = $filterProvider.register;
81
+ });
82
+
83
+ var apps_deps = [
84
+ 'elasticjs.service',
85
+ '$strap.directives',
86
+ 'ngSanitize',
87
+ 'ngDragDrop',
88
+ 'kibana'
89
+ ];
90
+
91
+ _.each('controllers directives factories services filters'.split(' '),
92
+ function (type) {
93
+ var module_name = 'kibana.'+type;
94
+ // create the module
95
+ app.useModule(angular.module(module_name, []));
96
+ // push it into the apps dependencies
97
+ apps_deps.push(module_name);
98
+ });
99
+
100
+ app.panel_helpers = {
101
+ partial: function (name) {
102
+ return 'app/partials/'+name+'.html';
103
+ }
104
+ };
105
+
106
+ // load the core components
107
+ require([
108
+ 'controllers/all',
109
+ 'directives/all',
110
+ 'filters/all'
111
+ ], function () {
112
+
113
+ // bootstrap the app
114
+ angular
115
+ .element(document)
116
+ .ready(function() {
117
+ $('body').attr('ng-controller', 'DashCtrl');
118
+ angular.bootstrap(document, apps_deps)
119
+ .invoke(['$rootScope', function ($rootScope) {
120
+ _.each(pre_boot_modules, function (module) {
121
+ _.extend(module, register_fns);
122
+ });
123
+ pre_boot_modules = false;
124
+
125
+ $rootScope.requireContext = appLevelRequire;
126
+ $rootScope.require = function (deps, fn) {
127
+ var $scope = this;
128
+ $scope.requireContext(deps, function () {
129
+ var deps = _.toArray(arguments);
130
+ $scope.$apply(function () {
131
+ fn.apply($scope, deps);
132
+ });
133
+ });
134
+ };
135
+ }]);
136
+ });
137
+ });
138
+
139
+ return app;
140
+ });
@@ -0,0 +1,46 @@
1
+ define(['jquery'],
2
+ function ($) {
3
+ 'use strict';
4
+
5
+ /**
6
+ * jQuery extensions
7
+ */
8
+ var $win = $(window);
9
+
10
+ $.fn.place_tt = (function () {
11
+ var defaults = {
12
+ offset: 5,
13
+ css: {
14
+ position : 'absolute',
15
+ top : -1000,
16
+ left : 0,
17
+ color : "#c8c8c8",
18
+ padding : '10px',
19
+ 'font-size': '11pt',
20
+ 'font-weight' : 200,
21
+ 'background-color': '#1f1f1f',
22
+ 'border-radius': '5px',
23
+ }
24
+ };
25
+
26
+ return function (x, y, opts) {
27
+ opts = $.extend(true, {}, defaults, opts);
28
+ return this.each(function () {
29
+ var $tooltip = $(this), width, height;
30
+
31
+ $tooltip.css(opts.css);
32
+ if (!$.contains(document.body, $tooltip[0])) {
33
+ $tooltip.appendTo(document.body);
34
+ }
35
+
36
+ width = $tooltip.outerWidth(true);
37
+ height = $tooltip.outerHeight(true);
38
+
39
+ $tooltip.css('left', x + opts.offset + width > $win.width() ? x - opts.offset - width : x + opts.offset);
40
+ $tooltip.css('top', y + opts.offset + height > $win.height() ? y - opts.offset - height : y + opts.offset);
41
+ });
42
+ };
43
+ })();
44
+
45
+ return $;
46
+ });
@@ -0,0 +1,332 @@
1
+ define(['jquery', 'underscore'],
2
+ function($, _) {
3
+ 'use strict';
4
+
5
+ var kbn = {};
6
+
7
+ kbn.get_object_fields = function(obj) {
8
+ var field_array = [];
9
+ obj = kbn.flatten_json(obj._source);
10
+ for (var field in obj) {
11
+ field_array.push(field);
12
+ }
13
+ return field_array.sort();
14
+ };
15
+
16
+ kbn.get_all_fields = function(data) {
17
+ var fields = [];
18
+ _.each(data,function(hit) {
19
+ fields = _.uniq(fields.concat(_.keys(hit)));
20
+ });
21
+ // Remove stupid angular key
22
+ fields = _.without(fields,'$$hashKey');
23
+ return fields;
24
+ };
25
+
26
+ kbn.has_field = function(obj,field) {
27
+ var obj_fields = kbn.get_object_fields(obj);
28
+ if (_.inArray(obj_fields,field) < 0) {
29
+ return false;
30
+ } else {
31
+ return true;
32
+ }
33
+ };
34
+
35
+ kbn.get_related_fields = function(docs,field) {
36
+ var field_array = [];
37
+ _.each(docs, function(doc) {
38
+ var keys = _.keys(doc);
39
+ if(_.contains(keys,field)) {
40
+ field_array = field_array.concat(keys);
41
+ }
42
+ });
43
+ var counts = _.countBy(_.without(field_array,field),function(field){return field;});
44
+ return counts;
45
+ };
46
+
47
+ kbn.recurse_field_dots = function(object,field) {
48
+ var value = null;
49
+ var nested;
50
+ if (typeof object[field] !== 'undefined') {
51
+ value = object[field];
52
+ }
53
+ else if (nested = field.match(/(.*?)\.(.*)/)) {
54
+ if(typeof object[nested[1]] !== 'undefined') {
55
+ value = (typeof object[nested[1]][nested[2]] !== 'undefined') ?
56
+ object[nested[1]][nested[2]] : kbn.recurse_field_dots(
57
+ object[nested[1]],nested[2]);
58
+ }
59
+ }
60
+
61
+ return value;
62
+ };
63
+
64
+ kbn.top_field_values = function(docs,field,count,grouped) {
65
+ var all_values = _.pluck(docs,field),
66
+ groups = {},
67
+ counts,
68
+ hasArrays;
69
+ // manually grouping into pairs allows us to keep the original value,
70
+ _.each(all_values, function (value) {
71
+ var k;
72
+ if(_.isArray(value)) {
73
+ hasArrays = true;
74
+ }
75
+ if(_.isArray(value) && !grouped) {
76
+ k = value;
77
+ } else {
78
+ k = _.isUndefined(value) ? '' : [value.toString()];
79
+ }
80
+ _.each(k, function(key) {
81
+ if (_.has(groups, key)) {
82
+ groups[key][1] ++;
83
+ } else {
84
+ groups[key] = [(grouped ? value : key), 1];
85
+ }
86
+ });
87
+ });
88
+
89
+ counts = _.values(groups).sort(function(a, b) {
90
+ return a[1] - b[1];
91
+ }).reverse().slice(0,count);
92
+
93
+ return {
94
+ counts: counts,
95
+ hasArrays : hasArrays
96
+ };
97
+ };
98
+
99
+ /**
100
+ * Calculate a graph interval
101
+ *
102
+ * from:: Date object containing the start time
103
+ * to:: Date object containing the finish time
104
+ * size:: Calculate to approximately this many bars
105
+ * user_interval:: User specified histogram interval
106
+ *
107
+ */
108
+ kbn.calculate_interval = function(from,to,size,user_interval) {
109
+ if(_.isObject(from)) {
110
+ from = from.valueOf();
111
+ }
112
+ if(_.isObject(to)) {
113
+ to = to.valueOf();
114
+ }
115
+ return user_interval === 0 ? kbn.round_interval((to - from)/size) : user_interval;
116
+ };
117
+
118
+ kbn.round_interval = function(interval) {
119
+ switch (true) {
120
+ // 0.5s
121
+ case (interval <= 500):
122
+ return 100; // 0.1s
123
+ // 5s
124
+ case (interval <= 5000):
125
+ return 1000; // 1s
126
+ // 7.5s
127
+ case (interval <= 7500):
128
+ return 5000; // 5s
129
+ // 15s
130
+ case (interval <= 15000):
131
+ return 10000; // 10s
132
+ // 45s
133
+ case (interval <= 45000):
134
+ return 30000; // 30s
135
+ // 3m
136
+ case (interval <= 180000):
137
+ return 60000; // 1m
138
+ // 9m
139
+ case (interval <= 450000):
140
+ return 300000; // 5m
141
+ // 20m
142
+ case (interval <= 1200000):
143
+ return 600000; // 10m
144
+ // 45m
145
+ case (interval <= 2700000):
146
+ return 1800000; // 30m
147
+ // 2h
148
+ case (interval <= 7200000):
149
+ return 3600000; // 1h
150
+ // 6h
151
+ case (interval <= 21600000):
152
+ return 10800000; // 3h
153
+ // 24h
154
+ case (interval <= 86400000):
155
+ return 43200000; // 12h
156
+ // 48h
157
+ case (interval <= 172800000):
158
+ return 86400000; // 24h
159
+ // 1w
160
+ case (interval <= 604800000):
161
+ return 86400000; // 24h
162
+ // 3w
163
+ case (interval <= 1814400000):
164
+ return 604800000; // 1w
165
+ // 2y
166
+ case (interval < 3628800000):
167
+ return 2592000000; // 30d
168
+ default:
169
+ return 31536000000; // 1y
170
+ }
171
+ };
172
+
173
+ kbn.secondsToHms = function(seconds){
174
+ var numyears = Math.floor(seconds / 31536000);
175
+ if(numyears){
176
+ return numyears + 'y';
177
+ }
178
+ var numdays = Math.floor((seconds % 31536000) / 86400);
179
+ if(numdays){
180
+ return numdays + 'd';
181
+ }
182
+ var numhours = Math.floor(((seconds % 31536000) % 86400) / 3600);
183
+ if(numhours){
184
+ return numhours + 'h';
185
+ }
186
+ var numminutes = Math.floor((((seconds % 31536000) % 86400) % 3600) / 60);
187
+ if(numminutes){
188
+ return numminutes + 'm';
189
+ }
190
+ var numseconds = (((seconds % 31536000) % 86400) % 3600) % 60;
191
+ if(numseconds){
192
+ return numseconds + 's';
193
+ }
194
+ return 'less then a second'; //'just now' //or other string you like;
195
+ };
196
+
197
+ kbn.to_percent = function(number,outof) {
198
+ return Math.floor((number/outof)*10000)/100 + "%";
199
+ };
200
+
201
+ kbn.addslashes = function(str) {
202
+ str = str.replace(/\\/g, '\\\\');
203
+ str = str.replace(/\'/g, '\\\'');
204
+ str = str.replace(/\"/g, '\\"');
205
+ str = str.replace(/\0/g, '\\0');
206
+ return str;
207
+ };
208
+
209
+ kbn.interval_regex = /(\d+(?:\.\d+)?)([Mwdhmsy])/;
210
+
211
+ // histogram & trends
212
+ kbn.intervals_in_seconds = {
213
+ y: 31536000,
214
+ M: 2592000,
215
+ w: 604800,
216
+ d: 86400,
217
+ h: 3600,
218
+ m: 60,
219
+ s: 1
220
+ };
221
+
222
+ kbn.describe_interval = function (string) {
223
+ var matches = string.match(kbn.interval_regex);
224
+ if (!matches || !_.has(kbn.intervals_in_seconds, matches[2])) {
225
+ throw new Error('Invalid interval string, expexcting a number followed by one of "Mwdhmsy"');
226
+ } else {
227
+ return {
228
+ sec: kbn.intervals_in_seconds[matches[2]],
229
+ type: matches[2],
230
+ count: parseInt(matches[1], 10)
231
+ };
232
+ }
233
+ };
234
+
235
+ kbn.interval_to_ms = function(string) {
236
+ var info = kbn.describe_interval(string);
237
+ return info.sec * 1000 * info.count;
238
+ };
239
+
240
+ kbn.interval_to_seconds = function (string) {
241
+ var info = kbn.describe_interval(string);
242
+ return info.sec * info.count;
243
+ };
244
+
245
+ // This should go away, moment.js can do this
246
+ kbn.time_ago = function(string) {
247
+ return new Date(new Date().getTime() - (kbn.interval_to_ms(string)));
248
+ };
249
+
250
+ // LOL. hahahahaha. DIE.
251
+ kbn.flatten_json = function(object,root,array) {
252
+ if (typeof array === 'undefined') {
253
+ array = {};
254
+ }
255
+ if (typeof root === 'undefined') {
256
+ root = '';
257
+ }
258
+ for(var index in object) {
259
+ var obj = object[index];
260
+ var rootname = root.length === 0 ? index : root + '.' + index;
261
+ if(typeof obj === 'object' ) {
262
+ if(_.isArray(obj)) {
263
+ if(obj.length > 0 && typeof obj[0] === 'object') {
264
+ var strval = '';
265
+ for (var objidx = 0, objlen = obj.length; objidx < objlen; objidx++) {
266
+ if (objidx > 0) {
267
+ strval = strval + ', ';
268
+ }
269
+
270
+ strval = strval + JSON.stringify(obj[objidx]);
271
+ }
272
+ array[rootname] = strval;
273
+ } else if(obj.length === 1 && _.isNumber(obj[0])) {
274
+ array[rootname] = parseFloat(obj[0]);
275
+ } else {
276
+ array[rootname] = typeof obj === 'undefined' ? null : obj;
277
+ }
278
+ } else {
279
+ kbn.flatten_json(obj,rootname,array);
280
+ }
281
+ } else {
282
+ array[rootname] = typeof obj === 'undefined' ? null : obj;
283
+ }
284
+ }
285
+ return kbn.sortObj(array);
286
+ };
287
+
288
+ kbn.xmlEnt = function(value) {
289
+ if(_.isString(value)) {
290
+ var stg1 = value.replace(/</g, '&lt;')
291
+ .replace(/>/g, '&gt;')
292
+ .replace(/\r\n/g, '<br/>')
293
+ .replace(/\r/g, '<br/>')
294
+ .replace(/\n/g, '<br/>')
295
+ .replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;')
296
+ .replace(/ /g, '&nbsp;&nbsp;')
297
+ .replace(/&lt;del&gt;/g, '<del>')
298
+ .replace(/&lt;\/del&gt;/g, '</del>');
299
+ return stg1;
300
+ } else {
301
+ return value;
302
+ }
303
+ };
304
+
305
+ kbn.sortObj = function(arr) {
306
+ // Setup Arrays
307
+ var sortedKeys = [];
308
+ var sortedObj = {};
309
+ var i;
310
+ // Separate keys and sort them
311
+ for (i in arr) {
312
+ sortedKeys.push(i);
313
+ }
314
+ sortedKeys.sort();
315
+
316
+ // Reconstruct sorted obj based on keys
317
+ for (i in sortedKeys) {
318
+ sortedObj[sortedKeys[i]] = arr[sortedKeys[i]];
319
+ }
320
+ return sortedObj;
321
+ };
322
+
323
+ kbn.query_color_dot = function (color, diameter) {
324
+ return '<div class="icon-circle" style="' + [
325
+ 'display:inline-block',
326
+ 'color:' + color,
327
+ 'font-size:' + diameter + 'px',
328
+ ].join(';') + '"></div>';
329
+ };
330
+
331
+ return kbn;
332
+ });