rhoconnect 3.0.0.beta1

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 (361) hide show
  1. data/CHANGELOG +208 -0
  2. data/CREDITS +38 -0
  3. data/Gemfile +18 -0
  4. data/Gemfile.lock +97 -0
  5. data/LICENSE +75 -0
  6. data/README.md +10 -0
  7. data/Rakefile +82 -0
  8. data/bench/bench +7 -0
  9. data/bench/bench_runner.rb +112 -0
  10. data/bench/benchapp/Gemfile +21 -0
  11. data/bench/benchapp/Gemfile.lock +76 -0
  12. data/bench/benchapp/Rakefile +22 -0
  13. data/bench/benchapp/application.rb +39 -0
  14. data/bench/benchapp/config.ru +36 -0
  15. data/bench/benchapp/settings/license.key +1 -0
  16. data/bench/benchapp/settings/settings.yml +20 -0
  17. data/bench/benchapp/sources/mock_adapter.rb +55 -0
  18. data/bench/benchapp/sources/queue_mock_adapter.rb +2 -0
  19. data/bench/benchapp/spec/sources/mock_adapter_spec.rb +25 -0
  20. data/bench/benchapp/spec/sources/queue_mock_adapter_spec.rb +25 -0
  21. data/bench/benchapp/spec/spec_helper.rb +42 -0
  22. data/bench/blobapp/Gemfile +31 -0
  23. data/bench/blobapp/Gemfile.lock +103 -0
  24. data/bench/blobapp/Rakefile +25 -0
  25. data/bench/blobapp/application.rb +44 -0
  26. data/bench/blobapp/config.ru +36 -0
  27. data/bench/blobapp/settings/license.key +1 -0
  28. data/bench/blobapp/settings/settings.yml +16 -0
  29. data/bench/blobapp/sources/blob_adapter.rb +71 -0
  30. data/bench/blobapp/spec/sources/blob_adapter_spec.rb +25 -0
  31. data/bench/blobapp/spec/spec_helper.rb +42 -0
  32. data/bench/lib/bench/cli.rb +16 -0
  33. data/bench/lib/bench/logging.rb +13 -0
  34. data/bench/lib/bench/mock_client.rb +41 -0
  35. data/bench/lib/bench/result.rb +50 -0
  36. data/bench/lib/bench/runner.rb +107 -0
  37. data/bench/lib/bench/session.rb +67 -0
  38. data/bench/lib/bench/statistics.rb +56 -0
  39. data/bench/lib/bench/test_data.rb +98 -0
  40. data/bench/lib/bench/timer.rb +10 -0
  41. data/bench/lib/bench/utils.rb +49 -0
  42. data/bench/lib/bench.rb +129 -0
  43. data/bench/lib/testdata/100-data.txt +148 -0
  44. data/bench/lib/testdata/5-data.txt +9 -0
  45. data/bench/lib/testdata/images/icon.ico +0 -0
  46. data/bench/lib/testdata/images/icon.png +0 -0
  47. data/bench/lib/testdata/images/loading-Landscape.png +0 -0
  48. data/bench/lib/testdata/images/loading-LandscapeLeft.png +0 -0
  49. data/bench/lib/testdata/images/loading-LandscapeRight.png +0 -0
  50. data/bench/lib/testdata/images/loading-Portrait.png +0 -0
  51. data/bench/lib/testdata/images/loading-PortraitUpsideDown.png +0 -0
  52. data/bench/lib/testdata/images/loading.png +0 -0
  53. data/bench/lib/testdata/images/loading@2x.png +0 -0
  54. data/bench/run_bench.sh +42 -0
  55. data/bench/run_blob_script.sh +3 -0
  56. data/bench/run_cud_script.sh +3 -0
  57. data/bench/run_query_md_script.sh +3 -0
  58. data/bench/run_query_only_script.sh +3 -0
  59. data/bench/run_query_script.sh +3 -0
  60. data/bench/scripts/blob_cud_script.rb +98 -0
  61. data/bench/scripts/cud_script.rb +92 -0
  62. data/bench/scripts/helpers.rb +101 -0
  63. data/bench/scripts/query_md_script.rb +45 -0
  64. data/bench/scripts/query_only_script.rb +51 -0
  65. data/bench/scripts/query_script.rb +45 -0
  66. data/bench/spec/bench_spec_helper.rb +33 -0
  67. data/bench/spec/logging_spec.rb +15 -0
  68. data/bench/spec/mock_adapter_spec.rb +61 -0
  69. data/bench/spec/mock_client_spec.rb +65 -0
  70. data/bench/spec/result_spec.rb +61 -0
  71. data/bench/spec/utils_spec.rb +36 -0
  72. data/bin/rhoconnect +34 -0
  73. data/bin/rhoconnect-setup +84 -0
  74. data/doc/async-jobs.txt +69 -0
  75. data/doc/authentication.txt +76 -0
  76. data/doc/benchmarks.txt +168 -0
  77. data/doc/blob-sync.txt +130 -0
  78. data/doc/bulk-sync.txt +102 -0
  79. data/doc/client.txt +432 -0
  80. data/doc/command-line.txt +210 -0
  81. data/doc/contributing.txt +60 -0
  82. data/doc/deploying.txt +82 -0
  83. data/doc/install.txt +28 -0
  84. data/doc/introduction.txt +20 -0
  85. data/doc/licensing.txt +18 -0
  86. data/doc/metadata.txt +458 -0
  87. data/doc/migration.txt +182 -0
  88. data/doc/public/css/print.css +29 -0
  89. data/doc/public/css/screen.css +257 -0
  90. data/doc/public/css/style.css +20 -0
  91. data/doc/push.txt +135 -0
  92. data/doc/release.txt +41 -0
  93. data/doc/rest-api.txt +367 -0
  94. data/doc/source-adapters.txt +325 -0
  95. data/doc/stats-middleware.txt +69 -0
  96. data/doc/testing.txt +222 -0
  97. data/doc/tutorial.txt +315 -0
  98. data/doc/web-console.txt +35 -0
  99. data/examples/simple/Rakefile +14 -0
  100. data/examples/simple/application.rb +27 -0
  101. data/examples/simple/config.ru +49 -0
  102. data/examples/simple/settings/license.key +1 -0
  103. data/examples/simple/settings/settings.yml +23 -0
  104. data/examples/simple/sources/sample_adapter.rb +5 -0
  105. data/examples/simple/sources/simple_adapter.rb +5 -0
  106. data/generators/rhoconnect.rb +119 -0
  107. data/generators/templates/application/Gemfile +21 -0
  108. data/generators/templates/application/Rakefile +22 -0
  109. data/generators/templates/application/application.rb +39 -0
  110. data/generators/templates/application/config.ru +36 -0
  111. data/generators/templates/application/settings/license.key +1 -0
  112. data/generators/templates/application/settings/settings.yml +14 -0
  113. data/generators/templates/application/spec/spec_helper.rb +42 -0
  114. data/generators/templates/source/source_adapter.rb +47 -0
  115. data/generators/templates/source/source_spec.rb +25 -0
  116. data/install.sh +408 -0
  117. data/installer/unix-like/rho_connect_install_checkers.rb +140 -0
  118. data/installer/unix-like/rho_connect_install_constants.rb +51 -0
  119. data/installer/unix-like/rho_connect_install_debian.rb +63 -0
  120. data/installer/unix-like/rho_connect_install_dnd.rb +58 -0
  121. data/installer/unix-like/rho_connect_install_get_params.rb +30 -0
  122. data/installer/unix-like/rho_connect_install_installers.rb +142 -0
  123. data/installer/unix-like/rho_connect_install_utilities.rb +85 -0
  124. data/installer/unix-like/rho_connect_install_yum.rb +63 -0
  125. data/installer/unix-like/rhoinstaller.rb +89 -0
  126. data/installer/utils/create_texts.rb +366 -0
  127. data/installer/utils/install_test.rb +140 -0
  128. data/installer/windows/EnvVarUpdate.nsh +328 -0
  129. data/installer/windows/ServiceLib.nsh +369 -0
  130. data/installer/windows/configUi.ini +44 -0
  131. data/installer/windows/icon.ico +0 -0
  132. data/installer/windows/rhosync.nsi +418 -0
  133. data/installer/windows/uninstall.bat +7 -0
  134. data/lib/rhoconnect/api/admin/get_api_token.rb +14 -0
  135. data/lib/rhoconnect/api/admin/get_license_info.rb +8 -0
  136. data/lib/rhoconnect/api/admin/login.rb +6 -0
  137. data/lib/rhoconnect/api/admin/reset.rb +10 -0
  138. data/lib/rhoconnect/api/admin/stats.rb +21 -0
  139. data/lib/rhoconnect/api/application/bulk_data.rb +7 -0
  140. data/lib/rhoconnect/api/application/clientcreate.rb +8 -0
  141. data/lib/rhoconnect/api/application/clientlogin.rb +6 -0
  142. data/lib/rhoconnect/api/application/clientregister.rb +6 -0
  143. data/lib/rhoconnect/api/application/clientreset.rb +6 -0
  144. data/lib/rhoconnect/api/application/query.rb +7 -0
  145. data/lib/rhoconnect/api/application/queue_updates.rb +6 -0
  146. data/lib/rhoconnect/api/application/search.rb +6 -0
  147. data/lib/rhoconnect/api/client/create_client.rb +3 -0
  148. data/lib/rhoconnect/api/client/delete_client.rb +5 -0
  149. data/lib/rhoconnect/api/client/get_client_params.rb +3 -0
  150. data/lib/rhoconnect/api/client/list_client_docs.rb +12 -0
  151. data/lib/rhoconnect/api/client/list_clients.rb +3 -0
  152. data/lib/rhoconnect/api/client/ping.rb +7 -0
  153. data/lib/rhoconnect/api/source/get_adapter.rb +3 -0
  154. data/lib/rhoconnect/api/source/get_db_doc.rb +7 -0
  155. data/lib/rhoconnect/api/source/get_source_params.rb +3 -0
  156. data/lib/rhoconnect/api/source/list_source_docs.rb +10 -0
  157. data/lib/rhoconnect/api/source/list_sources.rb +15 -0
  158. data/lib/rhoconnect/api/source/push_deletes.rb +8 -0
  159. data/lib/rhoconnect/api/source/push_objects.rb +8 -0
  160. data/lib/rhoconnect/api/source/save_adapter.rb +3 -0
  161. data/lib/rhoconnect/api/source/set_db_doc.rb +8 -0
  162. data/lib/rhoconnect/api/source/set_refresh_time.rb +8 -0
  163. data/lib/rhoconnect/api/source/upload_file.rb +4 -0
  164. data/lib/rhoconnect/api/user/create_user.rb +7 -0
  165. data/lib/rhoconnect/api/user/delete_user.rb +9 -0
  166. data/lib/rhoconnect/api/user/list_users.rb +3 -0
  167. data/lib/rhoconnect/api/user/update_user.rb +4 -0
  168. data/lib/rhoconnect/api_token.rb +19 -0
  169. data/lib/rhoconnect/app.rb +76 -0
  170. data/lib/rhoconnect/bulk_data/bulk_data.rb +88 -0
  171. data/lib/rhoconnect/bulk_data/syncdb.index.schema +4 -0
  172. data/lib/rhoconnect/bulk_data/syncdb.schema +41 -0
  173. data/lib/rhoconnect/bulk_data.rb +2 -0
  174. data/lib/rhoconnect/client.rb +96 -0
  175. data/lib/rhoconnect/client_sync.rb +412 -0
  176. data/lib/rhoconnect/console/app/helpers/auth_helper.rb +22 -0
  177. data/lib/rhoconnect/console/app/helpers/extensions.rb +19 -0
  178. data/lib/rhoconnect/console/app/helpers/helpers.rb +57 -0
  179. data/lib/rhoconnect/console/app/public/ThickBox.css +649 -0
  180. data/lib/rhoconnect/console/app/public/home.css +438 -0
  181. data/lib/rhoconnect/console/app/public/images/foot_logo_rhoconnect.png +0 -0
  182. data/lib/rhoconnect/console/app/public/images/header_halo.jpg +0 -0
  183. data/lib/rhoconnect/console/app/public/images/land_separator.gif +0 -0
  184. data/lib/rhoconnect/console/app/public/images/landing_header.jpg +0 -0
  185. data/lib/rhoconnect/console/app/public/images/logo_rhoconnect.png +0 -0
  186. data/lib/rhoconnect/console/app/public/images/rhomobile_rhohub_logo.png +0 -0
  187. data/lib/rhoconnect/console/app/public/images/tabs_separator.png +0 -0
  188. data/lib/rhoconnect/console/app/public/jqplot/excanvas.min.js +35 -0
  189. data/lib/rhoconnect/console/app/public/jqplot/jqplot.barRenderer.min.js +34 -0
  190. data/lib/rhoconnect/console/app/public/jqplot/jqplot.canvasAxisLabelRenderer.js +187 -0
  191. data/lib/rhoconnect/console/app/public/jqplot/jqplot.canvasAxisTickRenderer.js +226 -0
  192. data/lib/rhoconnect/console/app/public/jqplot/jqplot.canvasTextRenderer.js +408 -0
  193. data/lib/rhoconnect/console/app/public/jqplot/jqplot.categoryAxisRenderer.min.js +34 -0
  194. data/lib/rhoconnect/console/app/public/jqplot/jqplot.cursor.js +952 -0
  195. data/lib/rhoconnect/console/app/public/jqplot/jqplot.dateAxisRenderer.js +313 -0
  196. data/lib/rhoconnect/console/app/public/jqplot/jqplot.dateAxisRenderer.min.js +34 -0
  197. data/lib/rhoconnect/console/app/public/jqplot/jqplot.pointLabels.min.js +34 -0
  198. data/lib/rhoconnect/console/app/public/jqplot/jquery-1.4.2.min.js +154 -0
  199. data/lib/rhoconnect/console/app/public/jqplot/jquery.jqplot.min.css +1 -0
  200. data/lib/rhoconnect/console/app/public/jqplot/jquery.jqplot.min.js +34 -0
  201. data/lib/rhoconnect/console/app/public/main.css +7 -0
  202. data/lib/rhoconnect/console/app/public/reset.css +76 -0
  203. data/lib/rhoconnect/console/app/public/style.css +2201 -0
  204. data/lib/rhoconnect/console/app/public/text.txt +0 -0
  205. data/lib/rhoconnect/console/app/routes/adapter.rb +28 -0
  206. data/lib/rhoconnect/console/app/routes/auth.rb +29 -0
  207. data/lib/rhoconnect/console/app/routes/client.rb +31 -0
  208. data/lib/rhoconnect/console/app/routes/docs.rb +145 -0
  209. data/lib/rhoconnect/console/app/routes/heroku.rb +19 -0
  210. data/lib/rhoconnect/console/app/routes/home.rb +63 -0
  211. data/lib/rhoconnect/console/app/routes/timing.rb +242 -0
  212. data/lib/rhoconnect/console/app/routes/user.rb +117 -0
  213. data/lib/rhoconnect/console/app/views/adapter.erb +16 -0
  214. data/lib/rhoconnect/console/app/views/client.erb +30 -0
  215. data/lib/rhoconnect/console/app/views/content.erb +14 -0
  216. data/lib/rhoconnect/console/app/views/doc.erb +8 -0
  217. data/lib/rhoconnect/console/app/views/docdata.erb +28 -0
  218. data/lib/rhoconnect/console/app/views/docs.erb +30 -0
  219. data/lib/rhoconnect/console/app/views/edituser.erb +13 -0
  220. data/lib/rhoconnect/console/app/views/headermenu.erb +40 -0
  221. data/lib/rhoconnect/console/app/views/home.erb +24 -0
  222. data/lib/rhoconnect/console/app/views/index.erb +58 -0
  223. data/lib/rhoconnect/console/app/views/jqplot.erb +52 -0
  224. data/lib/rhoconnect/console/app/views/layout.erb +165 -0
  225. data/lib/rhoconnect/console/app/views/login.erb +26 -0
  226. data/lib/rhoconnect/console/app/views/newuser.erb +17 -0
  227. data/lib/rhoconnect/console/app/views/ping.erb +28 -0
  228. data/lib/rhoconnect/console/app/views/result.erb +11 -0
  229. data/lib/rhoconnect/console/app/views/rightboxlinks.erb +15 -0
  230. data/lib/rhoconnect/console/app/views/select_doc.erb +17 -0
  231. data/lib/rhoconnect/console/app/views/upload_doc.erb +23 -0
  232. data/lib/rhoconnect/console/app/views/user.erb +29 -0
  233. data/lib/rhoconnect/console/app/views/users.erb +12 -0
  234. data/lib/rhoconnect/console/rhoconnect_api.rb +245 -0
  235. data/lib/rhoconnect/console/server.rb +32 -0
  236. data/lib/rhoconnect/console.rb +3 -0
  237. data/lib/rhoconnect/cors.rb +229 -0
  238. data/lib/rhoconnect/credential.rb +9 -0
  239. data/lib/rhoconnect/db_adapter.rb +46 -0
  240. data/lib/rhoconnect/document.rb +49 -0
  241. data/lib/rhoconnect/dynamic_adapter.rb +91 -0
  242. data/lib/rhoconnect/generator.rb +1 -0
  243. data/lib/rhoconnect/jobs/bulk_data_job.rb +203 -0
  244. data/lib/rhoconnect/jobs/ping_job.rb +46 -0
  245. data/lib/rhoconnect/jobs/source_job.rb +16 -0
  246. data/lib/rhoconnect/license.rb +86 -0
  247. data/lib/rhoconnect/lock_ops.rb +11 -0
  248. data/lib/rhoconnect/model.rb +414 -0
  249. data/lib/rhoconnect/ping/android.rb +56 -0
  250. data/lib/rhoconnect/ping/apple.rb +52 -0
  251. data/lib/rhoconnect/ping/blackberry.rb +56 -0
  252. data/lib/rhoconnect/ping.rb +3 -0
  253. data/lib/rhoconnect/read_state.rb +31 -0
  254. data/lib/rhoconnect/rho_indifferent_access.rb +88 -0
  255. data/lib/rhoconnect/server/views/index.erb +13 -0
  256. data/lib/rhoconnect/server.rb +286 -0
  257. data/lib/rhoconnect/source.rb +289 -0
  258. data/lib/rhoconnect/source_adapter.rb +123 -0
  259. data/lib/rhoconnect/source_sync.rb +302 -0
  260. data/lib/rhoconnect/stats/middleware.rb +20 -0
  261. data/lib/rhoconnect/stats/record.rb +108 -0
  262. data/lib/rhoconnect/store.rb +232 -0
  263. data/lib/rhoconnect/tasks.rb +350 -0
  264. data/lib/rhoconnect/test_methods.rb +220 -0
  265. data/lib/rhoconnect/user.rb +95 -0
  266. data/lib/rhoconnect/version.rb +3 -0
  267. data/lib/rhoconnect/x_domain_session_wrapper.rb +53 -0
  268. data/lib/rhoconnect.rb +285 -0
  269. data/rhoconnect.gemspec +67 -0
  270. data/spec/api/admin/api_token_spec.rb +14 -0
  271. data/spec/api/admin/get_api_token_spec.rb +36 -0
  272. data/spec/api/admin/get_license_info_spec.rb +38 -0
  273. data/spec/api/admin/reset_spec.rb +22 -0
  274. data/spec/api/admin/stats_spec.rb +66 -0
  275. data/spec/api/api_helper.rb +21 -0
  276. data/spec/api/application/rhoconnect_api_spec.rb +548 -0
  277. data/spec/api/client/create_client_spec.rb +13 -0
  278. data/spec/api/client/delete_client_spec.rb +13 -0
  279. data/spec/api/client/get_client_params_spec.rb +18 -0
  280. data/spec/api/client/list_client_docs_spec.rb +32 -0
  281. data/spec/api/client/list_clients_spec.rb +22 -0
  282. data/spec/api/client/ping_spec.rb +23 -0
  283. data/spec/api/rhosync_api_spec.rb.orig +606 -0
  284. data/spec/api/source/adapter_spec.rb +29 -0
  285. data/spec/api/source/get_db_doc_spec.rb +21 -0
  286. data/spec/api/source/get_source_params_spec.rb +32 -0
  287. data/spec/api/source/list_source_docs_spec.rb +25 -0
  288. data/spec/api/source/list_sources_spec.rb +26 -0
  289. data/spec/api/source/push_deletes_spec.rb +18 -0
  290. data/spec/api/source/push_objects_spec.rb +27 -0
  291. data/spec/api/source/set_db_doc_spec.rb +19 -0
  292. data/spec/api/source/set_refresh_time_spec.rb +43 -0
  293. data/spec/api/source/upload_file_spec.rb +26 -0
  294. data/spec/api/user/create_user_spec.rb +16 -0
  295. data/spec/api/user/delete_user_spec.rb +36 -0
  296. data/spec/api/user/list_users_spec.rb +30 -0
  297. data/spec/api/user/update_user_spec.rb +31 -0
  298. data/spec/api_token_spec.rb +14 -0
  299. data/spec/app_spec.rb +18 -0
  300. data/spec/apps/emptyapp/application.rb +27 -0
  301. data/spec/apps/emptyapp/settings/license.key +1 -0
  302. data/spec/apps/emptyapp/settings/settings.yml +14 -0
  303. data/spec/apps/rhotestapp/Rakefile +1 -0
  304. data/spec/apps/rhotestapp/application.rb +19 -0
  305. data/spec/apps/rhotestapp/config.ru +1 -0
  306. data/spec/apps/rhotestapp/settings/apple_fake_cert.pem +1 -0
  307. data/spec/apps/rhotestapp/settings/license.key +1 -0
  308. data/spec/apps/rhotestapp/settings/settings.yml +36 -0
  309. data/spec/apps/rhotestapp/sources/base_adapter.rb +9 -0
  310. data/spec/apps/rhotestapp/sources/fixed_schema_adapter.rb +28 -0
  311. data/spec/apps/rhotestapp/sources/sample_adapter.rb +71 -0
  312. data/spec/apps/rhotestapp/sources/simple_adapter.rb +41 -0
  313. data/spec/apps/rhotestapp/sources/sub_adapter.rb +7 -0
  314. data/spec/apps/rhotestapp/vendor/mygem-0.1.0/lib/mygem/mygem.rb +8 -0
  315. data/spec/apps/rhotestapp/vendor/mygem-0.1.0/lib/mygem.rb +1 -0
  316. data/spec/bulk_data/bulk_data_spec.rb +97 -0
  317. data/spec/client_spec.rb +124 -0
  318. data/spec/client_sync_spec.rb +774 -0
  319. data/spec/doc/base.html +72 -0
  320. data/spec/doc/doc_spec.rb +376 -0
  321. data/spec/doc/footer.html +4 -0
  322. data/spec/doc/header.html +30 -0
  323. data/spec/document_spec.rb +31 -0
  324. data/spec/dynamic_adapter_spec.rb +43 -0
  325. data/spec/factories/factories.rb +17 -0
  326. data/spec/generator/generator_spec.rb +58 -0
  327. data/spec/generator/generator_spec_helper.rb +9 -0
  328. data/spec/jobs/bulk_data_job_spec.rb +125 -0
  329. data/spec/jobs/ping_job_spec.rb +102 -0
  330. data/spec/jobs/source_job_spec.rb +29 -0
  331. data/spec/license_spec.rb +66 -0
  332. data/spec/model_spec.rb +273 -0
  333. data/spec/perf/bulk_data_perf_spec.rb +32 -0
  334. data/spec/perf/perf_spec_helper.rb +50 -0
  335. data/spec/perf/store_perf_spec.rb +27 -0
  336. data/spec/ping/android_spec.rb +91 -0
  337. data/spec/ping/apple_spec.rb +70 -0
  338. data/spec/ping/blackberry_spec.rb +62 -0
  339. data/spec/read_state_spec.rb +35 -0
  340. data/spec/rhosync_spec.rb +75 -0
  341. data/spec/server/cors_spec.rb +287 -0
  342. data/spec/server/server_spec.rb +470 -0
  343. data/spec/server/x_domain_session_wrapper_spec.rb +150 -0
  344. data/spec/source_adapter_spec.rb +125 -0
  345. data/spec/source_spec.rb +114 -0
  346. data/spec/source_sync_spec.rb +328 -0
  347. data/spec/spec.opts +4 -0
  348. data/spec/spec_helper.rb +231 -0
  349. data/spec/stats/middleware_spec.rb +53 -0
  350. data/spec/stats/record_spec.rb +92 -0
  351. data/spec/store_spec.rb +251 -0
  352. data/spec/support/shared_examples.rb +168 -0
  353. data/spec/sync_states_spec.rb +72 -0
  354. data/spec/test_methods_spec.rb +134 -0
  355. data/spec/testdata/1000-data.txt +1414 -0
  356. data/spec/testdata/compressed/compress-data.txt +1 -0
  357. data/spec/testdata/upload1.txt +1 -0
  358. data/spec/testdata/upload2.txt +1 -0
  359. data/spec/user_spec.rb +139 -0
  360. data/tasks/redis.rake +206 -0
  361. metadata +706 -0
