rjack-solr 3.6.2.0-java → 4.0.0.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. data/History.rdoc +5 -0
  2. data/Manifest.txt +268 -33
  3. data/NOTICE.txt +1 -1
  4. data/README.rdoc +6 -6
  5. data/assembly.xml +2 -2
  6. data/bin/rjack-solr-fg +1 -1
  7. data/init/rjack-solr +2 -2
  8. data/lib/rjack-solr.rb +7 -2
  9. data/lib/rjack-solr/base.rb +2 -2
  10. data/lib/rjack-solr/commons-cli-1.2.jar +0 -0
  11. data/lib/rjack-solr/config.rb +1 -1
  12. data/lib/rjack-solr/server.rb +1 -1
  13. data/lib/rjack-solr/solr-core-4.0.0.jar +0 -0
  14. data/lib/rjack-solr/solr-solrj-4.0.0.jar +0 -0
  15. data/pom.xml +19 -6
  16. data/test/test_solr.rb +7 -5
  17. data/webapp/META-INF/LICENSE.txt +0 -940
  18. data/webapp/META-INF/MANIFEST.MF +5 -5
  19. data/webapp/META-INF/NOTICE.txt +160 -93
  20. data/webapp/WEB-INF/web.xml +57 -43
  21. data/webapp/admin.html +140 -0
  22. data/webapp/css/chosen.css +392 -0
  23. data/webapp/css/styles/analysis.css +293 -0
  24. data/webapp/css/styles/cloud.css +331 -0
  25. data/webapp/css/styles/common.css +593 -0
  26. data/webapp/css/styles/cores.css +203 -0
  27. data/webapp/css/styles/dashboard.css +127 -0
  28. data/webapp/css/styles/dataimport.css +222 -0
  29. data/webapp/css/styles/index.css +195 -0
  30. data/webapp/css/styles/java-properties.css +33 -0
  31. data/webapp/css/styles/logging.css +323 -0
  32. data/webapp/css/styles/menu.css +272 -0
  33. data/webapp/css/styles/plugins.css +175 -0
  34. data/webapp/css/styles/query.css +137 -0
  35. data/webapp/css/styles/replication.css +494 -0
  36. data/webapp/css/styles/schema-browser.css +476 -0
  37. data/webapp/css/styles/threads.css +153 -0
  38. data/webapp/img/ZeroClipboard.swf +0 -0
  39. data/webapp/img/chosen-sprite.png +0 -0
  40. data/webapp/img/div.gif +0 -0
  41. data/webapp/{admin → img}/favicon.ico +0 -0
  42. data/webapp/img/filetypes/7z.png +0 -0
  43. data/webapp/img/filetypes/README +27 -0
  44. data/webapp/img/filetypes/ai.png +0 -0
  45. data/webapp/img/filetypes/aiff.png +0 -0
  46. data/webapp/img/filetypes/asc.png +0 -0
  47. data/webapp/img/filetypes/audio.png +0 -0
  48. data/webapp/img/filetypes/bin.png +0 -0
  49. data/webapp/img/filetypes/bz2.png +0 -0
  50. data/webapp/img/filetypes/c.png +0 -0
  51. data/webapp/img/filetypes/cfc.png +0 -0
  52. data/webapp/img/filetypes/cfm.png +0 -0
  53. data/webapp/img/filetypes/chm.png +0 -0
  54. data/webapp/img/filetypes/class.png +0 -0
  55. data/webapp/img/filetypes/conf.png +0 -0
  56. data/webapp/img/filetypes/cpp.png +0 -0
  57. data/webapp/img/filetypes/cs.png +0 -0
  58. data/webapp/img/filetypes/css.png +0 -0
  59. data/webapp/img/filetypes/csv.png +0 -0
  60. data/webapp/img/filetypes/deb.png +0 -0
  61. data/webapp/img/filetypes/divx.png +0 -0
  62. data/webapp/img/filetypes/doc.png +0 -0
  63. data/webapp/img/filetypes/dot.png +0 -0
  64. data/webapp/img/filetypes/eml.png +0 -0
  65. data/webapp/img/filetypes/enc.png +0 -0
  66. data/webapp/img/filetypes/file.png +0 -0
  67. data/webapp/img/filetypes/gif.png +0 -0
  68. data/webapp/img/filetypes/gz.png +0 -0
  69. data/webapp/img/filetypes/hlp.png +0 -0
  70. data/webapp/img/filetypes/htm.png +0 -0
  71. data/webapp/img/filetypes/html.png +0 -0
  72. data/webapp/img/filetypes/image.png +0 -0
  73. data/webapp/img/filetypes/iso.png +0 -0
  74. data/webapp/img/filetypes/jar.png +0 -0
  75. data/webapp/img/filetypes/java.png +0 -0
  76. data/webapp/img/filetypes/jpeg.png +0 -0
  77. data/webapp/img/filetypes/jpg.png +0 -0
  78. data/webapp/img/filetypes/js.png +0 -0
  79. data/webapp/img/filetypes/lua.png +0 -0
  80. data/webapp/img/filetypes/m.png +0 -0
  81. data/webapp/img/filetypes/mm.png +0 -0
  82. data/webapp/img/filetypes/mov.png +0 -0
  83. data/webapp/img/filetypes/mp3.png +0 -0
  84. data/webapp/img/filetypes/mpg.png +0 -0
  85. data/webapp/img/filetypes/odc.png +0 -0
  86. data/webapp/img/filetypes/odf.png +0 -0
  87. data/webapp/img/filetypes/odg.png +0 -0
  88. data/webapp/img/filetypes/odi.png +0 -0
  89. data/webapp/img/filetypes/odp.png +0 -0
  90. data/webapp/img/filetypes/ods.png +0 -0
  91. data/webapp/img/filetypes/odt.png +0 -0
  92. data/webapp/img/filetypes/ogg.png +0 -0
  93. data/webapp/img/filetypes/pdf.png +0 -0
  94. data/webapp/img/filetypes/pgp.png +0 -0
  95. data/webapp/img/filetypes/php.png +0 -0
  96. data/webapp/img/filetypes/pl.png +0 -0
  97. data/webapp/img/filetypes/png.png +0 -0
  98. data/webapp/img/filetypes/ppt.png +0 -0
  99. data/webapp/img/filetypes/ps.png +0 -0
  100. data/webapp/img/filetypes/py.png +0 -0
  101. data/webapp/img/filetypes/ram.png +0 -0
  102. data/webapp/img/filetypes/rar.png +0 -0
  103. data/webapp/img/filetypes/rb.png +0 -0
  104. data/webapp/img/filetypes/rm.png +0 -0
  105. data/webapp/img/filetypes/rpm.png +0 -0
  106. data/webapp/img/filetypes/rtf.png +0 -0
  107. data/webapp/img/filetypes/sig.png +0 -0
  108. data/webapp/img/filetypes/sql.png +0 -0
  109. data/webapp/img/filetypes/swf.png +0 -0
  110. data/webapp/img/filetypes/sxc.png +0 -0
  111. data/webapp/img/filetypes/sxd.png +0 -0
  112. data/webapp/img/filetypes/sxi.png +0 -0
  113. data/webapp/img/filetypes/sxw.png +0 -0
  114. data/webapp/img/filetypes/tar.png +0 -0
  115. data/webapp/img/filetypes/tex.png +0 -0
  116. data/webapp/img/filetypes/tgz.png +0 -0
  117. data/webapp/img/filetypes/txt.png +0 -0
  118. data/webapp/img/filetypes/vcf.png +0 -0
  119. data/webapp/img/filetypes/video.png +0 -0
  120. data/webapp/img/filetypes/vsd.png +0 -0
  121. data/webapp/img/filetypes/wav.png +0 -0
  122. data/webapp/img/filetypes/wma.png +0 -0
  123. data/webapp/img/filetypes/wmv.png +0 -0
  124. data/webapp/img/filetypes/xls.png +0 -0
  125. data/webapp/img/filetypes/xml.png +0 -0
  126. data/webapp/img/filetypes/xpi.png +0 -0
  127. data/webapp/img/filetypes/xvid.png +0 -0
  128. data/webapp/img/filetypes/zip.png +0 -0
  129. data/webapp/img/ico/arrow-000-small.png +0 -0
  130. data/webapp/img/ico/arrow-circle.png +0 -0
  131. data/webapp/img/ico/arrow-switch.png +0 -0
  132. data/webapp/img/ico/asterisk.png +0 -0
  133. data/webapp/img/ico/battery.png +0 -0
  134. data/webapp/img/ico/block-small.png +0 -0
  135. data/webapp/img/ico/block.png +0 -0
  136. data/webapp/img/ico/book-open-text.png +0 -0
  137. data/webapp/img/ico/box.png +0 -0
  138. data/webapp/img/ico/bug.png +0 -0
  139. data/webapp/img/ico/chart.png +0 -0
  140. data/webapp/img/ico/chevron-small-expand.png +0 -0
  141. data/webapp/img/ico/chevron-small.png +0 -0
  142. data/webapp/img/ico/clipboard-list.png +0 -0
  143. data/webapp/img/ico/clipboard-paste-document-text.png +0 -0
  144. data/webapp/img/ico/clipboard-paste.png +0 -0
  145. data/webapp/img/ico/clock-select-remain.png +0 -0
  146. data/webapp/img/ico/clock-select.png +0 -0
  147. data/webapp/img/ico/construction.png +0 -0
  148. data/webapp/img/ico/cross-0.png +0 -0
  149. data/webapp/img/ico/cross-1.png +0 -0
  150. data/webapp/img/ico/cross.png +0 -0
  151. data/webapp/img/ico/dashboard.png +0 -0
  152. data/webapp/img/ico/database.png +0 -0
  153. data/webapp/img/ico/databases.png +0 -0
  154. data/webapp/img/ico/disk-black.png +0 -0
  155. data/webapp/img/ico/document-convert.png +0 -0
  156. data/webapp/img/ico/document-import.png +0 -0
  157. data/webapp/img/ico/document-list.png +0 -0
  158. data/webapp/img/ico/document-text.png +0 -0
  159. data/webapp/img/ico/download-cloud.png +0 -0
  160. data/webapp/img/ico/exclamation-button.png +0 -0
  161. data/webapp/img/ico/eye.png +0 -0
  162. data/webapp/img/ico/folder-export.png +0 -0
  163. data/webapp/img/ico/folder-tree.png +0 -0
  164. data/webapp/img/ico/folder.png +0 -0
  165. data/webapp/img/ico/funnel-small.png +0 -0
  166. data/webapp/img/ico/funnel.png +0 -0
  167. data/webapp/img/ico/gear.png +0 -0
  168. data/webapp/img/ico/globe-network.png +0 -0
  169. data/webapp/img/ico/globe.png +0 -0
  170. data/webapp/img/ico/hammer-screwdriver.png +0 -0
  171. data/webapp/img/ico/hand.png +0 -0
  172. data/webapp/img/ico/highlighter-text.png +0 -0
  173. data/webapp/img/ico/hourglass--exclamation.png +0 -0
  174. data/webapp/img/ico/hourglass.png +0 -0
  175. data/webapp/img/ico/inbox-document-text.png +0 -0
  176. data/webapp/img/ico/information-button.png +0 -0
  177. data/webapp/img/ico/information-small.png +0 -0
  178. data/webapp/img/ico/information-white.png +0 -0
  179. data/webapp/img/ico/information.png +0 -0
  180. data/webapp/img/ico/jar.png +0 -0
  181. data/webapp/img/ico/magnifier.png +0 -0
  182. data/webapp/img/ico/mail.png +0 -0
  183. data/webapp/img/ico/memory.png +0 -0
  184. data/webapp/img/ico/molecule.png +0 -0
  185. data/webapp/img/ico/network-cloud.png +0 -0
  186. data/webapp/img/ico/network-status-away.png +0 -0
  187. data/webapp/img/ico/network-status-busy.png +0 -0
  188. data/webapp/img/ico/network-status-offline.png +0 -0
  189. data/webapp/img/ico/network-status.png +0 -0
  190. data/webapp/img/ico/network.png +0 -0
  191. data/webapp/img/ico/node-design.png +0 -0
  192. data/webapp/img/ico/node-master.png +0 -0
  193. data/webapp/img/ico/node-select.png +0 -0
  194. data/webapp/img/ico/node-slave.png +0 -0
  195. data/webapp/img/ico/node.png +0 -0
  196. data/webapp/img/ico/pencil-small.png +0 -0
  197. data/webapp/img/ico/plus-button.png +0 -0
  198. data/webapp/img/ico/processor.png +0 -0
  199. data/webapp/img/ico/prohibition.png +0 -0
  200. data/webapp/img/ico/property.png +0 -0
  201. data/webapp/img/ico/question-small-white.png +0 -0
  202. data/webapp/img/ico/question-white.png +0 -0
  203. data/webapp/img/ico/question.png +0 -0
  204. data/webapp/img/ico/receipt-invoice.png +0 -0
  205. data/webapp/img/ico/receipt.png +0 -0
  206. data/webapp/img/ico/script-code.png +0 -0
  207. data/webapp/img/ico/server-cast.png +0 -0
  208. data/webapp/img/ico/server.png +0 -0
  209. data/webapp/img/ico/sitemap.png +0 -0
  210. data/webapp/img/ico/slash.png +0 -0
  211. data/webapp/img/ico/status-away.png +0 -0
  212. data/webapp/img/ico/status-busy.png +0 -0
  213. data/webapp/img/ico/status-offline.png +0 -0
  214. data/webapp/img/ico/status.png +0 -0
  215. data/webapp/img/ico/system-monitor--exclamation.png +0 -0
  216. data/webapp/img/ico/system-monitor.png +0 -0
  217. data/webapp/img/ico/table.png +0 -0
  218. data/webapp/img/ico/terminal.png +0 -0
  219. data/webapp/img/ico/tick-circle.png +0 -0
  220. data/webapp/img/ico/tick-red.png +0 -0
  221. data/webapp/img/ico/tick.png +0 -0
  222. data/webapp/img/ico/toggle-small-expand.png +0 -0
  223. data/webapp/img/ico/toggle-small.png +0 -0
  224. data/webapp/img/ico/toolbox.png +0 -0
  225. data/webapp/img/ico/ui-accordion.png +0 -0
  226. data/webapp/img/ico/ui-address-bar.png +0 -0
  227. data/webapp/img/ico/ui-check-box-uncheck.png +0 -0
  228. data/webapp/img/ico/ui-check-box.png +0 -0
  229. data/webapp/img/ico/ui-radio-button-uncheck.png +0 -0
  230. data/webapp/img/ico/ui-radio-button.png +0 -0
  231. data/webapp/img/ico/ui-text-field-select.png +0 -0
  232. data/webapp/img/ico/users.png +0 -0
  233. data/webapp/img/ico/wooden-box.png +0 -0
  234. data/webapp/img/ico/zone.png +0 -0
  235. data/webapp/img/loader-light.gif +0 -0
  236. data/webapp/img/loader.gif +0 -0
  237. data/webapp/img/lucene-ico.png +0 -0
  238. data/webapp/img/solr-ico.png +0 -0
  239. data/webapp/{admin/solr_small.png → img/solr.png} +0 -0
  240. data/webapp/img/tree.png +0 -0
  241. data/webapp/js/lib/ZeroClipboard.js +317 -0
  242. data/webapp/js/lib/chosen.js +953 -0
  243. data/webapp/{admin/get-properties.jsp → js/lib/console.js} +13 -10
  244. data/webapp/js/lib/d3.js +9342 -0
  245. data/webapp/js/lib/highlight.js +1 -0
  246. data/webapp/{admin/jquery-1.4.3.min.js → js/lib/jquery-1.7.2.min.js} +0 -0
  247. data/webapp/js/lib/jquery.blockUI.js +499 -0
  248. data/webapp/js/lib/jquery.cookie.js +47 -0
  249. data/webapp/js/lib/jquery.form.js +782 -0
  250. data/webapp/js/lib/jquery.jstree.js +3510 -0
  251. data/webapp/js/lib/jquery.sammy.js +1856 -0
  252. data/webapp/js/lib/jquery.sparkline.js +1271 -0
  253. data/webapp/js/lib/jquery.timeago.js +165 -0
  254. data/webapp/js/lib/linker.js +48 -0
  255. data/webapp/js/lib/order.js +189 -0
  256. data/webapp/js/main.js +57 -0
  257. data/webapp/js/require.js +11319 -0
  258. data/webapp/js/scripts/analysis.js +549 -0
  259. data/webapp/js/scripts/app.js +368 -0
  260. data/webapp/js/scripts/cloud.js +719 -0
  261. data/webapp/js/scripts/cores.js +540 -0
  262. data/webapp/js/scripts/dashboard.js +540 -0
  263. data/webapp/js/scripts/dataimport.js +567 -0
  264. data/webapp/js/scripts/file.js +56 -0
  265. data/webapp/js/scripts/index.js +344 -0
  266. data/webapp/js/scripts/java-properties.js +107 -0
  267. data/webapp/js/scripts/logging.js +519 -0
  268. data/webapp/js/scripts/ping.js +72 -0
  269. data/webapp/js/scripts/plugins.js +426 -0
  270. data/webapp/js/scripts/query.js +170 -0
  271. data/webapp/js/scripts/replication.js +557 -0
  272. data/webapp/js/scripts/schema-browser.js +1206 -0
  273. data/webapp/js/scripts/threads.js +159 -0
  274. data/webapp/tpl/analysis.html +83 -0
  275. data/webapp/tpl/cloud.html +54 -0
  276. data/webapp/tpl/cores.html +215 -0
  277. data/webapp/tpl/dashboard.html +164 -0
  278. data/webapp/tpl/dataimport.html +123 -0
  279. data/webapp/tpl/index.html +250 -0
  280. data/webapp/tpl/logging.html +23 -0
  281. data/webapp/tpl/plugins.html +39 -0
  282. data/webapp/tpl/query.html +318 -0
  283. data/webapp/tpl/replication.html +207 -0
  284. data/webapp/tpl/schema-browser.html +178 -0
  285. data/webapp/tpl/threads.html +56 -0
  286. metadata +307 -40
  287. data/lib/rjack-solr/solr-core-3.6.2.jar +0 -0
  288. data/lib/rjack-solr/solr-solrj-3.6.2.jar +0 -0
  289. data/webapp/admin/_info.jsp +0 -120
  290. data/webapp/admin/action.jsp +0 -94
  291. data/webapp/admin/analysis.jsp +0 -496
  292. data/webapp/admin/analysis.xsl +0 -179
  293. data/webapp/admin/dataimport.jsp +0 -53
  294. data/webapp/admin/debug.jsp +0 -103
  295. data/webapp/admin/distributiondump.jsp +0 -160
  296. data/webapp/admin/form.jsp +0 -152
  297. data/webapp/admin/get-file.jsp +0 -72
  298. data/webapp/admin/header.jsp +0 -44
  299. data/webapp/admin/index.jsp +0 -162
  300. data/webapp/admin/meta.xsl +0 -34
  301. data/webapp/admin/ping.jsp +0 -52
  302. data/webapp/admin/ping.xsl +0 -71
  303. data/webapp/admin/raw-schema.jsp +0 -38
  304. data/webapp/admin/registry.jsp +0 -107
  305. data/webapp/admin/registry.xsl +0 -321
  306. data/webapp/admin/replication/header.jsp +0 -89
  307. data/webapp/admin/replication/index.jsp +0 -378
  308. data/webapp/admin/schema.jsp +0 -690
  309. data/webapp/admin/solr-admin.css +0 -215
  310. data/webapp/admin/stats.jsp +0 -92
  311. data/webapp/admin/stats.xsl +0 -220
  312. data/webapp/admin/tabular.xsl +0 -141
  313. data/webapp/admin/threaddump.jsp +0 -110
  314. data/webapp/admin/threaddump.xsl +0 -103
  315. data/webapp/index.jsp +0 -49
