rhoconnect 3.4.5 → 4.0.0.beta.10

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 (337) hide show
  1. data/CHANGELOG.md +57 -3
  2. data/Gemfile +9 -7
  3. data/Gemfile.lock +37 -37
  4. data/Rakefile +18 -7
  5. data/bench/benchapp/Gemfile +1 -1
  6. data/bench/benchapp/config.ru +0 -3
  7. data/bench/benchapp/controllers/ruby/application.rb +17 -0
  8. data/bench/benchapp/controllers/ruby/application_controller.rb +17 -0
  9. data/bench/benchapp/controllers/ruby/mock_adapter_controller.rb +8 -0
  10. data/bench/benchapp/controllers/ruby/queue_mock_adapter_controller.rb +8 -0
  11. data/bench/benchapp/{sources → models/ruby}/mock_adapter.rb +1 -1
  12. data/bench/benchapp/{sources → models/ruby}/queue_mock_adapter.rb +0 -0
  13. data/bench/benchapp/spec/{sources → models/ruby}/mock_adapter_spec.rb +1 -1
  14. data/bench/benchapp/spec/{sources → models/ruby}/queue_mock_adapter_spec.rb +1 -1
  15. data/bench/benchapp/spec/spec_helper.rb +2 -2
  16. data/bench/blobapp/Gemfile +1 -1
  17. data/bench/blobapp/config.ru +0 -3
  18. data/bench/blobapp/controllers/ruby/application_controller.rb +17 -0
  19. data/bench/blobapp/controllers/ruby/blob_adapter_controller.rb +8 -0
  20. data/bench/blobapp/{sources → models/ruby}/blob_adapter.rb +9 -2
  21. data/bench/blobapp/spec/{sources → models/ruby}/blob_adapter_spec.rb +1 -1
  22. data/bench/blobapp/spec/spec_helper.rb +1 -1
  23. data/bench/lib/bench/cli.rb +1 -1
  24. data/bench/scripts/blob_cud_script.rb +1 -1
  25. data/bench/scripts/query_md_script.rb +1 -1
  26. data/bench/scripts/query_only_script.rb +1 -1
  27. data/bench/scripts/query_script.rb +1 -1
  28. data/bench/scripts/test_query_script.rb +7 -1
  29. data/bench/spec/mock_adapter_spec.rb +1 -1
  30. data/bench/spec/result_spec.rb +3 -3
  31. data/bin/rhoconnect +5 -3
  32. data/commands/dtach/dtach_install.rb +2 -2
  33. data/commands/execute.rb +8 -3
  34. data/commands/generators/app.rb +3 -3
  35. data/commands/generators/controller.rb +6 -0
  36. data/commands/generators/model.rb +6 -0
  37. data/commands/generators/source.rb +3 -3
  38. data/commands/generators/update.rb +1 -1
  39. data/commands/redis/redis_about.rb +2 -2
  40. data/commands/redis/redis_download.rb +1 -1
  41. data/commands/redis/redis_install.rb +4 -3
  42. data/commands/redis/redis_restart.rb +4 -4
  43. data/commands/redis/redis_start.rb +5 -4
  44. data/commands/redis/redis_startbg.rb +5 -4
  45. data/commands/redis/redis_status.rb +13 -0
  46. data/commands/redis/redis_stop.rb +3 -3
  47. data/commands/rhoconnect/config.rb +28 -16
  48. data/commands/rhoconnect/flushdb.rb +1 -2
  49. data/commands/rhoconnect/get_token.rb +15 -11
  50. data/commands/rhoconnect/restart.rb +13 -5
  51. data/commands/rhoconnect/set_admin_password.rb +8 -8
  52. data/commands/rhoconnect/start.rb +74 -16
  53. data/commands/rhoconnect/startbg.rb +1 -1
  54. data/commands/rhoconnect/startdebug.rb +1 -1
  55. data/commands/rhoconnect/stop.rb +13 -1
  56. data/commands/rhoconnect/web.rb +5 -5
  57. data/commands/rhoconnect_console/console.rb +7 -5
  58. data/commands/{rhoconnect → rhoconnect_spec}/spec.rb +0 -0
  59. data/commands/rhoconnect_war/war.rb +9 -9
  60. data/commands/utilities/blank_app.ru +56 -0
  61. data/commands/utilities/redis_runner.rb +54 -19
  62. data/doc/authentication.txt +80 -6
  63. data/doc/blob-sync.txt +104 -97
  64. data/doc/bulk-sync.txt +1 -1
  65. data/doc/client-java.txt +3 -3
  66. data/doc/client-objc.txt +2 -2
  67. data/doc/client.txt +4 -4
  68. data/doc/command-line.txt +105 -200
  69. data/doc/data-partitioning.txt +40 -0
  70. data/doc/deploying.txt +249 -77
  71. data/doc/extending-rhoconnect-server.txt +40 -57
  72. data/doc/heroku-addon.txt +2 -0
  73. data/doc/install.txt +45 -95
  74. data/doc/introduction.txt +1 -1
  75. data/doc/java-plugin.txt +365 -190
  76. data/doc/metadata.txt +1 -1
  77. data/doc/migration.txt +108 -142
  78. data/doc/preparing-production.txt +1 -1
  79. data/doc/push-backend-setup.txt +2 -0
  80. data/doc/push-client-setup-android.txt +78 -0
  81. data/doc/push-client-setup-bb.txt +81 -0
  82. data/doc/push-client-setup-ios.txt +70 -0
  83. data/doc/push-client-setup-rps.txt +200 -0
  84. data/doc/push-client-setup.txt +63 -66
  85. data/doc/push-server-setup.txt +67 -40
  86. data/doc/push-testing.txt +29 -0
  87. data/doc/push.txt +21 -6
  88. data/doc/rest-api.txt +128 -55
  89. data/doc/rhoconnect-redis-stack.txt +120 -0
  90. data/doc/settings.txt +4 -12
  91. data/doc/source-adapters-intro.txt +28 -0
  92. data/doc/source-adapters.txt +235 -272
  93. data/doc/stats-middleware.txt +9 -29
  94. data/doc/supported-platforms.txt +21 -30
  95. data/doc/testing.txt +40 -42
  96. data/doc/tutorial.txt +72 -57
  97. data/examples/simple/Gemfile +1 -1
  98. data/examples/simple/application.rb +4 -5
  99. data/examples/simple/my_server.rb +2 -2
  100. data/examples/simple/settings/settings.yml +1 -1
  101. data/generators/rhoconnect.rb +151 -50
  102. data/generators/templates/application/Gemfile +1 -1
  103. data/generators/templates/application/Rakefile +3 -3
  104. data/generators/templates/application/config.ru +1 -4
  105. data/generators/templates/application/controllers/application_controller.rb +17 -0
  106. data/generators/templates/application/controllers/js/application_controller.js +14 -0
  107. data/generators/templates/application/controllers/ruby/application_controller.rb +17 -0
  108. data/generators/templates/application/package.json +8 -0
  109. data/generators/templates/application/rcgemfile +2 -5
  110. data/generators/templates/application/settings/settings.yml +3 -3
  111. data/generators/templates/application/spec/application_controller_spec.rb +23 -0
  112. data/generators/templates/application/spec/js_spec.rb +25 -0
  113. data/generators/templates/application/spec/spec_helper.rb +21 -7
  114. data/generators/templates/source/controllers/js/controller.js +7 -0
  115. data/generators/templates/source/controllers/ruby/controller.rb +8 -0
  116. data/generators/templates/source/controllers/ruby/controller_spec.rb +27 -0
  117. data/generators/templates/source/models/js/model.js +46 -0
  118. data/generators/templates/source/{source_adapter.rb → models/ruby/model.rb} +15 -10
  119. data/generators/templates/source/{source_spec.rb → models/ruby/model_spec.rb} +1 -1
  120. data/install.sh +5 -5
  121. data/installer/unix-like/create_texts.rb +2 -2
  122. data/installer/unix-like/rho_connect_install_constants.rb +2 -2
  123. data/installer/unix-like/rho_connect_install_utilities.rb +1 -1
  124. data/installer/utils/constants.rb +4 -4
  125. data/js-adapters/ballroom.js +216 -0
  126. data/js-adapters/node.rb +52 -0
  127. data/js-adapters/node_channel.rb +181 -0
  128. data/js-adapters/request.js +27 -0
  129. data/js-adapters/response.js +57 -0
  130. data/js-adapters/rhoconnect_helpers.js +60 -0
  131. data/js-adapters/router.js +60 -0
  132. data/js-adapters/server.js +5 -0
  133. data/lib/rhoconnect/api/app/ans_login.rb +3 -3
  134. data/lib/rhoconnect/api/app/bulk_data.rb +10 -10
  135. data/lib/rhoconnect/api/app/fast_delete.rb +11 -10
  136. data/lib/rhoconnect/api/app/fast_insert.rb +11 -10
  137. data/lib/rhoconnect/api/app/fast_update.rb +11 -10
  138. data/lib/rhoconnect/api/app/login.rb +5 -5
  139. data/lib/rhoconnect/api/app/push_deletes.rb +12 -11
  140. data/lib/rhoconnect/api/app/push_objects.rb +12 -11
  141. data/lib/rhoconnect/api/app/query.rb +8 -7
  142. data/lib/rhoconnect/api/app/queue_updates.rb +98 -94
  143. data/lib/rhoconnect/api/app/search.rb +8 -7
  144. data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -5
  145. data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -8
  146. data/lib/rhoconnect/api/client/create.rb +7 -7
  147. data/lib/rhoconnect/api/client/get_client_params.rb +4 -4
  148. data/lib/rhoconnect/api/client/list_client_docs.rb +17 -17
  149. data/lib/rhoconnect/api/client/register.rb +12 -12
  150. data/lib/rhoconnect/api/client/reset.rb +5 -5
  151. data/lib/rhoconnect/api/readstate/set_refresh_time.rb +9 -9
  152. data/lib/rhoconnect/api/source/get_source_params.rb +4 -4
  153. data/lib/rhoconnect/api/source/list_sources.rb +16 -16
  154. data/lib/rhoconnect/api/source/update_source_params.rb +6 -6
  155. data/lib/rhoconnect/api/store/get_db_doc.rb +4 -4
  156. data/lib/rhoconnect/api/store/set_db_doc.rb +7 -7
  157. data/lib/rhoconnect/api/system/get_adapter.rb +4 -4
  158. data/lib/rhoconnect/api/system/get_license_info.rb +8 -8
  159. data/lib/rhoconnect/api/system/login.rb +15 -15
  160. data/lib/rhoconnect/api/system/reset.rb +11 -11
  161. data/lib/rhoconnect/api/system/save_adapter.rb +4 -4
  162. data/lib/rhoconnect/api/system/stats.rb +22 -22
  163. data/lib/rhoconnect/api/user/create_user.rb +7 -7
  164. data/lib/rhoconnect/api/user/delete_client.rb +6 -6
  165. data/lib/rhoconnect/api/user/delete_user.rb +11 -10
  166. data/lib/rhoconnect/api/user/list_clients.rb +4 -4
  167. data/lib/rhoconnect/api/user/list_source_docs.rb +10 -10
  168. data/lib/rhoconnect/api/user/list_users.rb +3 -3
  169. data/lib/rhoconnect/api/user/ping.rb +3 -3
  170. data/lib/rhoconnect/api/user/show_user.rb +3 -3
  171. data/lib/rhoconnect/api/user/update_user.rb +5 -5
  172. data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -5
  173. data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -10
  174. data/lib/rhoconnect/api_token.rb +5 -6
  175. data/lib/rhoconnect/app.rb +6 -46
  176. data/lib/rhoconnect/application/init.rb +5 -2
  177. data/lib/rhoconnect/async.rb +76 -39
  178. data/lib/rhoconnect/bulk_data/bulk_data.rb +6 -4
  179. data/lib/rhoconnect/client.rb +59 -9
  180. data/lib/rhoconnect/condition/admin_required.rb +27 -0
  181. data/lib/rhoconnect/condition/client_required.rb +50 -0
  182. data/lib/rhoconnect/condition/login_required.rb +22 -0
  183. data/lib/rhoconnect/condition/source_required.rb +49 -0
  184. data/lib/rhoconnect/condition/verbs.rb +17 -0
  185. data/lib/rhoconnect/condition/verify_success.rb +19 -0
  186. data/lib/rhoconnect/controller/app_base.rb +74 -0
  187. data/lib/rhoconnect/controller/base.rb +68 -0
  188. data/lib/rhoconnect/controller/clients_controller.rb +79 -0
  189. data/lib/rhoconnect/controller/dynamic_adapter_controller.rb +93 -0
  190. data/lib/rhoconnect/controller/js_base.rb +124 -0
  191. data/lib/rhoconnect/controller/read_state_controller.rb +22 -0
  192. data/lib/rhoconnect/controller/source_adapter_base.rb +14 -0
  193. data/lib/rhoconnect/controller/sources_controller.rb +44 -0
  194. data/lib/rhoconnect/controller/store_controller.rb +25 -0
  195. data/lib/rhoconnect/controller/system_controller.rb +67 -0
  196. data/lib/rhoconnect/controller/users_controller.rb +99 -0
  197. data/lib/rhoconnect/db_adapter.rb +1 -3
  198. data/lib/rhoconnect/document.rb +159 -50
  199. data/lib/rhoconnect/handler/authenticate/execute_methods.rb +77 -0
  200. data/lib/rhoconnect/handler/authenticate/runner.rb +49 -0
  201. data/lib/rhoconnect/handler/authenticate.rb +3 -0
  202. data/lib/rhoconnect/handler/bulk_data.rb +28 -0
  203. data/lib/rhoconnect/handler/changes/engine.rb +271 -0
  204. data/lib/rhoconnect/handler/changes/execute_methods.rb +88 -0
  205. data/lib/rhoconnect/handler/changes/pass_through_runner.rb +11 -0
  206. data/lib/rhoconnect/handler/changes/runner.rb +53 -0
  207. data/lib/rhoconnect/handler/changes.rb +31 -0
  208. data/lib/rhoconnect/handler/helpers/auth_method.rb +29 -0
  209. data/lib/rhoconnect/handler/helpers/binding.rb +18 -0
  210. data/lib/rhoconnect/handler/helpers/bulk_data.rb +53 -0
  211. data/lib/rhoconnect/handler/helpers/source_job.rb +14 -0
  212. data/lib/rhoconnect/handler/helpers.rb +4 -0
  213. data/lib/rhoconnect/handler/plugin_callbacks/execute_methods.rb +99 -0
  214. data/lib/rhoconnect/handler/plugin_callbacks/runner.rb +28 -0
  215. data/lib/rhoconnect/handler/plugin_callbacks.rb +67 -0
  216. data/lib/rhoconnect/handler/query/engine.rb +93 -0
  217. data/lib/rhoconnect/handler/query/execute_methods.rb +21 -0
  218. data/lib/rhoconnect/handler/query/pass_through_runner.rb +35 -0
  219. data/lib/rhoconnect/handler/query/runner.rb +270 -0
  220. data/lib/rhoconnect/handler/query.rb +19 -0
  221. data/lib/rhoconnect/handler/search/engine.rb +60 -0
  222. data/lib/rhoconnect/handler/search/execute_methods.rb +32 -0
  223. data/lib/rhoconnect/handler/search/pass_through_runner.rb +18 -0
  224. data/lib/rhoconnect/handler/search/runner.rb +104 -0
  225. data/lib/rhoconnect/handler/search.rb +26 -0
  226. data/lib/rhoconnect/handler/sync.rb +29 -0
  227. data/lib/rhoconnect/jobs/source_job.rb +13 -4
  228. data/lib/rhoconnect/js_adapter.rb +79 -0
  229. data/lib/rhoconnect/license.rb +10 -2
  230. data/lib/rhoconnect/middleware/current_user.rb +14 -1
  231. data/lib/rhoconnect/middleware/helpers.rb +10 -93
  232. data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +1 -1
  233. data/lib/rhoconnect/model/base.rb +229 -0
  234. data/lib/rhoconnect/model/dynamic_adapter_model.rb +90 -0
  235. data/lib/rhoconnect/model/js_base.rb +121 -0
  236. data/lib/rhoconnect/ping/android.rb +1 -1
  237. data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -4
  238. data/lib/rhoconnect/read_state.rb +3 -3
  239. data/lib/rhoconnect/server.rb +159 -190
  240. data/lib/rhoconnect/source.rb +100 -11
  241. data/lib/rhoconnect/stats/record.rb +10 -10
  242. data/lib/rhoconnect/store.rb +905 -591
  243. data/lib/rhoconnect/{model.rb → store_orm.rb} +53 -115
  244. data/lib/rhoconnect/tasks.rb +18 -4
  245. data/lib/rhoconnect/test_methods.rb +30 -17
  246. data/lib/rhoconnect/user.rb +35 -17
  247. data/lib/rhoconnect/utilities.rb +1 -1
  248. data/lib/rhoconnect/version.rb +2 -2
  249. data/lib/rhoconnect/web-console/server.rb +29 -14
  250. data/lib/rhoconnect/web-console/views/home.js +10 -10
  251. data/lib/rhoconnect/web-console/views/new_ping.js +1 -1
  252. data/lib/rhoconnect.rb +120 -51
  253. data/rhoconnect.gemspec +4 -3
  254. data/spec/api/api_helper.rb +1 -6
  255. data/spec/api/app/fast_delete_spec.rb +4 -4
  256. data/spec/api/app/fast_insert_spec.rb +4 -4
  257. data/spec/api/app/fast_update_spec.rb +8 -8
  258. data/spec/api/app/push_deletes_spec.rb +2 -2
  259. data/spec/api/app/push_objects_spec.rb +5 -5
  260. data/spec/api/client/client_get_db_doc_spec.rb +6 -4
  261. data/spec/api/client/client_set_db_doc_spec.rb +3 -2
  262. data/spec/api/client/get_client_params_spec.rb +14 -0
  263. data/spec/api/client/list_client_docs_spec.rb +30 -20
  264. data/spec/api/client/reset_spec.rb +36 -0
  265. data/spec/api/source/get_source_params_spec.rb +23 -17
  266. data/spec/api/system/get_license_info_spec.rb +0 -20
  267. data/spec/api/system/login_spec.rb +8 -0
  268. data/spec/api/system/reset_spec.rb +0 -1
  269. data/spec/api/system/stats_spec.rb +5 -5
  270. data/spec/api/user/create_user_spec.rb +14 -6
  271. data/spec/api/user/delete_user_spec.rb +20 -18
  272. data/spec/api/user/list_users_spec.rb +5 -6
  273. data/spec/api/user/update_user_spec.rb +5 -4
  274. data/spec/apps/rhotestapp/config.ru +16 -1
  275. data/spec/apps/rhotestapp/controllers/js/js_sample_controller.js +23 -0
  276. data/spec/apps/rhotestapp/controllers/js/sample2_controller.js +32 -0
  277. data/spec/apps/rhotestapp/controllers/ruby/application_controller.rb +21 -0
  278. data/spec/apps/rhotestapp/controllers/ruby/sample_adapter_controller.rb +8 -0
  279. data/spec/apps/rhotestapp/models/js/js_sample.js +55 -0
  280. data/spec/apps/rhotestapp/models/js/sample2.js +25 -0
  281. data/spec/apps/rhotestapp/{sources → models/ruby}/base_adapter.rb +0 -0
  282. data/spec/apps/rhotestapp/{sources → models/ruby}/fixed_schema_adapter.rb +0 -0
  283. data/spec/apps/rhotestapp/{sources → models/ruby}/other_adapter.rb +0 -0
  284. data/spec/apps/rhotestapp/{sources → models/ruby}/sample_adapter.rb +0 -0
  285. data/spec/apps/rhotestapp/{sources → models/ruby}/simple_adapter.rb +2 -2
  286. data/spec/apps/rhotestapp/{sources → models/ruby}/sub_adapter.rb +0 -0
  287. data/spec/apps/rhotestapp/settings/settings.yml +0 -1
  288. data/spec/bulk_data/bulk_data_spec.rb +20 -5
  289. data/spec/cli/cli_spec.rb +83 -0
  290. data/spec/client_spec.rb +20 -17
  291. data/spec/client_sync_spec.rb +244 -406
  292. data/spec/controllers/js_base_spec.rb +89 -0
  293. data/spec/doc/doc_spec.rb +18 -18
  294. data/spec/document_spec.rb +29 -13
  295. data/spec/dynamic_adapter_spec.rb +6 -6
  296. data/spec/generator/generator_spec.rb +7 -4
  297. data/spec/jobs/bulk_data_job_spec.rb +14 -10
  298. data/spec/jobs/source_job_spec.rb +8 -8
  299. data/spec/license_spec.rb +5 -2
  300. data/spec/models/js_model_spec.rb +39 -0
  301. data/spec/node_spec.rb +42 -0
  302. data/spec/perf/store_perf_spec.rb +67 -12
  303. data/spec/ping/android_spec.rb +1 -1
  304. data/spec/read_state_spec.rb +1 -1
  305. data/spec/rhoconnect_spec.rb +1 -1
  306. data/spec/server/cors_spec.rb +14 -18
  307. data/spec/server/server_spec.rb +265 -88
  308. data/spec/server/stats_spec.rb +1 -1
  309. data/spec/source_adapter_spec.rb +54 -27
  310. data/spec/source_spec.rb +8 -3
  311. data/spec/source_sync_spec.rb +538 -468
  312. data/spec/spec_helper.rb +35 -4
  313. data/spec/stats/record_spec.rb +10 -10
  314. data/spec/{model_spec.rb → store_orm_spec.rb} +56 -54
  315. data/spec/store_spec.rb +159 -179
  316. data/spec/support/shared_examples.rb +36 -27
  317. data/spec/sync_states_spec.rb +40 -33
  318. data/spec/test_methods_spec.rb +18 -14
  319. data/spec/user_spec.rb +17 -30
  320. metadata +156 -52
  321. data/bench/benchapp/application.rb +0 -39
  322. data/bench/blobapp/application.rb +0 -44
  323. data/commands/rhoconnect/clean_start.rb +0 -9
  324. data/commands/rhoconnect/create_user.rb +0 -18
  325. data/commands/rhoconnect/delete_device.rb +0 -9
  326. data/commands/rhoconnect/delete_user.rb +0 -8
  327. data/commands/rhoconnect/reset.rb +0 -16
  328. data/commands/rhoconnect/reset_refresh.rb +0 -11
  329. data/generators/templates/application/application.rb +0 -43
  330. data/lib/rhoconnect/client_sync.rb +0 -434
  331. data/lib/rhoconnect/dynamic_adapter.rb +0 -91
  332. data/lib/rhoconnect/middleware/admin_user.rb +0 -23
  333. data/lib/rhoconnect/middleware/current_request.rb +0 -16
  334. data/lib/rhoconnect/middleware/login_required.rb +0 -22
  335. data/lib/rhoconnect/source_adapter.rb +0 -132
  336. data/lib/rhoconnect/source_sync.rb +0 -464
  337. data/spec/apps/rhotestapp/application.rb +0 -23