@@ -0,0 +1,366 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__))
2
+
3
+ require 'optparse'
4
+
5
+ options = {}
6
+
7
+ optparse = OptionParser.new do |opts|
8
+ options[:dist] = nil
9
+ opts.on( '-d', '--dist DISTRO', 'Specify DISTRO as the current distribution.' ) do |dist|
10
+ options[:dist] = dist
11
+ end #do
12
+
13
+ options[:prefix] = '/opt/rhoconnect/'
14
+ opts.on( '-p', '--prefix RHODIR', 'Specify RHODIR as the prefix directory.' ) do |dir|
15
+ options[:prefix] = dir
16
+ end #do
17
+
18
+ options[:redis] = true
19
+ opts.on( '--no-redis', '', 'Skip installing the redis server.' ) do
20
+ options[:redis] = false
21
+ end #do
22
+
23
+ options[:rubyVersion] = 'rubyee'
24
+ opts.on( '-r', '--rubyVer VERSION', 'Specify VERSION as the verion of ruby that is installed.' ) do |rubyVer|
25
+ options[:rubyVersion] = rubyVer
26
+ end #do
27
+ end #do
28
+
29
+ optparse.parse!
30
+
31
+ @prefix = options[:prefix]
32
+ @dist = options[:dist]
33
+ @redis = options[:redis]
34
+ @ruby_version = options[:rubyVersion]
35
+ @profile = (@dist == 'debian') ? '~/.profile' : '~/.bash_profile'
36
+
37
+ # create_redis_init
38
+ # Creates the redis initialization file and places it into the correct directory
39
+ def create_redis_init
40
+ redisInit="/etc/init.d/redis"
41
+
42
+ redis_init_script = <<'_REDIS_INIT_SCRIPT_'
43
+ #!/usr/bin/env bash
44
+ ### BEGIN INIT INFO
45
+ # Provides: redis-server
46
+ # Required-Start: $syslog
47
+ # Required-Stop: $syslog
48
+ # Should-Start: $local_fs
49
+ # Should-Stop: $local_fs
50
+ # Default-Start: 2 3 4 5
51
+ # Default-Stop: 0 1 6
52
+ # Short-Description: redis-server - Persistent key-value db
53
+ # Description: redis-server - Persistent key-value db
54
+ ### END INIT INFO
55
+ #
56
+ # Author: Wayne E. Seguin <wayneeseguin@gmail.com>
57
+ # License: The same licence as Redis, New BSD
58
+ # http://www.opensource.org/licenses/bsd-license.php
59
+ #
60
+
61
+ # Source the system config file, if it exists.
62
+ if [[ -s /etc/conf.d/redis ]] ; then
63
+ source /etc/conf.d/redis
64
+ fi
65
+
66
+ # Default config variables that have not been set.
67
+ port="${port:-6379}"
68
+ prefix="${prefix:-/opt/rhoconnect}"
69
+ redis="${prefix}bin/redis-server"
70
+ redis_cli="${prefix}bin/redis-cli"
71
+ pidfile="${pidfile:-/var/run/redis.pid}"
72
+ config="${config:-/opt/rhoconnect/etc/redis.conf}"
73
+ user="${user:-root}"
74
+ #prefix="${prefix:-/usr/local}"
75
+ #config="${config:-/usr/local/etc/redis.conf}"
76
+ #pidfile="${pidfile:-/var/run/redis/redis.pid}"
77
+ #config="${config:-/etc/redis/redis.conf}"
78
+ #user="${user:-redis}"
79
+
80
+ #
81
+ # Set the running $pid value based on $pidfile.
82
+ #
83
+ if [[ -s "$pidfile" ]] ; then
84
+ pid=$(cat $pidfile)
85
+ else
86
+ rm -f $pidfile
87
+ fi
88
+
89
+ # In case there was pidfile corruption...
90
+ if [[ "Linux" = "$(uname)" ]] ; then
91
+ # /proc does not exist on say, Darwin
92
+ if [[ ! -z "${pid}" ]] && [[ ! -x "/proc/${pid}" ]] ;then
93
+ pid="$(ps auxww | grep [r]edis | grep "$config" | grep -v 'grep' | awk '{print $2}')"
94
+ elif [[ -z "${pid}" ]] ; then
95
+ pid="$(ps auxww | grep [r]edis | grep "$config" | grep -v 'grep' | awk '{print $2}')"
96
+ fi
97
+ else
98
+ if [[ -z "${pid}" ]] ; then
99
+ pid="$(ps auxww | grep [r]edis | grep "$config" | grep -v 'grep' | awk '{print $2}')"
100
+ fi
101
+ fi
102
+
103
+ #
104
+ # Start redis using redis-server as user 'redis'.
105
+ #
106
+ redis_start() {
107
+ if [[ -f $pidfile ]] ; then
108
+ echo "$pidfile exists, redis-server is either already running or crashed."
109
+ exit 1
110
+ elif [[ ! -z "$pid" ]] ; then
111
+ echo -e "\nRedis is already running with configuration '$config'."
112
+ echo "$pid" > $pidfile # Ensure pidfile exists with the pid.
113
+ else
114
+ echo "Starting Redis server..."
115
+ su $user -c "$redis $config"
116
+ exit 0
117
+ fi
118
+ }
119
+
120
+ #
121
+ # Stop redis using redis-cli SHUTDOWN.
122
+ #
123
+ redis_stop() {
124
+ echo -n "Stopping redis server on port ${port} ... "
125
+ "$redis_cli" -p ${port} SHUTDOWN
126
+
127
+ # Keep user informed while server shuts down.
128
+ echo "Waiting for the redis server to shutdown "
129
+
130
+ if [[ "Linux" = "$(uname)" ]] ; then
131
+ if [[ "${pid}" = "" ]] ; then
132
+ echo "redis server is not running."
133
+ # Clear out the old pidfile if available
134
+ rm -f $pidfile
135
+ exit 1
136
+ fi
137
+ while [[ -x /proc/${pid} ]] ; do
138
+ echo -n '.' ; sleep 1
139
+ done
140
+ else # Darwin, etc...
141
+ while [[ ! -z "$(ps auxww | grep [r]edis | grep "$config" | awk '{print $2}')" ]] ; do
142
+ echo -n '.' ; sleep 1
143
+ done
144
+ fi
145
+
146
+ # Clear out the old pidfile.
147
+ rm -f $pidfile
148
+
149
+ # Notify user of successful completion.
150
+ echo -e "redis server stopped."
151
+ exit 0
152
+ }
153
+
154
+ redis_usage() {
155
+ echo -e "Usage: $0 {start,stop}"
156
+ exit 1
157
+ }
158
+
159
+ #
160
+ # CLI logic.
161
+ #
162
+ case "$1" in
163
+ start) redis_start ;;
164
+ stop) redis_stop ;;
165
+ *) redis_usage ;;
166
+ esac
167
+ _REDIS_INIT_SCRIPT_
168
+
169
+ File.open(redisInit, 'w') { |f| f << redis_init_script }
170
+ # Make the init script executable
171
+ `chmod +x #{redisInit}`
172
+
173
+ # Set run levels
174
+ if @dist == 'debian'
175
+ `update-rc.d -f redis defaults`
176
+ else
177
+ `/sbin/chkconfig redis on`
178
+ # `/sbin/chkconfig --list redis`
179
+ end
180
+
181
+ redis_init_script
182
+ end #create_redis_init
183
+
184
+ def create_redis_logrotate
185
+ redis_logrotate_conf = <<'_REDIS_LOGRORATE_CONF_'
186
+ /var/log/redis.log {
187
+ rotate 3
188
+ missingok
189
+ notifempty
190
+ size 250k
191
+ create 0644 root root
192
+ compress
193
+ }
194
+ _REDIS_LOGRORATE_CONF_
195
+
196
+ File.open('/etc/logrotate.d/redis', 'w') { |f| f << redis_logrotate_conf }
197
+ end
198
+
199
+ # generate_common_info
200
+ # Generates the readme info that is common across all distributions
201
+ def generate_common_info
202
+
203
+ readme = <<_README_
204
+ Thank you for choosing Rhomobile for your cross-platform app needs!
205
+ To finish this setup, please complete the following...
206
+
207
+ 1) Add necessary bins to the path(s) of the users who will
208
+ be using this software. You may also wish to add these items
209
+ to your #{@profile} to automatically add them upon login.
210
+ Ex:
211
+
212
+ A) All bins in the main bin deposit:
213
+ export PATH=#{@prefix}bin:$PATH
214
+
215
+ B) Bins specifically placed in the ruby/bin directory
216
+ export PATH=#{@prefix}ruby/1.8/bin:$PATH
217
+
218
+ Or if you had other versions of ruby installed previously to running
219
+ this installation, you may instead wish to simply create an alias
220
+ for the newly installed ruby.
221
+
222
+ Ex:
223
+
224
+ alias #{@ruby_version}=#{@prefix}bin/ruby
225
+
226
+ B) Add the export line to #{@profile}:
227
+
228
+ export PATH=#{@prefix}bin:#{@prefix}ruby/bin:$PATH
229
+
230
+ C) Add #{@prefix}lib to your library path like so:
231
+
232
+ export LD_LIBRARY_PATH=#{@prefix}lib:$LD_LIBRARY_PATH
233
+ Note: You may also want to add this line to #{@profile}
234
+
235
+ 2) Rhoconnect installer configured redis server with the following settings:
236
+
237
+ A) redis.conf file is located in #{@prefix}etc/ directory with properties:
238
+ daemonize yes
239
+ pidfile /var/run/redis.pid
240
+ logfile /var/log/redis.log
241
+
242
+ B) Redis logrotate settings for /var/log/redis.log files defined in '/etc/logrotate.d/redis':
243
+
244
+ /var/log/redis.log {
245
+ rotate 3
246
+ missingok
247
+ notifempty
248
+ size 250k
249
+ create 0644 root root
250
+ compress
251
+ }
252
+
253
+ C) Redis start-up script '/etc/init.d/redis'.
254
+ You can start/stop redis server by running the following commands:
255
+ /etc/init.d/redis {start|stop}
256
+
257
+ 3) Setup rhoconnect application directory
258
+    
259
+ A) Put your application code in a directory called /var/www/rhoconnect
260
+ (make sure this is the root of your applictaion directory, i.e. /var/www/rhoconnect/config.ru should exist).
261
+
262
+ B) Make an empty public folder in the directory
263
+ $ mkdir /var/www/rhoconnect/public
264
+
265
+ _README_
266
+
267
+ readme
268
+ end #generate_common_info
269
+
270
+ def create_passenger_load
271
+ if @dist == 'debian'
272
+ passenger_load_file = '/etc/apache2/mods-available/passenger.load'
273
+ else
274
+ passenger_load_file = '/etc/httpd/conf.d/passenger.conf'
275
+ end # if
276
+
277
+ passenger_load = <<_PASSENGER_LOAD_
278
+ LoadModule passenger_module /opt/rhoconnect/lib/ruby/gems/1.8/gems/passenger-3.0.8/ext/apache2/mod_passenger.so
279
+ PassengerRoot /opt/rhoconnect/lib/ruby/gems/1.8/gems/passenger-3.0.8
280
+ PassengerRuby /opt/rhoconnect/bin/ruby
281
+ _PASSENGER_LOAD_
282
+
283
+ File.open( passenger_load_file, 'w' ) { |f| f << passenger_load }
284
+ end #create_passenger_load
285
+
286
+ def create_apache_vhost
287
+ if @dist == 'debian'
288
+ vhost_file = '/etc/apache2/sites-available/rhoconnect'
289
+ else
290
+ vhost_file = '/etc/httpd/conf.d/rhoconnect.conf'
291
+ end
292
+ vhost = <<_VHOST_
293
+ <VirtualHost *:80>
294
+ ServerName your.server.name.goes.here.com
295
+ DocumentRoot /var/www/rhoconnect/public
296
+ PassengerMaxPoolSize 20
297
+ PassengerMinInstances 6
298
+ #...
299
+ <Directory /var/www/rhoconnect/public
300
+ AllowOverride all
301
+ Options -MultiViews
302
+ </Directory>
303
+ </VirtualHost>
304
+ _VHOST_
305
+
306
+ File.open( vhost_file, 'w' ) { |f| f << vhost }
307
+ end #create_apache_vhost
308
+
309
+ # create_debian_readme
310
+ # Creates the debian specific part of the readme and places it in options[:prefix]
311
+ def create_debian_readme
312
+ readme = <<_README_
313
+ 4) Configure Apache2
314
+ A) Configure virtual host for rhoconnect application:
315
+ Edit the file /etc/apache2/sites-available/rhoconnect so that it
316
+ reflects your specifications.
317
+
318
+ B) Enable the virtual host:
319
+ $ sudo a2ensite rhoconnect
320
+
321
+ C) Load the passenger.load module
322
+ $ sudo a2enmod passenger.load
323
+
324
+ D) Restart apache to pick up the changes:
325
+ $ sudo /etc/init.d/apache2 restart
326
+ _README_
327
+
328
+ readme
329
+ end #create_debian_readme
330
+
331
+ # create_yum_readme
332
+ # Creates the non-debian specific part of the readme file and places it in options[:prefix]
333
+ def create_yum_readme
334
+ readme = <<_README_
335
+ 4) Configure Apache2
336
+ A) Configure virtual host for rhoconnect application:
337
+ Edit the file /etc/httpd/conf.d/rhoconnect.conf so that it
338
+ reflects your specifications.
339
+
340
+ B) Restart apache to pick up the changes:
341
+ $ sudo /sbin/service httpd restart
342
+ _README_
343
+
344
+ readme
345
+ end #create_yum_readme
346
+
347
+ def create_texts
348
+ if @redis
349
+ create_redis_init
350
+ create_redis_logrotate
351
+ end
352
+
353
+ create_passenger_load
354
+ create_apache_vhost
355
+
356
+ puts generate_common_info
357
+ distro_info = (@dist == 'debian') ? create_debian_readme : create_yum_readme
358
+ puts distro_info
359
+
360
+ File.open("#{@prefix}README", 'w') do |f|
361
+ f << generate_common_info
362
+ f << distro_info
363
+ end
364
+ end #create_texts
365
+
366
+ create_texts
@@ -0,0 +1,140 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'fog'
5
+ require 'readline'
6
+ require 'optparse'
7
+
8
+ REGION = 'us-west-1'
9
+ SLEEP = 45
10
+ KEYS = '/home/mike/.ssh/alexdevkey.pem'
11
+ USER = 'ubuntu'
12
+ ACCESS_KEY_FILE = '/Users/rhomobile/.ec2'
13
+ LOCAL_REPO = '/home/mike/git/rhoconnect.tgz'
14
+ REMOTE_REPO = "/home/#{USER}/git/rhoconnect"
15
+ STACKS = [ { :image_id => 'ami-3d491a78',
16
+ :flavor_id => 'm1.small',
17
+ :key_name => 'alexdevkey',
18
+ :groups => 'load-test' },
19
+ {}
20
+ ]
21
+
22
+ # cmd
23
+ # easily issue system commands in a clear way
24
+ def cmd(cmd)
25
+ puts cmd
26
+ puts `#{cmd}`
27
+ end #cmd
28
+
29
+ # create_ec2_instance
30
+ # Generates the Fog object and creates a new ec2 instance.
31
+ def create_ec2_instance
32
+ make_fog
33
+ start_new_instance
34
+ end #create_ec2_instance
35
+
36
+ # get_access_keys
37
+ # Retrieves the access key and secret access key from the above specified file.
38
+ def get_access_keys
39
+ lines = IO.readlines ACCESS_KEY_FILE
40
+ @access_key = lines.first.strip
41
+ @secret_access_key = lines.last.strip
42
+ end #get_access_keys
43
+
44
+ # make_fog
45
+ # Generates the Fog object used to create the new ec2 instance.
46
+ def make_fog
47
+ get_access_keys
48
+ @fog = Fog::Compute.new(
49
+ :provider => 'AWS',
50
+ :region => REGION,
51
+ :aws_access_key_id => @access_key,
52
+ :aws_secret_access_key => @secret_access_key
53
+ )
54
+ end #make_fog
55
+
56
+ # start_new_instance
57
+ # Creates a new ec2 instance as per the given stack.
58
+ def start_new_instance
59
+ puts "Creating new instance..."
60
+
61
+ @server = @fog.servers.create(STACKS[0])
62
+ @server.wait_for { print "."; STDOUT.flush; ready? }
63
+ puts
64
+ if @server.ready?
65
+ # wait for all services to start on remote VM
66
+ puts "Waiting #{SLEEP} seconds for services to start on remote VM..."
67
+ SLEEP.times do
68
+ sleep( 1 )
69
+ print "."
70
+ STDOUT.flush
71
+ end #do
72
+ puts
73
+
74
+ # save important instance information
75
+ @host = @server.dns_name
76
+ @server_id = @server.id
77
+ else
78
+ puts "Server timed out."
79
+ exit
80
+ end #if
81
+ end #start_new_instance
82
+
83
+ # establish_ssh_connection
84
+ # Establishes the ssh connection needed to issue commands to the remote machine.
85
+ def establish_ssh_connection
86
+ @ssh = Fog::SSH.new( @host, USER, :keys => KEYS )
87
+ end #establish_ssh_connection
88
+
89
+ # establish_scp_connection
90
+ # Establishes a gateway through which to transfer data
91
+ def establish_scp_connection
92
+ @scp = Fog::SCP.new( @host, USER, :keys => KEYS )
93
+ end #create_scp_connection
94
+
95
+ # ssh_cmd
96
+ # More easily issue commands over the ssh connection.
97
+ def ssh_cmd(cmd)
98
+ puts cmd
99
+ result = @ssh.run(cmd)
100
+ if result[0] != nil
101
+ print result[0].stdout
102
+ end #if
103
+ end #ssh_cmd
104
+
105
+ #
106
+ def transfer(local_data, remote_data)
107
+ puts "Attempting to establish SCP connection..."
108
+ puts "DATA: LOCAL - #{local_data}\t REMOTE - #{remote_data}"
109
+ @scp.upload( local_data, remote_data, :recursive => true ) do |cd, name, sent, total|
110
+ print "\r#{name}: #{(sent.to_f * 100 / total.to_f).to_i}%"
111
+ end #do
112
+ puts
113
+
114
+ end #establish_scp_connection
115
+
116
+ # transfer_rhoconnect
117
+ # Transfers over SCP the rhoconnect repo
118
+ def transfer_rhoconnect
119
+ ssh_cmd [ "sudo mkdir -p #{REMOTE_REPO}", "sudo chmod 777 #{REMOTE_REPO}" ]
120
+ transfer LOCAL_REPO, "#{REMOTE_REPO}"
121
+ ssh_cmd "sudo tar -xzf -C #{REMOTE_REPO} #{REMOTE_REPO}/rhoconnect.tgz"
122
+ ssh_cmd "ls -la #{REMOTE_REPO}"
123
+ end #transfer_rhoconnect
124
+
125
+ # destroy_ec2_instance
126
+ # Terminates the current ec2 instance
127
+ def destroy_ec2_instance
128
+ @server.destroy
129
+ puts "Instance Terminated."
130
+ end #destroy_ec2_instance
131
+
132
+ create_ec2_instance
133
+
134
+ # Establish connections
135
+ establish_ssh_connection
136
+ establish_scp_connection
137
+
138
+ transfer_rhoconnect
139
+
140
+ destroy_ec2_instance