sunspot_solr 2.2.2 → 2.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (256) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sunspot-solr +2 -6
  3. data/lib/sunspot/solr/server.rb +2 -3
  4. data/solr/README.txt +181 -181
  5. data/solr/bin/post +29 -19
  6. data/solr/bin/solr +247 -428
  7. data/solr/bin/solr.cmd +102 -256
  8. data/solr/bin/solr.in.cmd +15 -7
  9. data/solr/bin/solr.in.sh +26 -12
  10. data/solr/server/README.txt +110 -113
  11. data/solr/server/contexts/solr-jetty-context.xml +8 -8
  12. data/solr/server/etc/jetty-http.xml +47 -0
  13. data/solr/server/etc/jetty-https-ssl.xml +175 -159
  14. data/solr/server/etc/jetty-https.xml +53 -0
  15. data/solr/server/etc/jetty-ssl.xml +46 -0
  16. data/solr/server/etc/jetty.xml +189 -167
  17. data/solr/server/etc/webdefault.xml +527 -527
  18. data/solr/server/lib/javax.servlet-api-3.1.0.jar +0 -0
  19. data/solr/server/lib/jetty-continuation-9.2.11.v20150529.jar +0 -0
  20. data/solr/server/lib/jetty-deploy-9.2.11.v20150529.jar +0 -0
  21. data/solr/server/lib/jetty-http-9.2.11.v20150529.jar +0 -0
  22. data/solr/server/lib/jetty-io-9.2.11.v20150529.jar +0 -0
  23. data/solr/server/lib/jetty-jmx-9.2.11.v20150529.jar +0 -0
  24. data/solr/server/lib/jetty-rewrite-9.2.11.v20150529.jar +0 -0
  25. data/solr/server/lib/jetty-security-9.2.11.v20150529.jar +0 -0
  26. data/solr/server/lib/jetty-server-9.2.11.v20150529.jar +0 -0
  27. data/solr/server/lib/jetty-servlet-9.2.11.v20150529.jar +0 -0
  28. data/solr/server/lib/jetty-servlets-9.2.11.v20150529.jar +0 -0
  29. data/solr/server/lib/jetty-util-9.2.11.v20150529.jar +0 -0
  30. data/solr/server/lib/jetty-webapp-9.2.11.v20150529.jar +0 -0
  31. data/solr/server/lib/jetty-xml-9.2.11.v20150529.jar +0 -0
  32. data/solr/server/modules/http.mod +9 -0
  33. data/solr/server/modules/https.mod +9 -0
  34. data/solr/server/modules/server.mod +11 -0
  35. data/solr/server/modules/ssl.mod +9 -0
  36. data/solr/server/resources/jetty-logging.properties +1 -0
  37. data/solr/server/resources/log4j.properties +24 -24
  38. data/solr/server/solr-webapp/webapp/WEB-INF/lib/commons-exec-1.3.jar +0 -0
  39. data/solr/server/solr-webapp/webapp/WEB-INF/lib/{hadoop-annotations-2.3.0.jar → hadoop-annotations-2.6.0.jar} +0 -0
  40. data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-auth-2.6.0.jar +0 -0
  41. data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-common-2.6.0.jar +0 -0
  42. data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-hdfs-2.6.0.jar +0 -0
  43. data/solr/server/solr-webapp/webapp/WEB-INF/lib/htrace-core-3.0.4.jar +0 -0
  44. data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpclient-4.4.1.jar +0 -0
  45. data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpcore-4.4.1.jar +0 -0
  46. data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpmime-4.4.1.jar +0 -0
  47. data/solr/server/solr-webapp/webapp/WEB-INF/lib/jackson-core-2.5.4.jar +0 -0
  48. data/solr/server/solr-webapp/webapp/WEB-INF/lib/jackson-dataformat-smile-2.5.4.jar +0 -0
  49. data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-analyzers-common-5.0.0.jar → lucene-analyzers-common-5.3.1.jar} +0 -0
  50. data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-analyzers-kuromoji-5.0.0.jar → lucene-analyzers-kuromoji-5.3.1.jar} +0 -0
  51. data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-analyzers-phonetic-5.0.0.jar → lucene-analyzers-phonetic-5.3.1.jar} +0 -0
  52. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-backward-codecs-5.3.1.jar +0 -0
  53. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-codecs-5.3.1.jar +0 -0
  54. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-5.3.1.jar +0 -0
  55. data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-expressions-5.0.0.jar → lucene-expressions-5.3.1.jar} +0 -0
  56. data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-grouping-5.0.0.jar → lucene-grouping-5.3.1.jar} +0 -0
  57. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-highlighter-5.3.1.jar +0 -0
  58. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-join-5.3.1.jar +0 -0
  59. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-memory-5.3.1.jar +0 -0
  60. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-5.3.1.jar +0 -0
  61. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-queries-5.3.1.jar +0 -0
  62. data/solr/server/solr-webapp/webapp/WEB-INF/lib/{lucene-queryparser-5.0.0.jar → lucene-queryparser-5.3.1.jar} +0 -0
  63. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-sandbox-5.3.1.jar +0 -0
  64. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial-5.3.1.jar +0 -0
  65. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-suggest-5.3.1.jar +0 -0
  66. data/solr/server/solr-webapp/webapp/WEB-INF/lib/org.restlet-2.3.0.jar +0 -0
  67. data/solr/server/solr-webapp/webapp/WEB-INF/lib/org.restlet.ext.servlet-2.3.0.jar +0 -0
  68. data/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-core-5.3.1.jar +0 -0
  69. data/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-solrj-5.3.1.jar +0 -0
  70. data/solr/server/solr-webapp/webapp/WEB-INF/lib/t-digest-3.1.jar +0 -0
  71. data/solr/server/solr-webapp/webapp/WEB-INF/web.xml +169 -181
  72. data/solr/server/solr-webapp/webapp/WEB-INF/weblogic.xml +28 -28
  73. data/solr/server/solr-webapp/webapp/admin.html +164 -163
  74. data/solr/server/solr-webapp/webapp/css/angular/analysis.css +304 -0
  75. data/solr/server/solr-webapp/webapp/css/angular/chosen.css +465 -0
  76. data/solr/server/solr-webapp/webapp/css/angular/cloud.css +398 -0
  77. data/solr/server/solr-webapp/webapp/css/angular/common.css +724 -0
  78. data/solr/server/solr-webapp/webapp/css/angular/cores.css +233 -0
  79. data/solr/server/solr-webapp/webapp/css/angular/dataimport.css +370 -0
  80. data/solr/server/solr-webapp/webapp/css/angular/documents.css +179 -0
  81. data/solr/server/solr-webapp/webapp/css/angular/files.css +53 -0
  82. data/solr/server/solr-webapp/webapp/css/angular/index.css +206 -0
  83. data/solr/server/solr-webapp/webapp/css/angular/logging.css +376 -0
  84. data/solr/server/solr-webapp/webapp/css/angular/menu.css +321 -0
  85. data/solr/server/solr-webapp/webapp/css/angular/plugins.css +212 -0
  86. data/solr/server/solr-webapp/webapp/css/angular/query.css +162 -0
  87. data/solr/server/solr-webapp/webapp/css/angular/replication.css +500 -0
  88. data/solr/server/solr-webapp/webapp/css/angular/schema-browser.css +567 -0
  89. data/solr/server/solr-webapp/webapp/css/angular/segments.css +173 -0
  90. data/solr/server/solr-webapp/webapp/css/angular/threads.css +161 -0
  91. data/solr/server/solr-webapp/webapp/css/chosen.css +421 -421
  92. data/solr/server/solr-webapp/webapp/css/styles/analysis.css +311 -311
  93. data/solr/server/solr-webapp/webapp/css/styles/cloud.css +410 -410
  94. data/solr/server/solr-webapp/webapp/css/styles/common.css +701 -701
  95. data/solr/server/solr-webapp/webapp/css/styles/cores.css +244 -244
  96. data/solr/server/solr-webapp/webapp/css/styles/dashboard.css +155 -155
  97. data/solr/server/solr-webapp/webapp/css/styles/dataimport.css +403 -403
  98. data/solr/server/solr-webapp/webapp/css/styles/documents.css +197 -197
  99. data/solr/server/solr-webapp/webapp/css/styles/files.css +54 -54
  100. data/solr/server/solr-webapp/webapp/css/styles/index.css +207 -207
  101. data/solr/server/solr-webapp/webapp/css/styles/java-properties.css +52 -52
  102. data/solr/server/solr-webapp/webapp/css/styles/logging.css +391 -391
  103. data/solr/server/solr-webapp/webapp/css/styles/menu.css +329 -328
  104. data/solr/server/solr-webapp/webapp/css/styles/plugins.css +195 -195
  105. data/solr/server/solr-webapp/webapp/css/styles/query.css +173 -173
  106. data/solr/server/solr-webapp/webapp/css/styles/replication.css +515 -515
  107. data/solr/server/solr-webapp/webapp/css/styles/schema-browser.css +578 -578
  108. data/solr/server/solr-webapp/webapp/css/styles/segments.css +145 -0
  109. data/solr/server/solr-webapp/webapp/css/styles/threads.css +172 -172
  110. data/solr/server/solr-webapp/webapp/img/chosen-sprite-2x.png +0 -0
  111. data/solr/server/solr-webapp/webapp/img/filetypes/README +27 -27
  112. data/solr/server/solr-webapp/webapp/img/solr.svg +39 -39
  113. data/solr/server/solr-webapp/webapp/index.html +208 -0
  114. data/solr/server/solr-webapp/webapp/js/angular/app.js +713 -0
  115. data/solr/server/solr-webapp/webapp/js/angular/controllers/analysis.js +199 -0
  116. data/solr/server/solr-webapp/webapp/js/angular/controllers/cloud.js +528 -0
  117. data/solr/server/solr-webapp/webapp/js/angular/controllers/core-overview.js +225 -0
  118. data/solr/server/solr-webapp/webapp/js/angular/controllers/cores.js +465 -0
  119. data/solr/server/solr-webapp/webapp/js/angular/controllers/dataimport.js +284 -0
  120. data/solr/server/solr-webapp/webapp/js/angular/controllers/documents.js +139 -0
  121. data/solr/server/solr-webapp/webapp/js/angular/controllers/files.js +92 -0
  122. data/solr/server/solr-webapp/webapp/js/angular/controllers/index.js +95 -0
  123. data/solr/server/solr-webapp/webapp/js/angular/controllers/java-properties.js +45 -0
  124. data/solr/server/solr-webapp/webapp/js/angular/controllers/logging.js +146 -0
  125. data/solr/server/solr-webapp/webapp/js/angular/controllers/plugins.js +166 -0
  126. data/solr/server/solr-webapp/webapp/js/angular/controllers/query.js +99 -0
  127. data/solr/server/solr-webapp/webapp/js/angular/controllers/replication.js +227 -0
  128. data/solr/server/solr-webapp/webapp/js/angular/controllers/schema-browser.js +432 -0
  129. data/solr/server/solr-webapp/webapp/js/angular/controllers/segments.js +94 -0
  130. data/solr/server/solr-webapp/webapp/js/angular/controllers/threads.js +51 -0
  131. data/solr/server/solr-webapp/webapp/js/angular/services.js +214 -0
  132. data/solr/server/solr-webapp/webapp/js/lib/ZeroClipboard.js +342 -342
  133. data/solr/server/solr-webapp/webapp/js/lib/chosen.js +982 -982
  134. data/solr/server/solr-webapp/webapp/js/lib/console.js +29 -29
  135. data/solr/server/solr-webapp/webapp/js/lib/d3.js +9373 -9373
  136. data/solr/server/solr-webapp/webapp/js/lib/highlight.js +31 -31
  137. data/solr/server/solr-webapp/webapp/js/lib/jquery-1.7.2.min.js +30 -30
  138. data/solr/server/solr-webapp/webapp/js/lib/jquery.ajaxfileupload.js +184 -184
  139. data/solr/server/solr-webapp/webapp/js/lib/jquery.blockUI.js +523 -523
  140. data/solr/server/solr-webapp/webapp/js/lib/jquery.cookie.js +71 -71
  141. data/solr/server/solr-webapp/webapp/js/lib/jquery.form.js +806 -806
  142. data/solr/server/solr-webapp/webapp/js/lib/jquery.jstree.js +3534 -3534
  143. data/solr/server/solr-webapp/webapp/js/lib/jquery.sammy.js +1863 -1863
  144. data/solr/server/solr-webapp/webapp/js/lib/jquery.timeago.js +189 -189
  145. data/solr/server/solr-webapp/webapp/js/lib/linker.js +48 -48
  146. data/solr/server/solr-webapp/webapp/js/lib/naturalSort.js +82 -0
  147. data/solr/server/solr-webapp/webapp/js/lib/order.js +216 -216
  148. data/solr/server/solr-webapp/webapp/js/main.js +60 -58
  149. data/solr/server/solr-webapp/webapp/js/require.js +11349 -11349
  150. data/solr/server/solr-webapp/webapp/js/scripts/analysis.js +545 -545
  151. data/solr/server/solr-webapp/webapp/js/scripts/app.js +680 -679
  152. data/solr/server/solr-webapp/webapp/js/scripts/cloud.js +877 -877
  153. data/solr/server/solr-webapp/webapp/js/scripts/cores.js +719 -719
  154. data/solr/server/solr-webapp/webapp/js/scripts/dashboard.js +562 -562
  155. data/solr/server/solr-webapp/webapp/js/scripts/dataimport.js +812 -812
  156. data/solr/server/solr-webapp/webapp/js/scripts/documents.js +370 -370
  157. data/solr/server/solr-webapp/webapp/js/scripts/files.js +265 -265
  158. data/solr/server/solr-webapp/webapp/js/scripts/index.js +340 -340
  159. data/solr/server/solr-webapp/webapp/js/scripts/java-properties.js +106 -106
  160. data/solr/server/solr-webapp/webapp/js/scripts/logging.js +578 -576
  161. data/solr/server/solr-webapp/webapp/js/scripts/ping.js +72 -72
  162. data/solr/server/solr-webapp/webapp/js/scripts/plugins.js +462 -462
  163. data/solr/server/solr-webapp/webapp/js/scripts/query.js +229 -229
  164. data/solr/server/solr-webapp/webapp/js/scripts/replication.js +527 -527
  165. data/solr/server/solr-webapp/webapp/js/scripts/schema-browser.js +1229 -1229
  166. data/solr/server/solr-webapp/webapp/js/scripts/segments.js +206 -0
  167. data/solr/server/solr-webapp/webapp/js/scripts/threads.js +158 -158
  168. data/solr/server/solr-webapp/webapp/libs/angular-chosen.js +139 -0
  169. data/solr/server/solr-webapp/webapp/libs/angular-cookies.js +229 -0
  170. data/solr/server/solr-webapp/webapp/libs/angular-cookies.min.js +31 -0
  171. data/solr/server/solr-webapp/webapp/libs/angular-resource.min.js +36 -0
  172. data/solr/server/solr-webapp/webapp/libs/angular-route.js +1018 -0
  173. data/solr/server/solr-webapp/webapp/libs/angular-route.min.js +38 -0
  174. data/solr/server/solr-webapp/webapp/libs/angular-sanitize.js +703 -0
  175. data/solr/server/solr-webapp/webapp/libs/angular-sanitize.min.js +39 -0
  176. data/solr/server/solr-webapp/webapp/libs/angular.js +26093 -0
  177. data/solr/server/solr-webapp/webapp/libs/angular.min.js +273 -0
  178. data/solr/server/solr-webapp/webapp/libs/chosen.jquery.js +1194 -0
  179. data/solr/server/solr-webapp/webapp/libs/chosen.jquery.min.js +30 -0
  180. data/solr/server/solr-webapp/webapp/libs/d3.js +9373 -0
  181. data/solr/server/solr-webapp/webapp/libs/highlight.js +31 -0
  182. data/solr/server/solr-webapp/webapp/libs/jquery-2.1.3.min.js +29 -0
  183. data/solr/server/solr-webapp/webapp/libs/jquery.jstree.js +3534 -0
  184. data/solr/server/solr-webapp/webapp/libs/ngtimeago.js +102 -0
  185. data/solr/server/solr-webapp/webapp/partials/analysis.html +128 -0
  186. data/solr/server/solr-webapp/webapp/partials/cloud.html +104 -0
  187. data/solr/server/solr-webapp/webapp/partials/core_overview.html +227 -0
  188. data/solr/server/solr-webapp/webapp/partials/cores.html +231 -0
  189. data/solr/server/solr-webapp/webapp/partials/dataimport.html +209 -0
  190. data/solr/server/solr-webapp/webapp/partials/documents.html +118 -0
  191. data/solr/server/solr-webapp/webapp/partials/files.html +47 -0
  192. data/solr/server/solr-webapp/webapp/partials/index.html +261 -0
  193. data/solr/server/solr-webapp/webapp/partials/java-properties.html +27 -0
  194. data/solr/server/solr-webapp/webapp/partials/logging-levels.html +56 -0
  195. data/solr/server/solr-webapp/webapp/partials/logging.html +56 -0
  196. data/solr/server/solr-webapp/webapp/partials/plugins.html +72 -0
  197. data/solr/server/solr-webapp/webapp/partials/query.html +356 -0
  198. data/solr/server/solr-webapp/webapp/partials/replication.html +239 -0
  199. data/solr/server/solr-webapp/webapp/partials/schema-browser.html +206 -0
  200. data/solr/server/solr-webapp/webapp/partials/segments.html +99 -0
  201. data/solr/server/solr-webapp/webapp/partials/threads.html +65 -0
  202. data/solr/server/solr-webapp/webapp/tpl/analysis.html +83 -83
  203. data/solr/server/solr-webapp/webapp/tpl/cloud.html +87 -87
  204. data/solr/server/solr-webapp/webapp/tpl/cores.html +226 -226
  205. data/solr/server/solr-webapp/webapp/tpl/dashboard.html +201 -201
  206. data/solr/server/solr-webapp/webapp/tpl/dataimport.html +183 -183
  207. data/solr/server/solr-webapp/webapp/tpl/documents.html +107 -107
  208. data/solr/server/solr-webapp/webapp/tpl/files.html +44 -44
  209. data/solr/server/solr-webapp/webapp/tpl/index.html +250 -250
  210. data/solr/server/solr-webapp/webapp/tpl/logging.html +23 -23
  211. data/solr/server/solr-webapp/webapp/tpl/plugins.html +39 -39
  212. data/solr/server/solr-webapp/webapp/tpl/query.html +361 -361
  213. data/solr/server/solr-webapp/webapp/tpl/replication.html +216 -216
  214. data/solr/server/solr-webapp/webapp/tpl/schema-browser.html +192 -192
  215. data/solr/server/solr-webapp/webapp/tpl/segments.html +49 -0
  216. data/solr/server/solr-webapp/webapp/tpl/threads.html +56 -56
  217. data/solr/server/solr/README.txt +77 -77
  218. data/solr/server/solr/solr.xml +51 -51
  219. data/solr/server/solr/zoo.cfg +17 -17
  220. data/solr/server/start.jar +0 -0
  221. data/spec/server_spec.rb +3 -8
  222. metadata +132 -43
  223. data/solr/server/lib/jetty-continuation-8.1.10.v20130312.jar +0 -0
  224. data/solr/server/lib/jetty-deploy-8.1.10.v20130312.jar +0 -0
  225. data/solr/server/lib/jetty-http-8.1.10.v20130312.jar +0 -0
  226. data/solr/server/lib/jetty-io-8.1.10.v20130312.jar +0 -0
  227. data/solr/server/lib/jetty-jmx-8.1.10.v20130312.jar +0 -0
  228. data/solr/server/lib/jetty-security-8.1.10.v20130312.jar +0 -0
  229. data/solr/server/lib/jetty-server-8.1.10.v20130312.jar +0 -0
  230. data/solr/server/lib/jetty-servlet-8.1.10.v20130312.jar +0 -0
  231. data/solr/server/lib/jetty-util-8.1.10.v20130312.jar +0 -0
  232. data/solr/server/lib/jetty-webapp-8.1.10.v20130312.jar +0 -0
  233. data/solr/server/lib/jetty-xml-8.1.10.v20130312.jar +0 -0
  234. data/solr/server/lib/servlet-api-3.0.jar +0 -0
  235. data/solr/server/solr-webapp/webapp/.gitignore +0 -1
  236. data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-auth-2.3.0.jar +0 -0
  237. data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-common-2.3.0.jar +0 -0
  238. data/solr/server/solr-webapp/webapp/WEB-INF/lib/hadoop-hdfs-2.3.0.jar +0 -0
  239. data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpclient-4.3.1.jar +0 -0
  240. data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpcore-4.3.jar +0 -0
  241. data/solr/server/solr-webapp/webapp/WEB-INF/lib/httpmime-4.3.1.jar +0 -0
  242. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-backward-codecs-5.0.0.jar +0 -0
  243. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-codecs-5.0.0.jar +0 -0
  244. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-core-5.0.0.jar +0 -0
  245. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-highlighter-5.0.0.jar +0 -0
  246. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-join-5.0.0.jar +0 -0
  247. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-memory-5.0.0.jar +0 -0
  248. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-misc-5.0.0.jar +0 -0
  249. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-queries-5.0.0.jar +0 -0
  250. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-spatial-5.0.0.jar +0 -0
  251. data/solr/server/solr-webapp/webapp/WEB-INF/lib/lucene-suggest-5.0.0.jar +0 -0
  252. data/solr/server/solr-webapp/webapp/WEB-INF/lib/org.restlet-2.1.1.jar +0 -0
  253. data/solr/server/solr-webapp/webapp/WEB-INF/lib/org.restlet.ext.servlet-2.1.1.jar +0 -0
  254. data/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-core-5.0.0.jar +0 -0
  255. data/solr/server/solr-webapp/webapp/WEB-INF/lib/solr-solrj-5.0.0.jar +0 -0
  256. data/solr/server/webapps/solr.war +0 -0
