rjack-solr 3.6.2.0-java → 4.0.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
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
+ );