@@ -5,59 +5,79 @@ require 'json'
5
5
  require 'fileutils'
6
6
  require 'rhoconnect'
7
7
 
8
- # all middlewares
8
+ # all middlewares, conditions, handlers - everything, that makes our product so cool!
9
+ Dir[File.join(File.dirname(__FILE__),'handler', '*.rb')].each { |mw| require mw }
9
10
  Dir[File.join(File.dirname(__FILE__),'middleware','**','*.rb')].each { |mw| require mw }
11
+ Dir[File.join(File.dirname(__FILE__),'condition','**','*.rb')].each { |mw| require mw }
10
12
 
11
13
  module Rhoconnect
12
-
14
+
13
15
  class ApiException < Exception
14
16
  attr_accessor :error_code
15
17
  def initialize(error_code,message)
16
18
  super(message)
17
19
  @error_code = error_code
18
- end
20
+ end
19
21
  end
20
-
22
+
21
23
  class Server < Sinatra::Base
22
24
  set :static, true
23
25
  set :stats, false
24
26
  # default secret
25
27
  @secret = '<changeme>'
26
-
28
+
29
+ class << self
30
+ def set_default(setting, value)
31
+ @default_settings ||= {}
32
+ @default_settings[setting] = value
33
+ end
34
+
35
+ # these methods will be called by the subclasses
36
+ # to prevent double inclusion
37
+ # of the base middleware
38
+ # def reset_rc_base!
39
+ # #@middleware_configured = true
40
+ # end
41
+
42
+ # def self.inherited(subclass)
43
+ # subclass.reset_rc_base!
44
+ # end
45
+ end
46
+
27
47
  # Setup route and mimetype for bulk data downloads