@@ -1,877 +1,877 @@
1
- /*
2
- Licensed to the Apache Software Foundation (ASF) under one or more
3
- contributor license agreements. See the NOTICE file distributed with
4
- this work for additional information regarding copyright ownership.
5
- The ASF licenses this file to You under the Apache License, Version 2.0
6
- (the "License"); you may not use this file except in compliance with
7
- the License. You may obtain a copy of the License at
8
-
9
- http://www.apache.org/licenses/LICENSE-2.0
10
-
11
- Unless required by applicable law or agreed to in writing, software
12
- distributed under the License is distributed on an "AS IS" BASIS,
13
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- See the License for the specific language governing permissions and
15
- limitations under the License.
16
- */
17
-
18
- var zk_error = function zk_error( xhr, text_status, error_thrown )
19
- {
20
- var zk = null;
21
- try
22
- {
23
- eval( 'zk = ' + xhr.responseText + ';' );
24
- }
25
- catch( e ) {}
26
-
27
- var message = '<p class="txt">Loading of "<code>' + xhr.url + '</code>" '
28
- + 'failed (HTTP-Status <code>' + xhr.status + '</code>)</p>' + "\n";
29
-
30
- if( zk.error )
31
- {
32
- message += '<p class="msg">"' + zk.error.esc() + '"</p>' + "\n";
33
- }
34
-
35
- this.closest( '#cloud' )
36
- .html( '<div class="block" id="error">' + message + '</div>' );
37
- };
38
-
39
- var init_debug = function( cloud_element )
40
- {
41
- var debug_element = $( '#debug', cloud_element );
42
- var debug_button = $( '#menu #cloud .dump a' );
43
-
44
- var clipboard_element = $( '.clipboard', debug_element );
45
- var clipboard_button = $( 'a', clipboard_element );
46
-
47
- debug_button
48
- .die( 'click' )
49
- .live
50
- (
51
- 'click',
52
- function( event )
53
- {
54
- debug_element.trigger( 'show' );
55
- return false;
56
- }
57
- );
58
-
59
- $( '.close', debug_element )
60
- .die( 'click' )
61
- .live
62
- (
63
- 'click',
64
- function( event )
65
- {
66
- debug_element.trigger( 'hide' );
67
- return false;
68
- }
69
- );
70
-
71
- $( '.clipboard', debug_element )
72
- .die( 'click' )
73
- .live
74
- (
75
- 'click',
76
- function( event )
77
- {
78
- return false;
79
- }
80
- );
81
-
82
- debug_element
83
- .die( 'show' )
84
- .live
85
- (
86
- 'show',
87
- function( event )
88
- {
89
- debug_element.show();
90
-
91
- $.ajax
92
- (
93
- {
94
- url : app.config.solr_path + '/zookeeper?wt=json&dump=true',
95
- dataType : 'text',
96
- context : debug_element,
97
- beforeSend : function( xhr, settings )
98
- {
99
- $( '.debug', debug_element )
100
- .html( '<span class="loader">Loading Dump ...</span>' );
101
-
102
- ZeroClipboard.setMoviePath( 'img/ZeroClipboard.swf' );
103
-
104
- clipboard_client = new ZeroClipboard.Client();
105
-
106
- clipboard_client.addEventListener
107
- (
108
- 'load',
109
- function( client )
110
- {
111
- }
112
- );
113
-
114
- clipboard_client.addEventListener
115
- (
116
- 'complete',
117
- function( client, text )
118
- {
119
- clipboard_element
120
- .addClass( 'copied' );
121
-
122
- clipboard_button
123
- .data( 'text', clipboard_button.text() )
124
- .text( clipboard_button.data( 'copied' ) );
125
- }
126
- );
127
- },
128
- success : function( response, text_status, xhr )
129
- {
130
- clipboard_client.glue
131
- (
132
- clipboard_element.get(0),
133
- clipboard_button.get(0)
134
- );
135
-
136
- clipboard_client.setText( response.replace( /\\/g, '\\\\' ) );
137
-
138
- $( '.debug', debug_element )
139
- .removeClass( 'loader' )
140
- .text( response );
141
- },
142
- error : function( xhr, text_status, error_thrown )
143
- {
144
- },
145
- complete : function( xhr, text_status )
146
- {
147
- }
148
- }
149
- );
150
- }
151
- )
152
- .die( 'hide' )
153
- .live
154
- (
155
- 'hide',
156
- function( event )
157
- {
158
- $( '.debug', debug_element )
159
- .empty();
160
-
161
- clipboard_element
162
- .removeClass( 'copied' );
163
-
164
- clipboard_button
165
- .data( 'copied', clipboard_button.text() )
166
- .text( clipboard_button.data( 'text' ) );
167
-
168
- clipboard_client.destroy();
169
-
170
- debug_element.hide();
171
- }
172
- );
173
- };
174
-
175
- var helper_path_class = function( p )
176
- {
177
- var classes = [ 'link' ];
178
- classes.push( 'lvl-' + p.target.depth );
179
-
180
- if( p.target.data && p.target.data.leader )
181
- {
182
- classes.push( 'leader' );
183
- }
184
-
185
- if( p.target.data && p.target.data.state )
186
- {
187
- classes.push( p.target.data.state );
188
- }
189
-
190
- return classes.join( ' ' );
191
- };
192
-
193
- var helper_node_class = function( d )
194
- {
195
- var classes = [ 'node' ];
196
- classes.push( 'lvl-' + d.depth );
197
-
198
- if( d.data && d.data.leader )
199
- {
200
- classes.push( 'leader' );
201
- }
202
-
203
- if( d.data && d.data.state )
204
- {
205
- classes.push( d.data.state );
206
- }
207
-
208
- return classes.join( ' ' );
209
- };
210
-
211
- var helper_data = {
212
- protocol: [],
213
- host: [],
214
- hostname: [],
215
- port: [],
216
- pathname: []
217
- };
218
-
219
- var helper_node_text = function( d )
220
- {
221
- if( !d.data || !d.data.uri )
222
- {
223
- return d.name;
224
- }
225
-
226
- var name = d.data.uri.hostname;
227
-
228
- if( 1 !== helper_data.protocol.length )
229
- {
230
- name = d.data.uri.protocol + '//' + name;
231
- }
232
-
233
- if( 1 !== helper_data.port.length )
234
- {
235
- name += ':' + d.data.uri.port;
236
- }
237
-
238
- if( 1 !== helper_data.pathname.length )
239
- {
240
- name += d.data.uri.pathname;
241
- }
242
-
243
- return name;
244
- };
245
-
246
- var generate_graph = function( graph_element, graph_data, leaf_count )
247
- {
248
- var w = graph_element.width(),
249
- h = leaf_count * 20;
250
-
251
- var tree = d3.layout.tree()
252
- .size([h, w - 400]);
253
-
254
- var diagonal = d3.svg.diagonal()
255
- .projection(function(d) { return [d.y, d.x]; });
256
-
257
- var vis = d3.select( '#canvas' ).append( 'svg' )
258
- .attr( 'width', w )
259
- .attr( 'height', h)
260
- .append( 'g' )
261
- .attr( 'transform', 'translate(100, 0)' );
262
-
263
- var nodes = tree.nodes( graph_data );
264
-
265
- var link = vis.selectAll( 'path.link' )
266
- .data( tree.links( nodes ) )
267
- .enter().append( 'path' )
268
- .attr( 'class', helper_path_class )
269
- .attr( 'd', diagonal );
270
-
271
- var node = vis.selectAll( 'g.node' )
272
- .data( nodes )
273
- .enter().append( 'g' )
274
- .attr( 'class', helper_node_class )
275
- .attr( 'transform', function(d) { return 'translate(' + d.y + ',' + d.x + ')'; } )
276
-
277
- node.append( 'circle' )
278
- .attr( 'r', 4.5 );
279
-
280
- node.append( 'text' )
281
- .attr( 'dx', function( d ) { return 0 === d.depth ? -8 : 8; } )
282
- .attr( 'dy', function( d ) { return 5; } )
283
- .attr( 'text-anchor', function( d ) { return 0 === d.depth ? 'end' : 'start'; } )
284
- .attr( 'data-href', function( d ) { return d.name; } )
285
- .text( helper_node_text );
286
-
287
- $( 'text[data-href*="//"]', graph_element )
288
- .die( 'click' )
289
- .live
290
- (
291
- 'click',
292
- function()
293
- {
294
- location.href = $( this ).data( 'href' );
295
- }
296
- );
297
- };
298
-
299
- var generate_rgraph = function( graph_element, graph_data, leaf_count )
300
- {
301
- var max_val = Math.min( graph_element.width(), $( 'body' ).height() )
302
- var r = max_val / 2;
303
-
304
- var cluster = d3.layout.cluster()
305
- .size([360, r - 160]);
306
-
307
- var diagonal = d3.svg.diagonal.radial()
308
- .projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });
309
-
310
- var vis = d3.select( '#canvas' ).append( 'svg' )
311
- .attr( 'width', r * 2 )
312
- .attr( 'height', r * 2 )
313
- .append( 'g' )
314
- .attr( 'transform', 'translate(' + r + ',' + r + ')' );
315
-
316
- var nodes = cluster.nodes( graph_data );
317
-
318
- var link = vis.selectAll( 'path.link' )
319
- .data( cluster.links( nodes ) )
320
- .enter().append( 'path' )
321
- .attr( 'class', helper_path_class )
322
- .attr( 'd', diagonal );
323
-
324
- var node = vis.selectAll( 'g.node' )
325
- .data( nodes )
326
- .enter().append( 'g' )
327
- .attr( 'class', helper_node_class )
328
- .attr( 'transform', function(d) { return 'rotate(' + (d.x - 90) + ')translate(' + d.y + ')'; } )
329
-
330
- node.append( 'circle' )
331
- .attr( 'r', 4.5 );
332
-
333
- node.append( 'text' )
334
- .attr( 'dx', function(d) { return d.x < 180 ? 8 : -8; } )
335
- .attr( 'dy', '.31em' )
336
- .attr( 'text-anchor', function(d) { return d.x < 180 ? 'start' : 'end'; } )
337
- .attr( 'transform', function(d) { return d.x < 180 ? null : 'rotate(180)'; } )
338
- .attr( 'data-href', function( d ) { return d.name; } )
339
- .text( helper_node_text );
340
-
341
- $( 'text[data-href*="//"]', graph_element )
342
- .die( 'click' )
343
- .live
344
- (
345
- 'click',
346
- function()
347
- {
348
- location.href = $( this ).data( 'href' );
349
- }
350
- );
351
- };
352
-
353
- var prepare_graph_data = function( response, graph_element, live_nodes, callback )
354
- {
355
- var state = null;
356
- eval( 'state = ' + response.znode.data + ';' );
357
-
358
- var leaf_count = 0;
359
- var graph_data = {
360
- name: null,
361
- children : []
362
- };
363
-
364
- for( var c in state )
365
- {
366
- var shards = [];
367
- for( var s in state[c].shards )
368
- {
369
- var nodes = [];
370
- for( var n in state[c].shards[s].replicas )
371
- {
372
- leaf_count++;
373
- var replica = state[c].shards[s].replicas[n]
374
-
375
- var uri = replica.base_url;
376
- var parts = uri.match( /^(\w+:)\/\/(([\w\d\.-]+)(:(\d+))?)(.+)$/ );
377
- var uri_parts = {
378
- protocol: parts[1],
379
- host: parts[2],
380
- hostname: parts[3],
381
- port: parseInt( parts[5] || 80, 10 ),
382
- pathname: parts[6]
383
- };
384
-
385
- helper_data.protocol.push( uri_parts.protocol );
386
- helper_data.host.push( uri_parts.host );
387
- helper_data.hostname.push( uri_parts.hostname );
388
- helper_data.port.push( uri_parts.port );
389
- helper_data.pathname.push( uri_parts.pathname );
390
-
391
- var status = replica.state;
392
-
393
- if( !live_nodes[replica.node_name] )
394
- {
395
- status = 'gone';
396
- }
397
-
398
- var node = {
399
- name: uri,
400
- data: {
401
- type : 'node',
402
- state : status,
403
- leader : 'true' === replica.leader,
404
- uri : uri_parts
405
- }
406
- };
407
- nodes.push( node );
408
- }
409
-
410
- var shard = {
411
- name: s,
412
- data: {
413
- type : 'shard'
414
- },
415
- children: nodes
416
- };
417
- shards.push( shard );
418
- }
419
-
420
- var collection = {
421
- name: c,
422
- data: {
423
- type : 'collection'
424
- },
425
- children: shards
426
- };
427
- graph_data.children.push( collection );
428
- }
429
-
430
- helper_data.protocol = $.unique( helper_data.protocol );
431
- helper_data.host = $.unique( helper_data.host );
432
- helper_data.hostname = $.unique( helper_data.hostname );
433
- helper_data.port = $.unique( helper_data.port );
434
- helper_data.pathname = $.unique( helper_data.pathname );
435
-
436
- callback( graph_element, graph_data, leaf_count );
437
- }
438
-
439
- var update_status_filter = function(filterType, filterVal) {
440
- if (filterType == 'status') {
441
- $( '#cloudGraphPagingStatusFilter' ).val(filterVal);
442
- $( '#cloudGraphPagingStatusFilter' ).show();
443
- $( '#cloudGraphPagingFilter' ).hide();
444
- $( '#cloudGraphPagingFilter' ).val('');
445
- } else {
446
- $( '#cloudGraphPagingStatusFilter' ).hide();
447
- $( '#cloudGraphPagingStatusFilter' ).val('');
448
- $( '#cloudGraphPagingFilter' ).val(filterVal);
449
- $( '#cloudGraphPagingFilter' ).show();
450
- }
451
- };
452
-
453
- var prepare_graph = function( graph_element, callback )
454
- {
455
- $.ajax
456
- (
457
- {
458
- url : app.config.solr_path + '/zookeeper?wt=json&path=%2Flive_nodes',
459
- dataType : 'json',
460
- success : function( response, text_status, xhr )
461
- {
462
- var live_nodes = {};
463
- for( var c in response.tree[0].children )
464
- {
465
- live_nodes[response.tree[0].children[c].data.title] = true;
466
- }
467
-
468
- var start = $( '#cloudGraphPagingStart' ).val();
469
- var rows = $( '#cloudGraphPagingRows' ).val();
470
- var clusterStateUrl = app.config.solr_path + '/zookeeper?wt=json&detail=true&path=%2Fclusterstate.json&view=graph';
471
- if (start && rows)
472
- clusterStateUrl += ('&start='+start+'&rows='+rows);
473
-
474
- var filterType = $( '#cloudGraphPagingFilterType' ).val();
475
- if (filterType) {
476
- var filter = (filterType == 'status')
477
- ? $( '#cloudGraphPagingStatusFilter' ).val()
478
- : $( '#cloudGraphPagingFilter' ).val();
479
- if (filter)
480
- clusterStateUrl += ('&filterType='+filterType+'&filter='+filter);
481
- }
482
-
483
- $.ajax
484
- (
485
- {
486
- url : clusterStateUrl,
487
- dataType : 'json',
488
- context : graph_element,
489
- beforeSend : function( xhr, settings )
490
- {
491
- this.show();
492
- },
493
- success : function( response, text_status, xhr )
494
- {
495
- prepare_graph_data(response, graph_element, live_nodes, callback)
496
-
497
- if (response.znode && response.znode.paging) {
498
- var parr = response.znode.paging.split('|');
499
- if (parr.length < 3) {
500
- $( '#cloudGraphPaging' ).hide();
501
- return;
502
- }
503
-
504
- var start = Math.max(parseInt(parr[0]),0);
505
- var prevEnabled = (start > 0);
506
- $('#cloudGraphPagingPrev').prop('disabled', !prevEnabled);
507
- if (prevEnabled)
508
- $('#cloudGraphPagingPrev').show();
509
- else
510
- $('#cloudGraphPagingPrev').hide();
511
-
512
- var rows = parseInt(parr[1])
513
- var total = parseInt(parr[2])
514
- $( '#cloudGraphPagingStart' ).val(start);
515
- $( '#cloudGraphPagingRows' ).val(rows);
516
- if (rows == -1)
517
- $( '#cloudGraphPaging' ).hide();
518
-
519
- var filterType = parr.length > 3 ? parr[3] : '';
520
- if (filterType == '' || filterType == 'none') filterType = 'status';
521
-
522
- $( '#cloudGraphPagingFilterType' ).val(filterType);
523
- var filter = parr.length > 4 ? parr[4] : '';
524
-
525
- update_status_filter(filterType, filter);
526
-
527
- var page = Math.floor(start/rows)+1;
528
- var pages = Math.ceil(total/rows);
529
- var last = Math.min(start+rows,total);
530
- var nextEnabled = (last < total);
531
- $('#cloudGraphPagingNext').prop('disabled', !nextEnabled);
532
- if (nextEnabled)
533
- $('#cloudGraphPagingNext').show();
534
- else
535
- $('#cloudGraphPagingNext').hide();
536
-
537
- var status = (total > 0)
538
- ? 'Collections '+(start+1)+' - '+last+' of '+total+'. '
539
- : 'No collections found.';
540
- $( '#cloudGraphPagingStatus' ).html(status);
541
- } else {
542
- $( '#cloudGraphPaging' ).hide();
543
- }
544
- },
545
- error : function( xhr, text_status, error_thrown)
546
- {
547
- },
548
- complete : function( xhr, text_status )
549
- {
550
- }
551
- }
552
- );
553
- },
554
- error : function( xhr, text_status, error_thrown)
555
- {
556
- },
557
- complete : function( xhr, text_status )
558
- {
559
- }
560
- }
561
- );
562
-
563
- };
564
-
565
- var init_graph = function( graph_element )
566
- {
567
- prepare_graph
568
- (
569
- graph_element,
570
- function( graph_element, graph_data, leaf_count )
571
- {
572
- generate_graph( graph_element, graph_data, leaf_count );
573
- }
574
- );
575
- }
576
-
577
- var init_rgraph = function( graph_element )
578
- {
579
- prepare_graph
580
- (
581
- graph_element,
582
- function( graph_element, graph_data, leaf_count )
583
- {
584
- generate_rgraph( graph_element, graph_data, leaf_count );
585
- }
586
- );
587
- }
588
-
589
- var init_tree = function( tree_element )
590
- {
591
- $.ajax
592
- (
593
- {
594
- url : app.config.solr_path + '/zookeeper?wt=json',
595
- dataType : 'json',
596
- context : tree_element,
597
- beforeSend : function( xhr, settings )
598
- {
599
- this
600
- .show();
601
- },
602
- success : function( response, text_status, xhr )
603
- {
604
- var self = this;
605
-
606
- $( '#tree', this )
607
- .jstree
608
- (
609
- {
610
- "plugins" : [ "json_data" ],
611
- "json_data" : {
612
- "data" : response.tree,
613
- "progressive_render" : true
614
- },
615
- "core" : {
616
- "animation" : 0
617
- }
618
- }
619
- )
620
- .jstree
621
- (
622
- 'open_node',
623
- 'li:first'
624
- );
625
-
626
- var tree_links = $( '#tree a', this );
627
-
628
- tree_links
629
- .die( 'click' )
630
- .live
631
- (
632
- 'click',
633
- function( event )
634
- {
635
- $( 'a.active', $( this ).parents( '#tree' ) )
636
- .removeClass( 'active' );
637
-
638
- $( this )
639
- .addClass( 'active' );
640
-
641
- tree_element
642
- .addClass( 'show' );
643
-
644
- var file_content = $( '#file-content' );
645
-
646
- $( 'a.close', file_content )
647
- .die( 'click' )
648
- .live
649
- (
650
- 'click',
651
- function( event )
652
- {
653
- $( '#tree a.active' )
654
- .removeClass( 'active' );
655
-
656
- tree_element
657
- .removeClass( 'show' );
658
-
659
- return false;
660
- }
661
- );
662
-
663
- $.ajax
664
- (
665
- {
666
- url : this.href,
667
- dataType : 'json',
668
- context : file_content,
669
- beforeSend : function( xhr, settings )
670
- {
671
- },
672
- success : function( response, text_status, xhr )
673
- {
674
- var props = [];
675
- for( var key in response.znode.prop )
676
- {
677
- props.push
678
- (
679
- '<li><dl class="clearfix">' + "\n" +
680
- '<dt>' + key.esc() + '</dt>' + "\n" +
681
- '<dd>' + response.znode.prop[key].esc() + '</dd>' + "\n" +
682
- '</dl></li>'
683
- );
684
- }
685
-
686
- $( '#prop ul', this )
687
- .empty()
688
- .html( props.join( "\n" ) );
689
-
690
- $( '#prop ul li:odd', this )
691
- .addClass( 'odd' );
692
-
693
- var data_element = $( '#data', this );
694
-
695
- var highlight = false;
696
- var data = '<em>Node "' + response.znode.path + '" has no utf8 Content</em>';
697
-
698
- if( response.znode.data )
699
- {
700
- var classes = '';
701
- var path = response.znode.path.split( '.' );
702
-
703
- if( 1 < path.length )
704
- {
705
- highlight = true;
706
- classes = 'syntax language-' + path.pop().esc();
707
- }
708
-
709
- data = '<pre class="' + classes + '">'
710
- + response.znode.data.esc()
711
- + '</pre>';
712
- }
713
-
714
-
715
- data_element
716
- .show()
717
- .html( data );
718
-
719
- if( highlight )
720
- {
721
- hljs.highlightBlock( data_element.get(0) );
722
- }
723
-
724
- },
725
- error : function( xhr, text_status, error_thrown)
726
- {
727
- },
728
- complete : function( xhr, text_status )
729
- {
730
- }
731
- }
732
- );
733
-
734
- return false;
735
- }
736
- );
737
- },
738
- error : zk_error,
739
- complete : function( xhr, text_status )
740
- {
741
- }
742
- }
743
- );
744
- };
745
-
746
- // updates the starting position for paged navigation
747
- // and then rebuilds the graph based on the selected page
748
- var update_start = function(direction, cloud_element) {
749
- var start = $( '#cloudGraphPagingStart' ).val();
750
- var rows = $( '#cloudGraphPagingRows' ).val();
751
- var startAt = start ? parseInt(start) : 0;
752
- var numRows = rows ? parseInt(rows) : 20;
753
- var newStart = Math.max(startAt + (rows * direction),0);
754
- $( '#cloudGraphPagingStart' ).val(newStart);
755
-
756
- var graph_element = $( '#graph-content', cloud_element );
757
- $( '#canvas', graph_element).empty();
758
- init_graph( graph_element );
759
- };
760
-
761
- // #/~cloud
762
- sammy.get
763
- (
764
- /^#\/(~cloud)$/,
765
- function( context )
766
- {
767
- var content_element = $( '#content' );
768
-
769
- $.get
770
- (
771
- 'tpl/cloud.html',
772
- function( template )
773
- {
774
- content_element
775
- .html( template );
776
-
777
- var cloud_element = $( '#cloud', content_element );
778
- var navigation_element = $( '#menu #cloud' );
779
-
780
- init_debug( cloud_element );
781
-
782
- $( '.tree', navigation_element )
783
- .die( 'activate' )
784
- .live
785
- (
786
- 'activate',
787
- function( event )
788
- {
789
- $( this ).addClass( 'active' );
790
- init_tree( $( '#tree-content', cloud_element ) );
791
- }
792
- );
793
-
794
- $( '.graph', navigation_element )
795
- .die( 'activate' )
796
- .live
797
- (
798
- 'activate',
799
- function( event )
800
- {
801
- $( this ).addClass( 'active' );
802
- init_graph( $( '#graph-content', cloud_element ) );
803
-
804
- $('#cloudGraphPagingNext').click(function() {
805
- update_start(1, cloud_element);
806
- });
807
-
808
- $('#cloudGraphPagingPrev').click(function() {
809
- update_start(-1, cloud_element);
810
- });
811
-
812
- $('#cloudGraphPagingRows').change(function() {
813
- var rows = $( this ).val();
814
- if (!rows || rows == '')
815
- $( this ).val("20");
816
-
817
- // ? restart the start position when rows changes?
818
- $( '#cloudGraphPagingStart' ).val(0);
819
- update_start(-1, cloud_element);
820
- });
821
-
822
- $('#cloudGraphPagingFilter').change(function() {
823
- var filter = $( this ).val();
824
- // reset the start position when the filter changes
825
- $( '#cloudGraphPagingStart' ).val(0);
826
- update_start(-1, cloud_element);
827
- });
828
-
829
- $( '#cloudGraphPagingStatusFilter' ).show();
830
- $( '#cloudGraphPagingFilter' ).hide();
831
-
832
- $('#cloudGraphPagingFilterType').change(function() {
833
- update_status_filter($( this ).val(), '');
834
- });
835
-
836
- $('#cloudGraphPagingStatusFilter').change(function() {
837
- // just reset the paged navigation controls based on this update
838
- $( '#cloudGraphPagingStart' ).val(0);
839
- update_start(-1, cloud_element);
840
- });
841
-
842
- }
843
- );
844
-
845
- $( '.rgraph', navigation_element )
846
- .die( 'activate' )
847
- .live
848
- (
849
- 'activate',
850
- function( event )
851
- {
852
- $( "#cloudGraphPaging" ).hide(); // TODO: paging for rgraph too
853
-
854
- $( this ).addClass( 'active' );
855
- init_rgraph( $( '#graph-content', cloud_element ) );
856
- }
857
- );
858
-
859
- $.ajax
860
- (
861
- {
862
- url : app.config.solr_path + '/zookeeper?wt=json',
863
- dataType : 'json',
864
- context : cloud_element,
865
- success : function( response, text_status, xhr )
866
- {
867
- $( 'a[href="' + context.path + '"]', navigation_element )
868
- .trigger( 'activate' );
869
- },
870
- error : zk_error
871
- }
872
- );
873
-
874
- }
875
- );
876
- }
877
- );
1
+ /*
2
+ Licensed to the Apache Software Foundation (ASF) under one or more
3
+ contributor license agreements. See the NOTICE file distributed with
4
+ this work for additional information regarding copyright ownership.
5
+ The ASF licenses this file to You under the Apache License, Version 2.0
6
+ (the "License"); you may not use this file except in compliance with
7
+ the License. You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ */
17
+
18
+ var zk_error = function zk_error( xhr, text_status, error_thrown )
19
+ {
20
+ var zk = null;
21
+ try
22
+ {
23
+ eval( 'zk = ' + xhr.responseText + ';' );
24
+ }
25
+ catch( e ) {}
26
+
27
+ var message = '<p class="txt">Loading of "<code>' + xhr.url + '</code>" '
28
+ + 'failed (HTTP-Status <code>' + xhr.status + '</code>)</p>' + "\n";
29
+
30
+ if( zk.error )
31
+ {
32
+ message += '<p class="msg">"' + zk.error.esc() + '"</p>' + "\n";
33
+ }
34
+
35
+ this.closest( '#cloud' )
36
+ .html( '<div class="block" id="error">' + message + '</div>' );
37
+ };
38
+
39
+ var init_debug = function( cloud_element )
40
+ {
41
+ var debug_element = $( '#debug', cloud_element );
42
+ var debug_button = $( '#menu #cloud .dump a' );
43
+
44
+ var clipboard_element = $( '.clipboard', debug_element );
45
+ var clipboard_button = $( 'a', clipboard_element );
46
+
47
+ debug_button
48
+ .die( 'click' )
49
+ .live
50
+ (
51
+ 'click',
52
+ function( event )
53
+ {
54
+ debug_element.trigger( 'show' );
55
+ return false;
56
+ }
57
+ );
58
+
59
+ $( '.close', debug_element )
60
+ .die( 'click' )
61
+ .live
62
+ (
63
+ 'click',
64
+ function( event )
65
+ {
66
+ debug_element.trigger( 'hide' );
67
+ return false;
68
+ }
69
+ );
70
+
71
+ $( '.clipboard', debug_element )
72
+ .die( 'click' )
73
+ .live
74
+ (
75
+ 'click',
76
+ function( event )
77
+ {
78
+ return false;
79
+ }
80
+ );
81
+
82
+ debug_element
83
+ .die( 'show' )
84
+ .live
85
+ (
86
+ 'show',
87
+ function( event )
88
+ {
89
+ debug_element.show();
90
+
91
+ $.ajax
92
+ (
93
+ {
94
+ url : app.config.solr_path + '/zookeeper?wt=json&dump=true',
95
+ dataType : 'text',
96
+ context : debug_element,
97
+ beforeSend : function( xhr, settings )
98
+ {
99
+ $( '.debug', debug_element )
100
+ .html( '<span class="loader">Loading Dump ...</span>' );
101
+
102
+ ZeroClipboard.setMoviePath( 'img/ZeroClipboard.swf' );
103
+
104
+ clipboard_client = new ZeroClipboard.Client();
105
+
106
+ clipboard_client.addEventListener
107
+ (
108
+ 'load',
109
+ function( client )
110
+ {
111
+ }
112
+ );
113
+
114
+ clipboard_client.addEventListener
115
+ (
116
+ 'complete',
117
+ function( client, text )
118
+ {
119
+ clipboard_element
120
+ .addClass( 'copied' );
121
+
122
+ clipboard_button
123
+ .data( 'text', clipboard_button.text() )
124
+ .text( clipboard_button.data( 'copied' ) );
125
+ }
126
+ );
127
+ },
128
+ success : function( response, text_status, xhr )
129
+ {
130
+ clipboard_client.glue
131
+ (
132
+ clipboard_element.get(0),
133
+ clipboard_button.get(0)
134
+ );
135
+
136
+ clipboard_client.setText( response.replace( /\\/g, '\\\\' ) );
137
+
138
+ $( '.debug', debug_element )
139
+ .removeClass( 'loader' )
140
+ .text( response );
141
+ },
142
+ error : function( xhr, text_status, error_thrown )
143
+ {
144
+ },
145
+ complete : function( xhr, text_status )
146
+ {
147
+ }
148
+ }
149
+ );
150
+ }
151
+ )
152
+ .die( 'hide' )
153
+ .live
154
+ (
155
+ 'hide',
156
+ function( event )
157
+ {
158
+ $( '.debug', debug_element )
159
+ .empty();
160
+
161
+ clipboard_element
162
+ .removeClass( 'copied' );
163
+
164
+ clipboard_button
165
+ .data( 'copied', clipboard_button.text() )
166
+ .text( clipboard_button.data( 'text' ) );
167
+
168
+ clipboard_client.destroy();
169
+
170
+ debug_element.hide();
171
+ }
172
+ );
173
+ };
174
+
175
+ var helper_path_class = function( p )
176
+ {
177
+ var classes = [ 'link' ];
178
+ classes.push( 'lvl-' + p.target.depth );
179
+
180
+ if( p.target.data && p.target.data.leader )
181
+ {
182
+ classes.push( 'leader' );
183
+ }
184
+
185
+ if( p.target.data && p.target.data.state )
186
+ {
187
+ classes.push( p.target.data.state );
188
+ }
189
+
190
+ return classes.join( ' ' );
191
+ };
192
+
193
+ var helper_node_class = function( d )
194
+ {
195
+ var classes = [ 'node' ];
196
+ classes.push( 'lvl-' + d.depth );
197
+
198
+ if( d.data && d.data.leader )
199
+ {
200
+ classes.push( 'leader' );
201
+ }
202
+
203
+ if( d.data && d.data.state )
204
+ {
205
+ classes.push( d.data.state );
206
+ }
207
+
208
+ return classes.join( ' ' );
209
+ };
210
+
211
+ var helper_data = {
212
+ protocol: [],
213
+ host: [],
214
+ hostname: [],
215
+ port: [],
216
+ pathname: []
217
+ };
218
+
219
+ var helper_node_text = function( d )
220
+ {
221
+ if( !d.data || !d.data.uri )
222
+ {
223
+ return d.name;
224
+ }
225
+
226
+ var name = d.data.uri.hostname;
227
+
228
+ if( 1 !== helper_data.protocol.length )
229
+ {
230
+ name = d.data.uri.protocol + '//' + name;
231
+ }
232
+
233
+ if( 1 !== helper_data.port.length )
234
+ {
235
+ name += ':' + d.data.uri.port;
236
+ }
237
+
238
+ if( 1 !== helper_data.pathname.length )
239
+ {
240
+ name += d.data.uri.pathname;
241
+ }
242
+
243
+ return name;
244
+ };
245
+
246
+ var generate_graph = function( graph_element, graph_data, leaf_count )
247
+ {
248
+ var w = graph_element.width(),
249
+ h = leaf_count * 20;
250
+
251
+ var tree = d3.layout.tree()
252
+ .size([h, w - 400]);
253
+
254
+ var diagonal = d3.svg.diagonal()
255
+ .projection(function(d) { return [d.y, d.x]; });
256
+
257
+ var vis = d3.select( '#canvas' ).append( 'svg' )
258
+ .attr( 'width', w )
259
+ .attr( 'height', h)
260
+ .append( 'g' )
261
+ .attr( 'transform', 'translate(100, 0)' );
262
+
263
+ var nodes = tree.nodes( graph_data );
264
+
265
+ var link = vis.selectAll( 'path.link' )
266
+ .data( tree.links( nodes ) )
267
+ .enter().append( 'path' )
268
+ .attr( 'class', helper_path_class )
269
+ .attr( 'd', diagonal );
270
+
271
+ var node = vis.selectAll( 'g.node' )
272
+ .data( nodes )
273
+ .enter().append( 'g' )
274
+ .attr( 'class', helper_node_class )
275
+ .attr( 'transform', function(d) { return 'translate(' + d.y + ',' + d.x + ')'; } )
276
+
277
+ node.append( 'circle' )
278
+ .attr( 'r', 4.5 );
279
+
280
+ node.append( 'text' )
281
+ .attr( 'dx', function( d ) { return 0 === d.depth ? -8 : 8; } )
282
+ .attr( 'dy', function( d ) { return 5; } )
283
+ .attr( 'text-anchor', function( d ) { return 0 === d.depth ? 'end' : 'start'; } )
284
+ .attr( 'data-href', function( d ) { return d.name; } )
285
+ .text( helper_node_text );
286
+
287
+ $( 'text[data-href*="//"]', graph_element )
288
+ .die( 'click' )
289
+ .live
290
+ (
291
+ 'click',
292
+ function()
293
+ {
294
+ location.href = $( this ).data( 'href' );
295
+ }
296
+ );
297
+ };
298
+
299
+ var generate_rgraph = function( graph_element, graph_data, leaf_count )
300
+ {
301
+ var max_val = Math.min( graph_element.width(), $( 'body' ).height() )
302
+ var r = max_val / 2;
303
+
304
+ var cluster = d3.layout.cluster()
305
+ .size([360, r - 160]);
306
+
307
+ var diagonal = d3.svg.diagonal.radial()
308
+ .projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });
309
+
310
+ var vis = d3.select( '#canvas' ).append( 'svg' )
311
+ .attr( 'width', r * 2 )
312
+ .attr( 'height', r * 2 )
313
+ .append( 'g' )
314
+ .attr( 'transform', 'translate(' + r + ',' + r + ')' );
315
+
316
+ var nodes = cluster.nodes( graph_data );
317
+
318
+ var link = vis.selectAll( 'path.link' )
319
+ .data( cluster.links( nodes ) )
320
+ .enter().append( 'path' )
321
+ .attr( 'class', helper_path_class )
322
+ .attr( 'd', diagonal );
323
+
324
+ var node = vis.selectAll( 'g.node' )
325
+ .data( nodes )
326
+ .enter().append( 'g' )
327
+ .attr( 'class', helper_node_class )
328
+ .attr( 'transform', function(d) { return 'rotate(' + (d.x - 90) + ')translate(' + d.y + ')'; } )
329
+
330
+ node.append( 'circle' )
331
+ .attr( 'r', 4.5 );
332
+
333
+ node.append( 'text' )
334
+ .attr( 'dx', function(d) { return d.x < 180 ? 8 : -8; } )
335
+ .attr( 'dy', '.31em' )
336
+ .attr( 'text-anchor', function(d) { return d.x < 180 ? 'start' : 'end'; } )
337
+ .attr( 'transform', function(d) { return d.x < 180 ? null : 'rotate(180)'; } )
338
+ .attr( 'data-href', function( d ) { return d.name; } )
339
+ .text( helper_node_text );
340
+
341
+ $( 'text[data-href*="//"]', graph_element )
342
+ .die( 'click' )
343
+ .live
344
+ (
345
+ 'click',
346
+ function()
347
+ {
348
+ location.href = $( this ).data( 'href' );
349
+ }
350
+ );
351
+ };
352
+
353
+ var prepare_graph_data = function( response, graph_element, live_nodes, callback )
354
+ {
355
+ var state = null;
356
+ eval( 'state = ' + response.znode.data + ';' );
357
+
358
+ var leaf_count = 0;
359
+ var graph_data = {
360
+ name: null,
361
+ children : []
362
+ };
363
+
364
+ for( var c in state )
365
+ {
366
+ var shards = [];
367
+ for( var s in state[c].shards )
368
+ {
369
+ var nodes = [];
370
+ for( var n in state[c].shards[s].replicas )
371
+ {
372
+ leaf_count++;
373
+ var replica = state[c].shards[s].replicas[n]
374
+
375
+ var uri = replica.base_url;
376
+ var parts = uri.match( /^(\w+:)\/\/(([\w\d\.-]+)(:(\d+))?)(.+)$/ );
377
+ var uri_parts = {
378
+ protocol: parts[1],
379
+ host: parts[2],
380
+ hostname: parts[3],
381
+ port: parseInt( parts[5] || 80, 10 ),
382
+ pathname: parts[6]
383
+ };
384
+
385
+ helper_data.protocol.push( uri_parts.protocol );
386
+ helper_data.host.push( uri_parts.host );
387
+ helper_data.hostname.push( uri_parts.hostname );
388
+ helper_data.port.push( uri_parts.port );
389
+ helper_data.pathname.push( uri_parts.pathname );
390
+
391
+ var status = replica.state;
392
+
393
+ if( !live_nodes[replica.node_name] )
394
+ {
395
+ status = 'gone';
396
+ }
397
+
398
+ var node = {
399
+ name: uri,
400
+ data: {
401
+ type : 'node',
402
+ state : status,
403
+ leader : 'true' === replica.leader,
404
+ uri : uri_parts
405
+ }
406
+ };
407
+ nodes.push( node );
408
+ }
409
+
410
+ var shard = {
411
+ name: s,
412
+ data: {
413
+ type : 'shard'
414
+ },
415
+ children: nodes
416
+ };
417
+ shards.push( shard );
418
+ }
419
+
420
+ var collection = {
421
+ name: c,
422
+ data: {
423
+ type : 'collection'
424
+ },
425
+ children: shards
426
+ };
427
+ graph_data.children.push( collection );
428
+ }
429
+
430
+ helper_data.protocol = $.unique( helper_data.protocol );
431
+ helper_data.host = $.unique( helper_data.host );
432
+ helper_data.hostname = $.unique( helper_data.hostname );
433
+ helper_data.port = $.unique( helper_data.port );
434
+ helper_data.pathname = $.unique( helper_data.pathname );
435
+
436
+ callback( graph_element, graph_data, leaf_count );
437
+ }
438
+
439
+ var update_status_filter = function(filterType, filterVal) {
440
+ if (filterType == 'status') {
441
+ $( '#cloudGraphPagingStatusFilter' ).val(filterVal);
442
+ $( '#cloudGraphPagingStatusFilter' ).show();
443
+ $( '#cloudGraphPagingFilter' ).hide();
444
+ $( '#cloudGraphPagingFilter' ).val('');
445
+ } else {
446
+ $( '#cloudGraphPagingStatusFilter' ).hide();
447
+ $( '#cloudGraphPagingStatusFilter' ).val('');
448
+ $( '#cloudGraphPagingFilter' ).val(filterVal);
449
+ $( '#cloudGraphPagingFilter' ).show();
450
+ }
451
+ };
452
+
453
+ var prepare_graph = function( graph_element, callback )
454
+ {
455
+ $.ajax
456
+ (
457
+ {
458
+ url : app.config.solr_path + '/zookeeper?wt=json&path=%2Flive_nodes',
459
+ dataType : 'json',
460
+ success : function( response, text_status, xhr )
461
+ {
462
+ var live_nodes = {};
463
+ for( var c in response.tree[0].children )
464
+ {
465
+ live_nodes[response.tree[0].children[c].data.title] = true;
466
+ }
467
+
468
+ var start = $( '#cloudGraphPagingStart' ).val();
469
+ var rows = $( '#cloudGraphPagingRows' ).val();
470
+ var clusterStateUrl = app.config.solr_path + '/zookeeper?wt=json&detail=true&path=%2Fclusterstate.json&view=graph';
471
+ if (start && rows)
472
+ clusterStateUrl += ('&start='+start+'&rows='+rows);
473
+
474
+ var filterType = $( '#cloudGraphPagingFilterType' ).val();
475
+ if (filterType) {
476
+ var filter = (filterType == 'status')
477
+ ? $( '#cloudGraphPagingStatusFilter' ).val()
478
+ : $( '#cloudGraphPagingFilter' ).val();
479
+ if (filter)
480
+ clusterStateUrl += ('&filterType='+filterType+'&filter='+filter);
481
+ }
482
+
483
+ $.ajax
484
+ (
485
+ {
486
+ url : clusterStateUrl,
487
+ dataType : 'json',
488
+ context : graph_element,
489
+ beforeSend : function( xhr, settings )
490
+ {
491
+ this.show();
492
+ },
493
+ success : function( response, text_status, xhr )
494
+ {
495
+ prepare_graph_data(response, graph_element, live_nodes, callback)
496
+
497
+ if (response.znode && response.znode.paging) {
498
+ var parr = response.znode.paging.split('|');
499
+ if (parr.length < 3) {
500
+ $( '#cloudGraphPaging' ).hide();
501
+ return;
502
+ }
503
+
504
+ var start = Math.max(parseInt(parr[0]),0);
505
+ var prevEnabled = (start > 0);
506
+ $('#cloudGraphPagingPrev').prop('disabled', !prevEnabled);
507
+ if (prevEnabled)
508
+ $('#cloudGraphPagingPrev').show();
509
+ else
510
+ $('#cloudGraphPagingPrev').hide();
511
+
512
+ var rows = parseInt(parr[1])
513
+ var total = parseInt(parr[2])
514
+ $( '#cloudGraphPagingStart' ).val(start);
515
+ $( '#cloudGraphPagingRows' ).val(rows);
516
+ if (rows == -1)
517
+ $( '#cloudGraphPaging' ).hide();
518
+
519
+ var filterType = parr.length > 3 ? parr[3] : '';
520
+ if (filterType == '' || filterType == 'none') filterType = 'status';
521
+
522
+ $( '#cloudGraphPagingFilterType' ).val(filterType);
523
+ var filter = parr.length > 4 ? parr[4] : '';
524
+
525
+ update_status_filter(filterType, filter);
526
+
527
+ var page = Math.floor(start/rows)+1;
528
+ var pages = Math.ceil(total/rows);
529
+ var last = Math.min(start+rows,total);
530
+ var nextEnabled = (last < total);
531
+ $('#cloudGraphPagingNext').prop('disabled', !nextEnabled);
532
+ if (nextEnabled)
533
+ $('#cloudGraphPagingNext').show();
534
+ else
535
+ $('#cloudGraphPagingNext').hide();
536
+
537
+ var status = (total > 0)
538
+ ? 'Collections '+(start+1)+' - '+last+' of '+total+'. '
539
+ : 'No collections found.';
540
+ $( '#cloudGraphPagingStatus' ).html(status);
541
+ } else {
542
+ $( '#cloudGraphPaging' ).hide();
543
+ }
544
+ },
545
+ error : function( xhr, text_status, error_thrown)
546
+ {
547
+ },
548
+ complete : function( xhr, text_status )
549
+ {
550
+ }
551
+ }
552
+ );
553
+ },
554
+ error : function( xhr, text_status, error_thrown)
555
+ {
556
+ },
557
+ complete : function( xhr, text_status )
558
+ {
559
+ }
560
+ }
561
+ );
562
+
563
+ };
564
+
565
+ var init_graph = function( graph_element )
566
+ {
567
+ prepare_graph
568
+ (
569
+ graph_element,
570
+ function( graph_element, graph_data, leaf_count )
571
+ {
572
+ generate_graph( graph_element, graph_data, leaf_count );
573
+ }
574
+ );
575
+ }
576
+
577
+ var init_rgraph = function( graph_element )
578
+ {
579
+ prepare_graph
580
+ (
581
+ graph_element,
582
+ function( graph_element, graph_data, leaf_count )
583
+ {
584
+ generate_rgraph( graph_element, graph_data, leaf_count );
585
+ }
586
+ );
587
+ }
588
+
589
+ var init_tree = function( tree_element )
590
+ {
591
+ $.ajax
592
+ (
593
+ {
594
+ url : app.config.solr_path + '/zookeeper?wt=json',
595
+ dataType : 'json',
596
+ context : tree_element,
597
+ beforeSend : function( xhr, settings )
598
+ {
599
+ this
600
+ .show();
601
+ },
602
+ success : function( response, text_status, xhr )
603
+ {
604
+ var self = this;
605
+
606
+ $( '#tree', this )
607
+ .jstree
608
+ (
609
+ {
610
+ "plugins" : [ "json_data" ],
611
+ "json_data" : {
612
+ "data" : response.tree,
613
+ "progressive_render" : true
614
+ },
615
+ "core" : {
616
+ "animation" : 0
617
+ }
618
+ }
619
+ )
620
+ .jstree
621
+ (
622
+ 'open_node',
623
+ 'li:first'
624
+ );
625
+
626
+ var tree_links = $( '#tree a', this );
627
+
628
+ tree_links
629
+ .die( 'click' )
630
+ .live
631
+ (
632
+ 'click',
633
+ function( event )
634
+ {
635
+ $( 'a.active', $( this ).parents( '#tree' ) )
636
+ .removeClass( 'active' );
637
+
638
+ $( this )
639
+ .addClass( 'active' );
640
+
641
+ tree_element
642
+ .addClass( 'show' );
643
+
644
+ var file_content = $( '#file-content' );
645
+
646
+ $( 'a.close', file_content )
647
+ .die( 'click' )
648
+ .live
649
+ (
650
+ 'click',
651
+ function( event )
652
+ {
653
+ $( '#tree a.active' )
654
+ .removeClass( 'active' );
655
+
656
+ tree_element
657
+ .removeClass( 'show' );
658
+
659
+ return false;
660
+ }
661
+ );
662
+
663
+ $.ajax
664
+ (
665
+ {
666
+ url : this.href,
667
+ dataType : 'json',
668
+ context : file_content,
669
+ beforeSend : function( xhr, settings )
670
+ {
671
+ },
672
+ success : function( response, text_status, xhr )
673
+ {
674
+ var props = [];
675
+ for( var key in response.znode.prop )
676
+ {
677
+ props.push
678
+ (
679
+ '<li><dl class="clearfix">' + "\n" +
680
+ '<dt>' + key.esc() + '</dt>' + "\n" +
681
+ '<dd>' + response.znode.prop[key].esc() + '</dd>' + "\n" +
682
+ '</dl></li>'
683
+ );
684
+ }
685
+
686
+ $( '#prop ul', this )
687
+ .empty()
688
+ .html( props.join( "\n" ) );
689
+
690
+ $( '#prop ul li:odd', this )
691
+ .addClass( 'odd' );
692
+
693
+ var data_element = $( '#data', this );
694
+
695
+ var highlight = false;
696
+ var data = '<em>Node "' + response.znode.path + '" has no utf8 Content</em>';
697
+
698
+ if( response.znode.data )
699
+ {
700
+ var classes = '';
701
+ var path = response.znode.path.split( '.' );
702
+
703
+ if( 1 < path.length )
704
+ {
705
+ highlight = true;
706
+ classes = 'syntax language-' + path.pop().esc();
707
+ }
708
+
709
+ data = '<pre class="' + classes + '">'
710
+ + response.znode.data.esc()
711
+ + '</pre>';
712
+ }
713
+
714
+
715
+ data_element
716
+ .show()
717
+ .html( data );
718
+
719
+ if( highlight )
720
+ {
721
+ hljs.highlightBlock( data_element.get(0) );
722
+ }
723
+
724
+ },
725
+ error : function( xhr, text_status, error_thrown)
726
+ {
727
+ },
728
+ complete : function( xhr, text_status )
729
+ {
730
+ }
731
+ }
732
+ );
733
+
734
+ return false;
735
+ }
736
+ );
737
+ },
738
+ error : zk_error,
739
+ complete : function( xhr, text_status )
740
+ {
741
+ }
742
+ }
743
+ );
744
+ };
745
+
746
+ // updates the starting position for paged navigation
747
+ // and then rebuilds the graph based on the selected page
748
+ var update_start = function(direction, cloud_element) {
749
+ var start = $( '#cloudGraphPagingStart' ).val();
750
+ var rows = $( '#cloudGraphPagingRows' ).val();
751
+ var startAt = start ? parseInt(start) : 0;
752
+ var numRows = rows ? parseInt(rows) : 20;
753
+ var newStart = Math.max(startAt + (rows * direction),0);
754
+ $( '#cloudGraphPagingStart' ).val(newStart);
755
+
756
+ var graph_element = $( '#graph-content', cloud_element );
757
+ $( '#canvas', graph_element).empty();
758
+ init_graph( graph_element );
759
+ };
760
+
761
+ // #/~cloud
762
+ sammy.get
763
+ (
764
+ /^#\/(~cloud)$/,
765
+ function( context )
766
+ {
767
+ var content_element = $( '#content' );
768
+
769
+ $.get
770
+ (
771
+ 'tpl/cloud.html',
772
+ function( template )
773
+ {
774
+ content_element
775
+ .html( template );
776
+
777
+ var cloud_element = $( '#cloud', content_element );
778
+ var navigation_element = $( '#menu #cloud' );
779
+
780
+ init_debug( cloud_element );
781
+
782
+ $( '.tree', navigation_element )
783
+ .die( 'activate' )
784
+ .live
785
+ (
786
+ 'activate',
787
+ function( event )
788
+ {
789
+ $( this ).addClass( 'active' );
790
+ init_tree( $( '#tree-content', cloud_element ) );
791
+ }
792
+ );
793
+
794
+ $( '.graph', navigation_element )
795
+ .die( 'activate' )
796
+ .live
797
+ (
798
+ 'activate',
799
+ function( event )
800
+ {
801
+ $( this ).addClass( 'active' );
802
+ init_graph( $( '#graph-content', cloud_element ) );
803
+
804
+ $('#cloudGraphPagingNext').click(function() {
805
+ update_start(1, cloud_element);
806
+ });
807
+
808
+ $('#cloudGraphPagingPrev').click(function() {
809
+ update_start(-1, cloud_element);
810
+ });
811
+
812
+ $('#cloudGraphPagingRows').change(function() {
813
+ var rows = $( this ).val();
814
+ if (!rows || rows == '')
815
+ $( this ).val("20");
816
+
817
+ // ? restart the start position when rows changes?
818
+ $( '#cloudGraphPagingStart' ).val(0);
819
+ update_start(-1, cloud_element);
820
+ });
821
+
822
+ $('#cloudGraphPagingFilter').change(function() {
823
+ var filter = $( this ).val();
824
+ // reset the start position when the filter changes
825
+ $( '#cloudGraphPagingStart' ).val(0);
826
+ update_start(-1, cloud_element);
827
+ });
828
+
829
+ $( '#cloudGraphPagingStatusFilter' ).show();
830
+ $( '#cloudGraphPagingFilter' ).hide();
831
+
832
+ $('#cloudGraphPagingFilterType').change(function() {
833
+ update_status_filter($( this ).val(), '');
834
+ });
835
+
836
+ $('#cloudGraphPagingStatusFilter').change(function() {
837
+ // just reset the paged navigation controls based on this update
838
+ $( '#cloudGraphPagingStart' ).val(0);
839
+ update_start(-1, cloud_element);
840
+ });
841
+
842
+ }
843
+ );
844
+
845
+ $( '.rgraph', navigation_element )
846
+ .die( 'activate' )
847
+ .live
848
+ (
849
+ 'activate',
850
+ function( event )
851
+ {
852
+ $( "#cloudGraphPaging" ).hide(); // TODO: paging for rgraph too
853
+
854
+ $( this ).addClass( 'active' );
855
+ init_rgraph( $( '#graph-content', cloud_element ) );
856
+ }
857
+ );
858
+
859
+ $.ajax
860
+ (
861
+ {
862
+ url : app.config.solr_path + '/zookeeper?wt=json',
863
+ dataType : 'json',
864
+ context : cloud_element,
865
+ success : function( response, text_status, xhr )
866
+ {
867
+ $( 'a[href="' + context.path + '"]', navigation_element )
868
+ .trigger( 'activate' );
869
+ },
870
+ error : zk_error
871
+ }
872
+ );
873
+
874
+ }
875
+ );
876
+ }
877
+ );