@@ -0,0 +1,170 @@
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
+ // #/:core/query
19
+ sammy.get
20
+ (
21
+ /^#\/([\w\d-]+)\/(query)$/,
22
+ function( context )
23
+ {
24
+ var core_basepath = this.active_core.attr( 'data-basepath' );
25
+ var content_element = $( '#content' );
26
+
27
+ $.get
28
+ (
29
+ 'tpl/query.html',
30
+ function( template )
31
+ {
32
+ content_element
33
+ .html( template );
34
+
35
+ var query_element = $( '#query', content_element );
36
+ var query_form = $( '#form form', query_element );
37
+ var url_element = $( '#url', query_element );
38
+ var result_element = $( '#result', query_element );
39
+ var response_element = $( '#response iframe', result_element );
40
+
41
+ url_element
42
+ .die( 'change' )
43
+ .live
44
+ (
45
+ 'change',
46
+ function( event )
47
+ {
48
+ var check_iframe_ready_state = function()
49
+ {
50
+ var iframe_element = response_element.get(0).contentWindow.document || response_element.get(0).document;
51
+
52
+ if( !iframe_element )
53
+ {
54
+ console.debug( 'no iframe_element found', response_element );
55
+ return false;
56
+ }
57
+
58
+ url_element
59
+ .addClass( 'loader' );
60
+
61
+ if( 'complete' === iframe_element.readyState )
62
+ {
63
+ url_element
64
+ .removeClass( 'loader' );
65
+ }
66
+ else
67
+ {
68
+ window.setTimeout( check_iframe_ready_state, 100 );
69
+ }
70
+ }
71
+ check_iframe_ready_state();
72
+
73
+ response_element
74
+ .attr( 'src', this.href );
75
+
76
+ if( !response_element.hasClass( 'resized' ) )
77
+ {
78
+ response_element
79
+ .addClass( 'resized' )
80
+ .css( 'height', $( '#main' ).height() - 60 );
81
+ }
82
+ }
83
+ )
84
+
85
+ $( '.optional legend input[type=checkbox]', query_form )
86
+ .die( 'change' )
87
+ .live
88
+ (
89
+ 'change',
90
+ function( event )
91
+ {
92
+ var fieldset = $( this ).parents( 'fieldset' );
93
+
94
+ this.checked
95
+ ? fieldset.addClass( 'expanded' )
96
+ : fieldset.removeClass( 'expanded' );
97
+ }
98
+ );
99
+
100
+ query_form
101
+ .die( 'submit' )
102
+ .live
103
+ (
104
+ 'submit',
105
+ function( event )
106
+ {
107
+ var form_map = {};
108
+ var form_values = [];
109
+ var all_form_values = query_form.formToArray();
110
+
111
+ for( var i = 0; i < all_form_values.length; i++ )
112
+ {
113
+ if( !all_form_values[i].value || 0 === all_form_values[i].value.length )
114
+ {
115
+ continue;
116
+ }
117
+
118
+ var name_parts = all_form_values[i].name.split( '.' );
119
+ if( 1 < name_parts.length && !form_map[name_parts[0]] )
120
+ {
121
+ console.debug( 'skip "' + all_form_values[i].name + '", parent missing' );
122
+ continue;
123
+ }
124
+
125
+ form_map[all_form_values[i].name] = all_form_values[i].value;
126
+ form_values.push( all_form_values[i] );
127
+ }
128
+
129
+ var handler_path = $( '#qt', query_form ).val();
130
+ if( '/' !== handler_path[0] )
131
+ {
132
+ form_values.push( { name : 'qt', value : handler_path.esc() } );
133
+ handler_path = '/select';
134
+ }
135
+
136
+ var query_url = window.location.protocol + '//' + window.location.host
137
+ + core_basepath + handler_path + '?' + $.param( form_values );
138
+
139
+ url_element
140
+ .attr( 'href', query_url )
141
+ .text( query_url )
142
+ .trigger( 'change' );
143
+
144
+ result_element
145
+ .show();
146
+
147
+ return false;
148
+ }
149
+ );
150
+
151
+ var fields = 0;
152
+ for( var key in context.params )
153
+ {
154
+ if( 'string' === typeof context.params[key] )
155
+ {
156
+ fields++;
157
+ $( '[name="' + key + '"]', query_form )
158
+ .val( context.params[key] );
159
+ }
160
+ }
161
+
162
+ if( 0 !== fields )
163
+ {
164
+ query_form
165
+ .trigger( 'submit' );
166
+ }
167
+ }
168
+ );
169
+ }
170
+ );
@@ -0,0 +1,557 @@
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 timer_element = null;
19
+ var timer_timeout = null;
20
+
21
+ var core_basepath = null;
22
+ var navigation_element = null;
23
+ var replication_element = null;
24
+
25
+ var convert_duration_to_seconds = function( str )
26
+ {
27
+ var ret = 0;
28
+ var parts = new String( str ).split( ':' ).reverse();
29
+ var parts_count = parts.length;
30
+
31
+ for( var i = 0; i < parts_count; i++ )
32
+ {
33
+ ret += parseInt( parts[i], 10 ) * Math.pow( 60, i );
34
+ }
35
+
36
+ return ret;
37
+ }
38
+
39
+ var convert_seconds_to_readable_time = function( value )
40
+ {
41
+ var text = [];
42
+ value = parseInt( value );
43
+
44
+ var minutes = Math.floor( value / 60 );
45
+ var hours = Math.floor( minutes / 60 );
46
+
47
+ if( 0 !== hours )
48
+ {
49
+ text.push( hours + 'h' );
50
+ value -= hours * 60 * 60;
51
+ minutes -= hours * 60;
52
+ }
53
+
54
+ if( 0 !== minutes )
55
+ {
56
+ text.push( minutes + 'm' );
57
+ value -= minutes * 60;
58
+ }
59
+
60
+ if( 0 !== value )
61
+ {
62
+ text.push( value + 's' );
63
+ }
64
+
65
+ return text.join( ' ' );
66
+ }
67
+
68
+ var init_timer = function( next_tick )
69
+ {
70
+ if( timer_timeout )
71
+ {
72
+ window.clearTimeout( timer_timeout );
73
+ }
74
+ update_timer( next_tick );
75
+ }
76
+
77
+ var update_timer = function( next_tick )
78
+ {
79
+ if( 0 === next_tick )
80
+ {
81
+ replication_fetch_status();
82
+ return false;
83
+ }
84
+
85
+ $( 'p .tick', timer_element )
86
+ .text( convert_seconds_to_readable_time( next_tick ) );
87
+
88
+ timer_timeout = window.setTimeout
89
+ (
90
+ 'update_timer( ' + --next_tick + ' )',
91
+ 1000
92
+ );
93
+ }
94
+
95
+ var clear_timer = function()
96
+ {
97
+ if( timer_timeout )
98
+ {
99
+ window.clearTimeout( timer_timeout );
100
+ timer_element.hide();
101
+ }
102
+ }
103
+
104
+ var replication_fetch_status = function()
105
+ {
106
+ $.ajax
107
+ (
108
+ {
109
+ url : core_basepath + '/replication?command=details&wt=json',
110
+ dataType : 'json',
111
+ beforeSend : function( xhr, settings )
112
+ {
113
+ $( '.refresh-status span', navigation_element )
114
+ .addClass( 'loader' );
115
+
116
+ clear_timer();
117
+ },
118
+ success : function( response, text_status, xhr )
119
+ {
120
+ $( '.refresh-status span', navigation_element )
121
+ .removeClass( 'loader' );
122
+
123
+ var data = response.details;
124
+ var is_slave = 'true' === data.isSlave;
125
+
126
+ replication_element
127
+ .addClass( is_slave ? 'slave' : 'master' );
128
+
129
+ if( is_slave )
130
+ {
131
+ var error_element = $( '#error', replication_element );
132
+
133
+ if( data.slave.ERROR )
134
+ {
135
+ error_element
136
+ .html( data.slave.ERROR )
137
+ .show();
138
+ }
139
+ else
140
+ {
141
+ error_element
142
+ .hide()
143
+ .empty();
144
+ }
145
+
146
+ var progress_element = $( '#progress', replication_element );
147
+
148
+ var start_element = $( '#start', progress_element );
149
+ $( 'span', start_element )
150
+ .text( data.slave.replicationStartTime );
151
+
152
+ var eta_element = $( '#eta', progress_element );
153
+ $( 'span', eta_element )
154
+ .text( convert_seconds_to_readable_time( data.slave.timeRemaining ) );
155
+
156
+ var bar_element = $( '#bar', progress_element );
157
+ $( '.files span', bar_element )
158
+ .text( data.slave.numFilesToDownload );
159
+ $( '.size span', bar_element )
160
+ .text( data.slave.bytesToDownload );
161
+
162
+ var speed_element = $( '#speed', progress_element );
163
+ $( 'span', speed_element )
164
+ .text( data.slave.downloadSpeed );
165
+
166
+ var done_element = $( '#done', progress_element );
167
+ $( '.files span', done_element )
168
+ .text( data.slave.numFilesDownloaded );
169
+ $( '.size span', done_element )
170
+ .text( data.slave.bytesDownloaded );
171
+ $( '.percent span', done_element )
172
+ .text( parseInt(data.slave.totalPercent ) );
173
+
174
+ var percent = parseInt( data.slave.totalPercent );
175
+ if( 0 === percent )
176
+ {
177
+ done_element
178
+ .css( 'width', '1px' );
179
+ }
180
+ else
181
+ {
182
+ done_element
183
+ .css( 'width', percent + '%' );
184
+ }
185
+
186
+ var current_file_element = $( '#current-file', replication_element );
187
+ $( '.file', current_file_element )
188
+ .text( data.slave.currentFile );
189
+ $( '.done', current_file_element )
190
+ .text( data.slave.currentFileSizeDownloaded );
191
+ $( '.total', current_file_element )
192
+ .text( data.slave.currentFileSize );
193
+ $( '.percent', current_file_element )
194
+ .text( parseInt( data.slave.currentFileSizePercent ) );
195
+
196
+ if( !data.slave.indexReplicatedAtList )
197
+ {
198
+ data.slave.indexReplicatedAtList = [];
199
+ }
200
+
201
+ if( !data.slave.replicationFailedAtList )
202
+ {
203
+ data.slave.replicationFailedAtList = [];
204
+ }
205
+
206
+ var iterations_element = $( '#iterations', replication_element );
207
+ var iterations_list = $( '.iterations ul', iterations_element );
208
+
209
+ var iterations_data = [];
210
+ var iterations_obj = {};
211
+
212
+ for( var i in data.slave.indexReplicatedAtList )
213
+ {
214
+ var date = data.slave.indexReplicatedAtList[i];
215
+ if( !iterations_obj[date] )
216
+ {
217
+ iterations_obj[date] = true;
218
+ iterations_data.push( date );
219
+ }
220
+ }
221
+
222
+ for( var i in data.slave.replicationFailedAtList )
223
+ {
224
+ var date = data.slave.replicationFailedAtList[i];
225
+ if( !iterations_obj[date] )
226
+ {
227
+ iterations_obj[date] = true;
228
+ iterations_data.push( date );
229
+ }
230
+ }
231
+
232
+ iterations_data.sort().reverse();
233
+
234
+ if( 0 !== iterations_data.length )
235
+ {
236
+ var iterations = [];
237
+ for( var i = 0; i < iterations_data.length; i++ )
238
+ {
239
+ iterations.push( '<li data-date="' + iterations_data[i] + '">' + iterations_data[i] + '</li>' );
240
+ }
241
+
242
+ iterations_list
243
+ .html( iterations.join( "\n" ) )
244
+ .show();
245
+
246
+ $( data.slave.indexReplicatedAtList )
247
+ .each
248
+ (
249
+ function( key, value )
250
+ {
251
+ $( 'li[data-date="' + value + '"]', iterations_list )
252
+ .addClass( 'replicated' );
253
+ }
254
+ );
255
+
256
+ if( data.slave.indexReplicatedAt )
257
+ {
258
+ $( 'li[data-date="' + data.slave.indexReplicatedAt + '"]', iterations_list )
259
+ .addClass( 'latest' );
260
+ }
261
+
262
+ $( data.slave.replicationFailedAtList )
263
+ .each
264
+ (
265
+ function( key, value )
266
+ {
267
+ $( 'li[data-date="' + value + '"]', iterations_list )
268
+ .addClass( 'failed' );
269
+ }
270
+ );
271
+
272
+ if( data.slave.replicationFailedAt )
273
+ {
274
+ $( 'li[data-date="' + data.slave.replicationFailedAt + '"]', iterations_list )
275
+ .addClass( 'latest' );
276
+ }
277
+
278
+ if( 0 !== $( 'li:hidden', iterations_list ).size() )
279
+ {
280
+ $( 'a', iterations_element )
281
+ .show();
282
+ }
283
+ else
284
+ {
285
+ $( 'a', iterations_element )
286
+ .hide();
287
+ }
288
+ }
289
+ }
290
+
291
+ var details_element = $( '#details', replication_element );
292
+ var current_type_element = $( ( is_slave ? '.slave' : '.master' ), details_element );
293
+
294
+ $( '.version div', current_type_element )
295
+ .html( data.indexVersion );
296
+ $( '.generation div', current_type_element )
297
+ .html( data.generation );
298
+ $( '.size div', current_type_element )
299
+ .html( data.indexSize );
300
+
301
+ if( is_slave )
302
+ {
303
+ var master_element = $( '.master', details_element );
304
+ $( '.version div', master_element )
305
+ .html( data.slave.masterDetails.indexVersion );
306
+ $( '.generation div', master_element )
307
+ .html( data.slave.masterDetails.generation );
308
+ $( '.size div', master_element )
309
+ .html( data.slave.masterDetails.indexSize );
310
+
311
+ if( data.indexVersion !== data.slave.masterDetails.indexVersion )
312
+ {
313
+ $( '.version', details_element )
314
+ .addClass( 'diff' );
315
+ }
316
+ else
317
+ {
318
+ $( '.version', details_element )
319
+ .removeClass( 'diff' );
320
+ }
321
+
322
+ if( data.generation !== data.slave.masterDetails.generation )
323
+ {
324
+ $( '.generation', details_element )
325
+ .addClass( 'diff' );
326
+ }
327
+ else
328
+ {
329
+ $( '.generation', details_element )
330
+ .removeClass( 'diff' );
331
+ }
332
+ }
333
+
334
+ if( is_slave )
335
+ {
336
+ var settings_element = $( '#settings', replication_element );
337
+
338
+ if( data.slave.masterUrl )
339
+ {
340
+ $( '.masterUrl dd', settings_element )
341
+ .html( response.details.slave.masterUrl )
342
+ .parents( 'li' ).show();
343
+ }
344
+
345
+ var polling_content = '&nbsp;';
346
+ var polling_ico = 'ico-1';
347
+
348
+ if( 'true' === data.slave.isPollingDisabled )
349
+ {
350
+ polling_ico = 'ico-0';
351
+
352
+ $( '.disable-polling', navigation_element ).hide();
353
+ $( '.enable-polling', navigation_element ).show();
354
+ }
355
+ else
356
+ {
357
+ $( '.disable-polling', navigation_element ).show();
358
+ $( '.enable-polling', navigation_element ).hide();
359
+
360
+ if( data.slave.pollInterval )
361
+ {
362
+ polling_content = '(interval: ' + data.slave.pollInterval + ')';
363
+ }
364
+ }
365
+
366
+ $( '.isPollingDisabled dd', settings_element )
367
+ .removeClass( 'ico-0' )
368
+ .removeClass( 'ico-1' )
369
+ .addClass( polling_ico )
370
+ .html( polling_content )
371
+ .parents( 'li' ).show();
372
+
373
+ if( 'true' === data.slave.isReplicating )
374
+ {
375
+ replication_element
376
+ .addClass( 'replicating' );
377
+
378
+ $( '.replicate-now', navigation_element ).hide();
379
+ $( '.abort-replication', navigation_element ).show();
380
+
381
+ window.setTimeout( replication_fetch_status, 1000 );
382
+ }
383
+ else
384
+ {
385
+ replication_element
386
+ .removeClass( 'replicating' );
387
+
388
+ $( '.replicate-now', navigation_element ).show();
389
+ $( '.abort-replication', navigation_element ).hide();
390
+
391
+
392
+ if( 'false' === data.slave.isPollingDisabled && data.slave.pollInterval )
393
+ {
394
+ timer_element = $( '.timer', navigation_element );
395
+ approx_element = $( '.approx', timer_element );
396
+
397
+ var next_tick = convert_duration_to_seconds( data.slave.pollInterval );
398
+ approx_element.show();
399
+
400
+ if( data.slave.nextExecutionAt )
401
+ {
402
+ var nextExecutionAt = new SolrDate( data.slave.nextExecutionAt );
403
+ var currentDate = new SolrDate( data.slave.currentDate );
404
+
405
+ if( nextExecutionAt.getTime() > currentDate.getTime() )
406
+ {
407
+ next_tick = ( nextExecutionAt.getTime() - currentDate.getTime() ) / 1000;
408
+ approx_element.hide();
409
+
410
+ $( 'small', timer_element )
411
+ .text( data.slave.nextExecutionAt )
412
+ .show();
413
+ }
414
+ }
415
+
416
+ init_timer( next_tick );
417
+
418
+ timer_element
419
+ .show();
420
+ }
421
+ }
422
+ }
423
+
424
+ var master_settings_element = $( '#master-settings', replication_element );
425
+ var master_data = is_slave ? data.slave.masterDetails.master : data.master;
426
+
427
+ var replication_icon = 'ico-0';
428
+ if( 'true' === master_data.replicationEnabled )
429
+ {
430
+ replication_icon = 'ico-1';
431
+
432
+ $( '.disable-replication', navigation_element ).show();
433
+ $( '.enable-replication', navigation_element ).hide();
434
+ }
435
+ else
436
+ {
437
+ $( '.disable-replication', navigation_element ).hide();
438
+ $( '.enable-replication', navigation_element ).show();
439
+ }
440
+
441
+ $( '.replicationEnabled dd', master_settings_element )
442
+ .removeClass( 'ico-0' )
443
+ .removeClass( 'ico-1' )
444
+ .addClass( replication_icon )
445
+ .parents( 'li' ).show();
446
+
447
+ $( '.replicateAfter dd', master_settings_element )
448
+ .html( master_data.replicateAfter.join( ', ' ) )
449
+ .parents( 'li' ).show();
450
+
451
+ if( master_data.confFiles )
452
+ {
453
+ var conf_files = [];
454
+ var conf_data = master_data.confFiles.split( ',' );
455
+
456
+ for( var i = 0; i < conf_data.length; i++ )
457
+ {
458
+ var item = conf_data[i];
459
+
460
+ if( - 1 !== item.indexOf( ':' ) )
461
+ {
462
+ info = item.split( ':' );
463
+ item = '<abbr title="' + info[0] + ' » ' + info[1] + '">' + ( is_slave ? info[1] : info[0] ) + '</abbr>';
464
+ }
465
+
466
+ conf_files.push( item );
467
+ }
468
+
469
+ $( '.confFiles dd', master_settings_element )
470
+ .html( conf_files.join( ', ' ) )
471
+ .parents( 'li' ).show();
472
+ }
473
+
474
+
475
+ $( '.block', replication_element ).last()
476
+ .addClass( 'last' );
477
+ },
478
+ error : function( xhr, text_status, error_thrown )
479
+ {
480
+ $( '#content' )
481
+ .html( 'sorry, no replication-handler defined!' );
482
+ },
483
+ complete : function( xhr, text_status )
484
+ {
485
+ }
486
+ }
487
+ );
488
+ }
489
+
490
+ // #/:core/replication
491
+ sammy.get
492
+ (
493
+ /^#\/([\w\d-]+)\/(replication)$/,
494
+ function( context )
495
+ {
496
+ core_basepath = this.active_core.attr( 'data-basepath' );
497
+ var content_element = $( '#content' );
498
+
499
+ $.get
500
+ (
501
+ 'tpl/replication.html',
502
+ function( template )
503
+ {
504
+ content_element
505
+ .html( template );
506
+
507
+ replication_element = $( '#replication', content_element );
508
+ navigation_element = $( '#navigation', replication_element );
509
+
510
+ replication_fetch_status();
511
+
512
+ $( '#iterations a', content_element )
513
+ .die( 'click' )
514
+ .live
515
+ (
516
+ 'click',
517
+ function( event )
518
+ {
519
+ $( this ).parents( '.iterations' )
520
+ .toggleClass( 'expanded' );
521
+
522
+ return false;
523
+ }
524
+ );
525
+
526
+ $( 'button', navigation_element )
527
+ .die( 'click' )
528
+ .live
529
+ (
530
+ 'click',
531
+ function( event )
532
+ {
533
+ var button = $( this );
534
+ var command = button.data( 'command' );
535
+
536
+ if( button.hasClass( 'refresh-status' ) && !button.hasClass( 'loader' ) )
537
+ {
538
+ replication_fetch_status();
539
+ }
540
+ else if( command )
541
+ {
542
+ $.get
543
+ (
544
+ core_basepath + '/replication?command=' + command + '&wt=json',
545
+ function()
546
+ {
547
+ replication_fetch_status();
548
+ }
549
+ );
550
+ }
551
+ return false;
552
+ }
553
+ );
554
+ }
555
+ );
556
+ }
557
+ );