28
48
  # TODO: Figure out why "mime :data, 'application/octet-stream'" doesn't work
29
- Rack::Mime::MIME_TYPES['.data'] = 'application/octet-stream'
30
-
49
+ Rack::Mime::MIME_TYPES['.data'] = 'application/octet-stream'
50
+
31
51
  include Rhoconnect
52
+ # common conditions
53
+ extend Rhoconnect::Condition::AdminRequired
54
+ extend Rhoconnect::Condition::LoginRequired
55
+ extend Rhoconnect::Condition::SourceRequired
56
+ extend Rhoconnect::Condition::ClientRequired
57
+ extend Rhoconnect::Condition::Verbs
58
+ extend Rhoconnect::Condition::VerifySuccess
59
+
60
+ # RC Handlers
61
+ include Rhoconnect::Handler::Query::ExecuteMethods
62
+ include Rhoconnect::Handler::Changes::ExecuteMethods
63
+ include Rhoconnect::Handler::Search::ExecuteMethods
64
+ include Rhoconnect::Handler::PluginCallbacks::ExecuteMethods
65
+ include Rhoconnect::Handler::Authenticate::ExecuteMethods
32
66
 
33
67
  # Set rhoconnect middleware
34
68
  set :use_middleware, Proc.new {
35
69
  return false if @middleware_configured # Middleware might be configured only once!
36
70
 
37
71
  use Rhoconnect::Middleware::XDomainSessionWrapper
38
- use Rack::Cors do |cfg|
39
- cfg.allow do |allow|
40
- allow.origins(/.*/)
41
- allow.resource '/application', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
42
- allow.resource '/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
43
- allow.resource '/api/application', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
44
- allow.resource '/api/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
45
- allow.resource "/app/#{Rhoconnect::API_VERSION}/*", :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
46
- allow.resource "/rc/#{Rhoconnect::API_VERSION}/app/*", :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
47
- end
48
- end
49
72
  use Rhoconnect::Middleware::BodyContentTypeParser
50
73
  use Rhoconnect::Middleware::Stats
51
74
  Rhoconnect::Server.set :secret, @secret unless settings.respond_to?(:secret)
52
75
  use Rack::Session::Cookie,
53
76
  :key => 'rhoconnect_session', :expire_after => Rhoconnect.cookie_expire,
54
77
  :secret => Rhoconnect::Server.secret
55
- use Rhoconnect::Middleware::CurrentRequest
56
78
  use Rhoconnect::Middleware::CurrentApp
57
79
  use Rhoconnect::Middleware::CurrentUser
58
- use Rhoconnect::Middleware::AdminUser
59
- use Rhoconnect::Middleware::LoginRequired
60
-
80
+
61
81
  @middleware_configured ||= true
62
82
  }
63
83
 
@@ -66,64 +86,6 @@ module Rhoconnect
66
86
  request.env['PATH_INFO'].split('/').last
67
87
  end
68
88
 
69
- def check_login
70
- begin
71
- yield
72
- rescue LoginException => le
73
- throw :halt, [401, le.message]
74
- rescue Exception => e
75
- throw :halt, [500, e.message]
76
- end
77
- end
78
-
79
- def do_login
80
- check_login do
81
- if login
82
- status(200)
83
- else
84
- raise LoginException.new("Unable to authenticate '#{params[:login]}'")
85
- end
86
- end
87
- end
88
-
89
- def do_ans_login
90
- check_login do
91
- ans_login ? status(204) : status(401)
92
- end
93
- end
94
-
95
- def login
96
- if params[:login].nil? or params[:login].empty?
97
- return false
98
- end
99
- if params[:login] == 'rhoadmin'
100
- user = User.authenticate(params[:login], params[:password])
101
- elsif current_app and current_app.can_authenticate? and params[:login]
102
- user = current_app.authenticate(params[:login], params[:password], session)
103
- end
104
- if user
105
- session[:login] = user.login
106
- session[:app_name] = APP_NAME
107
- else
108
- false
109
- end
110
- end
111
-
112
- def ans_login
113
- if current_app and current_app.can_ans_authenticate?
114
- auth = Rack::Auth::Basic::Request.new(request.env)
115
- current_app.ans_authenticate(
116
- auth.credentials.first, auth.credentials.last
117
- ) if auth.provided? and auth.basic? and auth.credentials
118
- else
119
- false
120
- end
121
- end
122
-
123
- def logout
124
- session[:login] = nil
125
- end
126
-
127
89
  def current_user
128
90
  @env[Rhoconnect::CURRENT_USER]
129
91
  end
@@ -132,43 +94,16 @@ module Rhoconnect
132
94
  @env[Rhoconnect::CURRENT_APP]
133
95
  end
134
96
 
135
- def current_client
136
- if @client.nil?
137
- client_id = @env[Rhoconnect::CLIENT_ID_HEADER]
138
- client_id = params[:client_id] unless client_id
139
- if client_id
140
- @client = Client.load(client_id.to_s,
141
- params[:source_name] ? {:source_name => current_source.name} : {:source_name => '*'})
142
- if @client and current_user and @client.user_id != current_user.login
143
- @client.switch_user(current_user.login)
144
- end
145
- end
146
- end
147
- @client
97
+ def request_action
98
+ Rhoconnect.resource_action(request.env)
148
99
  end
149
100
 
150
- def current_source
151
- return @source if @source
152
- user = current_user
153
- if params[:source_name] and user
154
- @source = Source.load(params[:source_name],
155
- {:user_id => user.login,:app_id => APP_NAME})
156
-
157
- # if source does not exist create one for dynamic adapter
158
- unless @source
159
- sconfig = Rhoconnect.source_config(params[:source_name])
160
- @source = Source.create(sconfig.merge!({:name => params[:source_name]}),{:user_id => user.login, :app_id => APP_NAME})
161
- current_app.sources << @source.name
162
- end
163
- @source
164
- else
165
- log "ERROR: Can't load source, no source_name provided.\n"
166
- nil
167
- end
101
+ def current_client
102
+ @env[Rhoconnect::CURRENT_CLIENT]
168
103
  end
169
104
 
170
- def current_client_sync
171
- ClientSync.new(current_source,current_client,params[:p_size])
105
+ def current_source
106
+ @env[Rhoconnect::CURRENT_SOURCE]
172
107
  end
173
108
 
174
109
  def catch_all
@@ -181,31 +116,28 @@ module Rhoconnect
181
116
  throw :halt, [500, e.message]
182
117
  end
183
118
  end
184
-
185
- def mark_deprecated_call_and_reroute(name, namespace, *params)
186
- namespace_val = namespace.nil? ? "<namespace>" : "#{namespace}"
187
- http_method = request.get? ? "GET" : "POST"
188
- warning_message = "Use of the #{http_method} #{request.path} is deprecated. Use #{http_method} /api/#{namespace_val}/#{name} instead."
119
+
120
+ def mark_deprecated_call_and_reroute_api4(verb, new_route, old_verb, old_route, route_handler, filter_handler=nil, klass = nil)
121
+ warning_message = "Use of the #{old_verb.to_s.upcase} #{old_route} is deprecated. Use Rhoconnect API #{Rhoconnect::API_VERSION} instead."
189
122
  response.headers['Warning'] = warning_message
190
123
  Rhoconnect.log warning_message
191
- if namespace != nil
192
- call env.merge('PATH_INFO' => "/api/#{namespace}/#{name}")
124
+ if klass
125
+ klass_instance = klass.new
126
+ klass_instance.helpers.call! env.merge('PATH_INFO' => new_route, 'REQUEST_METHOD' => verb.to_s.upcase)
193
127
  else
194
- yield *params
128
+ execute_api_call(route_handler, filter_handler)
195
129
  end
196
130
  end
197
-
198
- def mark_deprecated_call_and_reroute_api4(verb, new_route, old_verb, old_route, client_call, &block)
199
- warning_message = "Use of the #{old_verb.to_s.upcase} #{old_route} is deprecated. Use Rhoconnect API #{Rhoconnect::API_VERSION} instead."
200
- response.headers['Warning'] = warning_message
201
- Rhoconnect.log warning_message
202
-
203
- execute_api_call(client_call, &block)
204
- end
205
-
206
- def execute_api_call(client_call = false)
131
+
132
+ def execute_api_call(route_handler, filter_handler = nil)
207
133
  catch_all do
208
- res = yield params, current_user, self
134
+ proc = route_handler.bind(self)
135
+ res = nil
136
+ if filter_handler
137
+ res = send filter_handler, proc
138
+ else
139
+ res = proc.call
140
+ end
209
141
  if params.has_key? :warning
210
142
  Rhoconnect.log params[:warning]
211
143
  response.headers['Warning'] = params[:warning]
@@ -214,23 +146,22 @@ module Rhoconnect
214
146
  end
215
147
  end
216
148
  end
217
-
218
- private
149
+
150
+ private
219
151
  def self._use_async_framework
220
152
  return false if settings.respond_to?(:use_async_model) and settings.use_async_model == false
221
153
  return false if @dispatch_framework_initialized
222
-
154
+
223
155
  @dispatch_framework_initialized ||=true
224
156
  if RUBY_VERSION =~ /1.9/ and not defined?(JRUBY_VERSION)
225
- begin
226
- require 'rhoconnect/async'
157
+ begin
158
+ require 'rhoconnect/async'
227
159
  register Rhoconnect::Synchrony
228
- helpers Rhoconnect::AsyncHelpers
229
160
  rescue LoadError => e
230
161
  # if it fails here - Async can not be used
231
162
  settings.use_async_model = false
232
163
  warning_for_async_gems = <<_INSTALL_ASYNC_GEMS
233
-
164
+
234
165
  ***** WARNING *****
235
166
  Rhoconnect has detected that Ruby 1.9.x is used and tried to initialize Async Framework, but failed:
236
167
 
@@ -253,33 +184,35 @@ _INSTALL_ASYNC_GEMS
253
184
  set :use_async_model, false
254
185
  end
255
186
  end
256
-
257
- def self.new
258
- # by default, enable this feature
259
- if not settings.respond_to?(:use_async_model) or settings.use_async_model != false
260
- set :use_async_model, true
261
- end
262
- # this must be called first - because
263
- # it redefines some of the middleware
264
- Rhoconnect::Server._use_async_framework
265
-
266
- if settings.respond_to?(:stats) and settings.send(:stats) == true
267
- Rhoconnect.stats = true
268
- else
269
- Rhoconnect::Server.disable :stats
270
- Rhoconnect.stats = false
187
+
188
+ class << self
189
+ def new
190
+ # by default, enable this feature
191
+ if not settings.respond_to?(:use_async_model) or settings.use_async_model != false
192
+ set :use_async_model, true
193
+ end
194
+ # this must be called first - because
195
+ # it redefines some of the middleware
196
+ _use_async_framework
197
+
198
+ if settings.respond_to?(:stats) and settings.send(:stats) == true
199
+ Rhoconnect.stats = true
200
+ else
201
+ Rhoconnect::Server.disable :stats
202
+ Rhoconnect.stats = false
203
+ end
204
+ Rhoconnect::Server.settings.use_middleware
205
+ #puts "Controller #{self.name} has been initialized with #{middleware.inspect}"
206
+ super
271
207
  end
272
- settings.use_middleware
273
-
274
- super
275
208
  end
276
-
209
+
277
210
  def initialize
278
211
  # Whine about default session secret
279
212
  check_default_secret!(Rhoconnect::Server.secret)
280
213
  super
281
214
  end
282
-
215
+
283
216
  Rhoconnect.log "Rhoconnect Server v#{Rhoconnect::VERSION} started..."
284
217
 
285
218
  before do
@@ -287,46 +220,82 @@ _INSTALL_ASYNC_GEMS
287
220
  headers({'pragma'=>'no-cache'})
288
221
  end
289
222
 
290
- get '/' do
291
- redirect "/console/"
292
- end
293
-
294
- def self.api(name, namespace = nil, verb = :post, &block)
295
- # this method is deprecated - so we should warn the users
296
- # that it will be removed in 4.0
297
- warning_for_server_api = <<_DEPRECATE_SERVER_API
298
- ***** WARNING *****
299
- Server.api method is deprecated and will be removed in Rhoconnect 4.0
300
- Please change your implementation to Server.api4
301
- _DEPRECATE_SERVER_API
302
- puts warning_for_server_api
303
-
304
- old_api_prefix = (namespace == :application) ? :application : :api
305
- client_call = (namespace == :application) ? true : false
306
- send verb, "/#{old_api_prefix}/#{name}" do
307
- mark_deprecated_call_and_reroute(name, namespace, params, &block)
308
- end
309
-
310
- send verb, "/api/#{namespace}/#{name}" do
311
- execute_api_call(client_call, &block)
312
- end
313
- end
314
-
315
- def self.api4(method_name, verb, route, admin = true, deprecated_route = nil, &block)
223
+ def self.api4(resource, route_url, verb = :post, options = {}, &block)
224
+ deprecated_route = options[:deprecated_route]
225
+ options.delete(:deprecated_route)
226
+
227
+ # TODO: Re-work deprecation handling as soon as client is updated
228
+ # the only reason we do criss-cross routing is because old-style routes
229
+ # had one root and new-style routes now reside in separate controllers
230
+ rc_handler = options[:rc_handler]
231
+ options.delete(:rc_handler)
232
+ rc_handler_method = nil
233
+ rc_handler_method = "execute_#{rc_handler}_handler".to_sym if rc_handler
316
234
  unless deprecated_route.nil?
317
235
  deprecated_urls = deprecated_route[:url].is_a?(String) ? [deprecated_route[:url]] : deprecated_route[:url]
318
236
  deprecated_urls.each do |deprecated_url|
319
- send deprecated_route[:verb], deprecated_url do
320
- mark_deprecated_call_and_reroute_api4(verb, route, deprecated_route[:verb], deprecated_url, !admin, &block)
237
+ d_verb = deprecated_route[:verb].to_sym
238
+ dep_route_handler = Rhoconnect::DefaultServer.send(:generate_method, :dep_route_handler, &block)
239
+
240
+ # build deprecation hash to be used later at run time for re-directing
241
+ dep_info = {}
242
+ dep_info[:klass] = self
243
+ dep_info[:route_handler] = dep_route_handler
244
+ dep_info[:rc_handler_method] = rc_handler_method
245
+ dep_info[:verb] = verb
246
+ dep_info[:route_url] = route_url
247
+
248
+ Rhoconnect::DefaultServer.registered_routes(d_verb)[deprecated_url] ||= {}
249
+ Rhoconnect::DefaultServer.registered_routes(d_verb)[deprecated_url][self.name] = dep_info
250
+ Rhoconnect::DefaultServer.send d_verb, deprecated_url, options do
251
+ klass = nil
252
+ req_verb = env['REQUEST_METHOD'].downcase.to_sym
253
+ req_path = env['PATH_INFO']
254
+ # retrieve controller-specific deprecation handler
255
+ if params[:source_name]
256
+ controller_name = "#{params[:source_name]}Controller"
257
+ dep_info = Rhoconnect::DefaultServer.registered_routes(req_verb)[req_path][controller_name]
258
+ if dep_info
259
+ klass = dep_info[:klass]
260
+ verb = dep_info[:verb]
261
+ route_url = dep_info[:route_url]
262
+ dep_route_handler = dep_info[:route_handler]
263
+ rc_handler_method = dep_info[:rc_handler_method]
264
+ end
265
+ end
266
+ mark_deprecated_call_and_reroute_api4(verb, route_url, req_verb, req_path, dep_route_handler, rc_handler_method, klass)
321
267
  end
322
268
  end
323
269
  end
324
- send verb, route do
325
- execute_api_call(!admin, &block)
270
+
271
+ # turn block into UnboundMethod - so that we can bind it later with
272
+ # particular Controller instance
273
+ route_handler = send(:generate_method, :route_handler, &block)
274
+ route verb.to_s.upcase, route_url, options do
275
+ execute_api_call(route_handler, rc_handler_method)
326
276
  end
327
277
  end
328
278
  end
279
+
280
+ # serves OBSOLETED routes and root
281
+ # TODO - OBSOLETED routes should be removed
282
+ class DefaultServer < Rhoconnect::Server
283
+ helpers Rhoconnect::Handler::Helpers::BulkData
284
+
285
+ # to prevent registering the same route several times
286
+ def self.registered_routes(verb)
287
+ @registered_routes ||= {}
288
+ @registered_routes[verb] ||= {}
289
+ @registered_routes[verb]
290
+ end
291
+
292
+ get '/' do
293
+ redirect "/console/"
294
+ end
295
+ end
329
296
  end
330
297
 
331
298
  include Rhoconnect
332
- Dir[File.join(File.dirname(__FILE__),'api','**','*.rb')].each { |api| load api }
299
+ # load all controllers , starting with base
300
+ require 'rhoconnect/controller/base'
301
+ Dir[File.join(File.dirname(__FILE__),'controller','**','*.rb')].each { |api| require api }
@@ -1,5 +1,5 @@
1
1
  module Rhoconnect
2
- class MemoryModel
2
+ class MemoryOrm
3
3
  @@model_data = {}
4
4
  @@string_fields = []
5
5
  @@integer_fields = []
@@ -85,9 +85,20 @@ module Rhoconnect
85
85
  end
86
86
  res
87
87
  end
88
+
89
+ def to_hash
90
+ res = {}
91
+ @@string_fields.each do |field|
92
+ res[field] = send(field.to_sym)
93
+ end
94
+ @@integer_fields.each do |field|
95
+ res[field] = send(field.to_sym)
96
+ end
97
+ res
98
+ end
88
99
  end
89
100
 
90
- class Source < MemoryModel
101
+ class Source < MemoryOrm
91
102
  attr_accessor :app_id, :user_id
92
103
 
93
104
  validates_presence_of :name
@@ -99,6 +110,22 @@ module Rhoconnect
99
110
  define_fields([:id, :rho__id, :name, :url, :login, :password, :callback_url, :partition_type, :sync_type,
100
111
  :queue, :query_queue, :cud_queue, :belongs_to, :has_many, :pass_through, :push_notify], [:source_id, :priority, :retry_limit, :simulate_time])
101
112
 
113
+ define_valid_doctypes([:md,
114
+ :md_size,
115
+ :md_copy,
116
+ :errors,
117
+ :metadata,
118
+ :metadata_sha1,
119
+ :schema,
120
+ :schema_sha1,
121
+ :create,
122
+ :update,
123
+ :delete])
124
+ # we can not enforce valid doctypes at this point
125
+ # because QUERY creates temporary md docs
126
+ # TODO: re-work it to eliminate this obstacle
127
+ #enforce_valid_doctypes=false
128
+
102
129
  def initialize(fields)
103
130
  self.name = fields['name'] || fields[:name]
104
131
  update_fields(fields)
@@ -121,6 +148,12 @@ module Rhoconnect
121
148
  fields[:push_notify] = fields[:push_notify] ? fields[:push_notify] : 'false'
122
149
  end
123
150
 
151
+ def store_index(doctype)
152
+ # app-partitioned sources go to 0
153
+ # everything else if sharded
154
+ compute_store_index(doctype, self, self.user_id)
155
+ end
156
+
124
157
  def self.create(fields,params)
125
158
  fields = fields.with_indifferent_access # so we can access hash keys as symbols
126
159
  super(fields,params)
@@ -139,6 +172,7 @@ module Rhoconnect
139
172
  Rhoconnect.create_predefined_source(obj_id,params)
140
173
 
141
174
  model_hash = @@model_data[obj_id.to_sym]
175
+
142
176
  obj = new(model_hash) if model_hash
143
177
  if obj
144
178
  obj = obj.dup
@@ -172,7 +206,11 @@ module Rhoconnect
172
206
 
173
207
  def self.delete_all
174
208
  params = {:app_id => APP_NAME,:user_id => '*'}
175
- @@model_data.each { |k,v| Source.load(k,params).flash_store_data }
209
+ @@model_data.each do |k,v|
210
+ s = Source.load(k,params)
211
+ s.flush_store_data
212
+ Store.flush_data("source:#{s.name}:*")
213
+ end
176
214
  @@model_data = {}
177
215
  end
178
216
 
@@ -201,10 +239,6 @@ module Rhoconnect
201
239
  self.class.set_defaults(fields)
202
240
  end
203
241
 
204
- def clone(src_doctype,dst_doctype)
205
- Store.clone(docname(src_doctype),docname(dst_doctype))
206
- end
207
-
208
242
  def poll_interval
209
243
  value = Store.get_value(poll_interval_key)
210
244
  value ? value.to_i : nil
@@ -250,14 +284,69 @@ module Rhoconnect
250
284
  "#{user_by_partition}:#{self.name}:#{doctype.to_s}"
251
285
  end
252
286
 
253
- def flash_store_data
287
+ def flush_store_data
254
288
  delete_user_read_state
255
- flash_data('*')
256
- flash_data(poll_interval_key)
289
+ # queues should be processed separately first
290
+ [:create, :update, :delete].each do |doctype|
291
+ flush_queue(doctype)
292
+ end
293
+ # then, all other doctypes
294
+ self.class.valid_doctypes.each do |doctype|
295
+ flush_data(doctype)
296
+ end
297
+ end
298
+
299
+ def queue_docname(dockey)
300
+ # currently, all queues are bound by user - not shared
301
+ docname(dockey)
302
+ end
303
+
304
+ # this data is not sharded
305
+ def lock_queue_doc(doctype)
306
+ Store.lock(queue_docname(doctype)) do
307
+ yield self
308
+ end
309
+ end
310
+
311
+ # this is an atomic operation
312
+ # - lock queue, get queue data, flush queue, unlock queue
313
+ def process_queue(doctype)
314
+ verify_doctype(doctype)
315
+ ret = []
316
+ keys = []
317
+ lock_queue_doc(doctype) do |s|
318
+ ret, keys = Store.get_store(0).get_zdata(s.queue_docname(doctype))
319
+ Store.get_store(0).flush_zdata(s.queue_docname(doctype))
320
+ end
321
+ [ret, keys]
322
+ end
323
+
324
+ def get_queue(doctype)
325
+ verify_doctype(doctype)
326
+ ret = []
327
+ keys = []
328
+ lock_queue_doc(doctype) do |s|
329
+ ret, keys = Store.get_store(0).get_zdata(s.queue_docname(doctype))
330
+ end
331
+ [ret, keys]
332
+ end
333
+
334
+ def flush_queue(doctype)
335
+ verify_doctype(doctype)
336
+ lock_queue_doc(doctype) do |s|
337
+ Store.get_store(0).flush_zdata(s.queue_docname(doctype))
338
+ end
339
+ end
340
+
341
+ def push_queue(doctype,assoc_key, data={},append=false)
342
+ verify_doctype(doctype)
343
+ lock_queue_doc(doctype) do |s|
344
+ Store.get_store(0).put_zdata(s.queue_docname(doctype),assoc_key, data,append)
345
+ end
257
346
  end
258
347
 
259
348
  def delete
260
- flash_store_data
349
+ flush_store_data
261
350
  @@model_data.delete(rho__id.to_sym) if rho__id
262
351
  end
263
352
 
@@ -10,19 +10,19 @@ module Rhoconnect
10
10
  start = (Time.now.to_i / resolution(metric)) * resolution(metric)
11
11
  current, current_score = 0, start
12
12
  Store.lock(key(metric)) do
13
- range = Store.db.zrevrange(key(metric), 0, 0)
13
+ range = Store.zrevrange(key(metric), 0, 0)
14
14
  if !range.empty?
15
15
  member = range[0]
16
16
  m_current = member.split(':')[0]
17
- m_current_score = Store.db.zscore(key(metric), member).to_i
17
+ m_current_score = Store.zscore(key(metric), member).to_i
18
18
  if m_current_score > (start - resolution(metric))
19
- Store.db.zrem(key(metric), member)
19
+ Store.zrem(key(metric), member)
20
20
  current, current_score = m_current, m_current_score
21
21
  end
22
22
  end
23
23
  value = block_given? ? yield(current, value) : value
24
- Store.db.zadd(key(metric), current_score, "#{value}:#{start}")
25
- Store.db.zremrangebyscore(key(metric), 0, start - record_size(metric))
24
+ Store.zadd(key(metric), current_score, "#{value}:#{start}")
25
+ Store.zremrangebyscore(key(metric), 0, start - record_size(metric))
26
26
  end
27
27
  end
28
28
 
@@ -56,15 +56,15 @@ module Rhoconnect
56
56
  end
57
57
 
58
58
  def keys(glob='*')
59
- Store.db.keys(key(glob)).collect {|c| c[5..-1]}
59
+ Store.keys(key(glob)).collect {|c| c[5..-1]}
60
60
  end
61
61
 
62
62
  def reset(metric)
63
- Store.db.del(key(metric))
63
+ Store.flush_data(key(metric))
64
64
  end
65
65
 
66
66
  def reset_all
67
- Store.flash_data('stat:*')
67
+ Store.flush_data('stat:*')
68
68
  end
69
69
 
70
70
  # Returns simple string metric
@@ -79,7 +79,7 @@ module Rhoconnect
79
79
 
80
80
  # Returns the metric data, uses array indexing
81
81
  def range(metric, start, finish = -1)
82
- Store.db.zrange(key(metric), start, finish)
82
+ Store.zrange(key(metric), start, finish)
83
83
  end
84
84
 
85
85
  # Returns the resolution for a given metric, default 60 seconds
@@ -96,7 +96,7 @@ module Rhoconnect
96
96
 
97
97
  # Returns redis object type for a record
98
98
  def rtype(metric)
99
- Store.db.type(key(metric))
99
+ Store.doc_type(key(metric))
100
100
  end
101
101
 
102
102
  def key(metric)