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.
- data/CHANGELOG.md +57 -3
- data/Gemfile +9 -7
- data/Gemfile.lock +37 -37
- data/Rakefile +18 -7
- data/bench/benchapp/Gemfile +1 -1
- data/bench/benchapp/config.ru +0 -3
- data/bench/benchapp/controllers/ruby/application.rb +17 -0
- data/bench/benchapp/controllers/ruby/application_controller.rb +17 -0
- data/bench/benchapp/controllers/ruby/mock_adapter_controller.rb +8 -0
- data/bench/benchapp/controllers/ruby/queue_mock_adapter_controller.rb +8 -0
- data/bench/benchapp/{sources → models/ruby}/mock_adapter.rb +1 -1
- data/bench/benchapp/{sources → models/ruby}/queue_mock_adapter.rb +0 -0
- data/bench/benchapp/spec/{sources → models/ruby}/mock_adapter_spec.rb +1 -1
- data/bench/benchapp/spec/{sources → models/ruby}/queue_mock_adapter_spec.rb +1 -1
- data/bench/benchapp/spec/spec_helper.rb +2 -2
- data/bench/blobapp/Gemfile +1 -1
- data/bench/blobapp/config.ru +0 -3
- data/bench/blobapp/controllers/ruby/application_controller.rb +17 -0
- data/bench/blobapp/controllers/ruby/blob_adapter_controller.rb +8 -0
- data/bench/blobapp/{sources → models/ruby}/blob_adapter.rb +9 -2
- data/bench/blobapp/spec/{sources → models/ruby}/blob_adapter_spec.rb +1 -1
- data/bench/blobapp/spec/spec_helper.rb +1 -1
- data/bench/lib/bench/cli.rb +1 -1
- data/bench/scripts/blob_cud_script.rb +1 -1
- data/bench/scripts/query_md_script.rb +1 -1
- data/bench/scripts/query_only_script.rb +1 -1
- data/bench/scripts/query_script.rb +1 -1
- data/bench/scripts/test_query_script.rb +7 -1
- data/bench/spec/mock_adapter_spec.rb +1 -1
- data/bench/spec/result_spec.rb +3 -3
- data/bin/rhoconnect +5 -3
- data/commands/dtach/dtach_install.rb +2 -2
- data/commands/execute.rb +8 -3
- data/commands/generators/app.rb +3 -3
- data/commands/generators/controller.rb +6 -0
- data/commands/generators/model.rb +6 -0
- data/commands/generators/source.rb +3 -3
- data/commands/generators/update.rb +1 -1
- data/commands/redis/redis_about.rb +2 -2
- data/commands/redis/redis_download.rb +1 -1
- data/commands/redis/redis_install.rb +4 -3
- data/commands/redis/redis_restart.rb +4 -4
- data/commands/redis/redis_start.rb +5 -4
- data/commands/redis/redis_startbg.rb +5 -4
- data/commands/redis/redis_status.rb +13 -0
- data/commands/redis/redis_stop.rb +3 -3
- data/commands/rhoconnect/config.rb +28 -16
- data/commands/rhoconnect/flushdb.rb +1 -2
- data/commands/rhoconnect/get_token.rb +15 -11
- data/commands/rhoconnect/restart.rb +13 -5
- data/commands/rhoconnect/set_admin_password.rb +8 -8
- data/commands/rhoconnect/start.rb +74 -16
- data/commands/rhoconnect/startbg.rb +1 -1
- data/commands/rhoconnect/startdebug.rb +1 -1
- data/commands/rhoconnect/stop.rb +13 -1
- data/commands/rhoconnect/web.rb +5 -5
- data/commands/rhoconnect_console/console.rb +7 -5
- data/commands/{rhoconnect → rhoconnect_spec}/spec.rb +0 -0
- data/commands/rhoconnect_war/war.rb +9 -9
- data/commands/utilities/blank_app.ru +56 -0
- data/commands/utilities/redis_runner.rb +54 -19
- data/doc/authentication.txt +80 -6
- data/doc/blob-sync.txt +104 -97
- data/doc/bulk-sync.txt +1 -1
- data/doc/client-java.txt +3 -3
- data/doc/client-objc.txt +2 -2
- data/doc/client.txt +4 -4
- data/doc/command-line.txt +105 -200
- data/doc/data-partitioning.txt +40 -0
- data/doc/deploying.txt +249 -77
- data/doc/extending-rhoconnect-server.txt +40 -57
- data/doc/heroku-addon.txt +2 -0
- data/doc/install.txt +45 -95
- data/doc/introduction.txt +1 -1
- data/doc/java-plugin.txt +365 -190
- data/doc/metadata.txt +1 -1
- data/doc/migration.txt +108 -142
- data/doc/preparing-production.txt +1 -1
- data/doc/push-backend-setup.txt +2 -0
- data/doc/push-client-setup-android.txt +78 -0
- data/doc/push-client-setup-bb.txt +81 -0
- data/doc/push-client-setup-ios.txt +70 -0
- data/doc/push-client-setup-rps.txt +200 -0
- data/doc/push-client-setup.txt +63 -66
- data/doc/push-server-setup.txt +67 -40
- data/doc/push-testing.txt +29 -0
- data/doc/push.txt +21 -6
- data/doc/rest-api.txt +128 -55
- data/doc/rhoconnect-redis-stack.txt +120 -0
- data/doc/settings.txt +4 -12
- data/doc/source-adapters-intro.txt +28 -0
- data/doc/source-adapters.txt +235 -272
- data/doc/stats-middleware.txt +9 -29
- data/doc/supported-platforms.txt +21 -30
- data/doc/testing.txt +40 -42
- data/doc/tutorial.txt +72 -57
- data/examples/simple/Gemfile +1 -1
- data/examples/simple/application.rb +4 -5
- data/examples/simple/my_server.rb +2 -2
- data/examples/simple/settings/settings.yml +1 -1
- data/generators/rhoconnect.rb +151 -50
- data/generators/templates/application/Gemfile +1 -1
- data/generators/templates/application/Rakefile +3 -3
- data/generators/templates/application/config.ru +1 -4
- data/generators/templates/application/controllers/application_controller.rb +17 -0
- data/generators/templates/application/controllers/js/application_controller.js +14 -0
- data/generators/templates/application/controllers/ruby/application_controller.rb +17 -0
- data/generators/templates/application/package.json +8 -0
- data/generators/templates/application/rcgemfile +2 -5
- data/generators/templates/application/settings/settings.yml +3 -3
- data/generators/templates/application/spec/application_controller_spec.rb +23 -0
- data/generators/templates/application/spec/js_spec.rb +25 -0
- data/generators/templates/application/spec/spec_helper.rb +21 -7
- data/generators/templates/source/controllers/js/controller.js +7 -0
- data/generators/templates/source/controllers/ruby/controller.rb +8 -0
- data/generators/templates/source/controllers/ruby/controller_spec.rb +27 -0
- data/generators/templates/source/models/js/model.js +46 -0
- data/generators/templates/source/{source_adapter.rb → models/ruby/model.rb} +15 -10
- data/generators/templates/source/{source_spec.rb → models/ruby/model_spec.rb} +1 -1
- data/install.sh +5 -5
- data/installer/unix-like/create_texts.rb +2 -2
- data/installer/unix-like/rho_connect_install_constants.rb +2 -2
- data/installer/unix-like/rho_connect_install_utilities.rb +1 -1
- data/installer/utils/constants.rb +4 -4
- data/js-adapters/ballroom.js +216 -0
- data/js-adapters/node.rb +52 -0
- data/js-adapters/node_channel.rb +181 -0
- data/js-adapters/request.js +27 -0
- data/js-adapters/response.js +57 -0
- data/js-adapters/rhoconnect_helpers.js +60 -0
- data/js-adapters/router.js +60 -0
- data/js-adapters/server.js +5 -0
- data/lib/rhoconnect/api/app/ans_login.rb +3 -3
- data/lib/rhoconnect/api/app/bulk_data.rb +10 -10
- data/lib/rhoconnect/api/app/fast_delete.rb +11 -10
- data/lib/rhoconnect/api/app/fast_insert.rb +11 -10
- data/lib/rhoconnect/api/app/fast_update.rb +11 -10
- data/lib/rhoconnect/api/app/login.rb +5 -5
- data/lib/rhoconnect/api/app/push_deletes.rb +12 -11
- data/lib/rhoconnect/api/app/push_objects.rb +12 -11
- data/lib/rhoconnect/api/app/query.rb +8 -7
- data/lib/rhoconnect/api/app/queue_updates.rb +98 -94
- data/lib/rhoconnect/api/app/search.rb +8 -7
- data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -5
- data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -8
- data/lib/rhoconnect/api/client/create.rb +7 -7
- data/lib/rhoconnect/api/client/get_client_params.rb +4 -4
- data/lib/rhoconnect/api/client/list_client_docs.rb +17 -17
- data/lib/rhoconnect/api/client/register.rb +12 -12
- data/lib/rhoconnect/api/client/reset.rb +5 -5
- data/lib/rhoconnect/api/readstate/set_refresh_time.rb +9 -9
- data/lib/rhoconnect/api/source/get_source_params.rb +4 -4
- data/lib/rhoconnect/api/source/list_sources.rb +16 -16
- data/lib/rhoconnect/api/source/update_source_params.rb +6 -6
- data/lib/rhoconnect/api/store/get_db_doc.rb +4 -4
- data/lib/rhoconnect/api/store/set_db_doc.rb +7 -7
- data/lib/rhoconnect/api/system/get_adapter.rb +4 -4
- data/lib/rhoconnect/api/system/get_license_info.rb +8 -8
- data/lib/rhoconnect/api/system/login.rb +15 -15
- data/lib/rhoconnect/api/system/reset.rb +11 -11
- data/lib/rhoconnect/api/system/save_adapter.rb +4 -4
- data/lib/rhoconnect/api/system/stats.rb +22 -22
- data/lib/rhoconnect/api/user/create_user.rb +7 -7
- data/lib/rhoconnect/api/user/delete_client.rb +6 -6
- data/lib/rhoconnect/api/user/delete_user.rb +11 -10
- data/lib/rhoconnect/api/user/list_clients.rb +4 -4
- data/lib/rhoconnect/api/user/list_source_docs.rb +10 -10
- data/lib/rhoconnect/api/user/list_users.rb +3 -3
- data/lib/rhoconnect/api/user/ping.rb +3 -3
- data/lib/rhoconnect/api/user/show_user.rb +3 -3
- data/lib/rhoconnect/api/user/update_user.rb +5 -5
- data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -5
- data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -10
- data/lib/rhoconnect/api_token.rb +5 -6
- data/lib/rhoconnect/app.rb +6 -46
- data/lib/rhoconnect/application/init.rb +5 -2
- data/lib/rhoconnect/async.rb +76 -39
- data/lib/rhoconnect/bulk_data/bulk_data.rb +6 -4
- data/lib/rhoconnect/client.rb +59 -9
- data/lib/rhoconnect/condition/admin_required.rb +27 -0
- data/lib/rhoconnect/condition/client_required.rb +50 -0
- data/lib/rhoconnect/condition/login_required.rb +22 -0
- data/lib/rhoconnect/condition/source_required.rb +49 -0
- data/lib/rhoconnect/condition/verbs.rb +17 -0
- data/lib/rhoconnect/condition/verify_success.rb +19 -0
- data/lib/rhoconnect/controller/app_base.rb +74 -0
- data/lib/rhoconnect/controller/base.rb +68 -0
- data/lib/rhoconnect/controller/clients_controller.rb +79 -0
- data/lib/rhoconnect/controller/dynamic_adapter_controller.rb +93 -0
- data/lib/rhoconnect/controller/js_base.rb +124 -0
- data/lib/rhoconnect/controller/read_state_controller.rb +22 -0
- data/lib/rhoconnect/controller/source_adapter_base.rb +14 -0
- data/lib/rhoconnect/controller/sources_controller.rb +44 -0
- data/lib/rhoconnect/controller/store_controller.rb +25 -0
- data/lib/rhoconnect/controller/system_controller.rb +67 -0
- data/lib/rhoconnect/controller/users_controller.rb +99 -0
- data/lib/rhoconnect/db_adapter.rb +1 -3
- data/lib/rhoconnect/document.rb +159 -50
- data/lib/rhoconnect/handler/authenticate/execute_methods.rb +77 -0
- data/lib/rhoconnect/handler/authenticate/runner.rb +49 -0
- data/lib/rhoconnect/handler/authenticate.rb +3 -0
- data/lib/rhoconnect/handler/bulk_data.rb +28 -0
- data/lib/rhoconnect/handler/changes/engine.rb +271 -0
- data/lib/rhoconnect/handler/changes/execute_methods.rb +88 -0
- data/lib/rhoconnect/handler/changes/pass_through_runner.rb +11 -0
- data/lib/rhoconnect/handler/changes/runner.rb +53 -0
- data/lib/rhoconnect/handler/changes.rb +31 -0
- data/lib/rhoconnect/handler/helpers/auth_method.rb +29 -0
- data/lib/rhoconnect/handler/helpers/binding.rb +18 -0
- data/lib/rhoconnect/handler/helpers/bulk_data.rb +53 -0
- data/lib/rhoconnect/handler/helpers/source_job.rb +14 -0
- data/lib/rhoconnect/handler/helpers.rb +4 -0
- data/lib/rhoconnect/handler/plugin_callbacks/execute_methods.rb +99 -0
- data/lib/rhoconnect/handler/plugin_callbacks/runner.rb +28 -0
- data/lib/rhoconnect/handler/plugin_callbacks.rb +67 -0
- data/lib/rhoconnect/handler/query/engine.rb +93 -0
- data/lib/rhoconnect/handler/query/execute_methods.rb +21 -0
- data/lib/rhoconnect/handler/query/pass_through_runner.rb +35 -0
- data/lib/rhoconnect/handler/query/runner.rb +270 -0
- data/lib/rhoconnect/handler/query.rb +19 -0
- data/lib/rhoconnect/handler/search/engine.rb +60 -0
- data/lib/rhoconnect/handler/search/execute_methods.rb +32 -0
- data/lib/rhoconnect/handler/search/pass_through_runner.rb +18 -0
- data/lib/rhoconnect/handler/search/runner.rb +104 -0
- data/lib/rhoconnect/handler/search.rb +26 -0
- data/lib/rhoconnect/handler/sync.rb +29 -0
- data/lib/rhoconnect/jobs/source_job.rb +13 -4
- data/lib/rhoconnect/js_adapter.rb +79 -0
- data/lib/rhoconnect/license.rb +10 -2
- data/lib/rhoconnect/middleware/current_user.rb +14 -1
- data/lib/rhoconnect/middleware/helpers.rb +10 -93
- data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +1 -1
- data/lib/rhoconnect/model/base.rb +229 -0
- data/lib/rhoconnect/model/dynamic_adapter_model.rb +90 -0
- data/lib/rhoconnect/model/js_base.rb +121 -0
- data/lib/rhoconnect/ping/android.rb +1 -1
- data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -4
- data/lib/rhoconnect/read_state.rb +3 -3
- data/lib/rhoconnect/server.rb +159 -190
- data/lib/rhoconnect/source.rb +100 -11
- data/lib/rhoconnect/stats/record.rb +10 -10
- data/lib/rhoconnect/store.rb +905 -591
- data/lib/rhoconnect/{model.rb → store_orm.rb} +53 -115
- data/lib/rhoconnect/tasks.rb +18 -4
- data/lib/rhoconnect/test_methods.rb +30 -17
- data/lib/rhoconnect/user.rb +35 -17
- data/lib/rhoconnect/utilities.rb +1 -1
- data/lib/rhoconnect/version.rb +2 -2
- data/lib/rhoconnect/web-console/server.rb +29 -14
- data/lib/rhoconnect/web-console/views/home.js +10 -10
- data/lib/rhoconnect/web-console/views/new_ping.js +1 -1
- data/lib/rhoconnect.rb +120 -51
- data/rhoconnect.gemspec +4 -3
- data/spec/api/api_helper.rb +1 -6
- data/spec/api/app/fast_delete_spec.rb +4 -4
- data/spec/api/app/fast_insert_spec.rb +4 -4
- data/spec/api/app/fast_update_spec.rb +8 -8
- data/spec/api/app/push_deletes_spec.rb +2 -2
- data/spec/api/app/push_objects_spec.rb +5 -5
- data/spec/api/client/client_get_db_doc_spec.rb +6 -4
- data/spec/api/client/client_set_db_doc_spec.rb +3 -2
- data/spec/api/client/get_client_params_spec.rb +14 -0
- data/spec/api/client/list_client_docs_spec.rb +30 -20
- data/spec/api/client/reset_spec.rb +36 -0
- data/spec/api/source/get_source_params_spec.rb +23 -17
- data/spec/api/system/get_license_info_spec.rb +0 -20
- data/spec/api/system/login_spec.rb +8 -0
- data/spec/api/system/reset_spec.rb +0 -1
- data/spec/api/system/stats_spec.rb +5 -5
- data/spec/api/user/create_user_spec.rb +14 -6
- data/spec/api/user/delete_user_spec.rb +20 -18
- data/spec/api/user/list_users_spec.rb +5 -6
- data/spec/api/user/update_user_spec.rb +5 -4
- data/spec/apps/rhotestapp/config.ru +16 -1
- data/spec/apps/rhotestapp/controllers/js/js_sample_controller.js +23 -0
- data/spec/apps/rhotestapp/controllers/js/sample2_controller.js +32 -0
- data/spec/apps/rhotestapp/controllers/ruby/application_controller.rb +21 -0
- data/spec/apps/rhotestapp/controllers/ruby/sample_adapter_controller.rb +8 -0
- data/spec/apps/rhotestapp/models/js/js_sample.js +55 -0
- data/spec/apps/rhotestapp/models/js/sample2.js +25 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/base_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/fixed_schema_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/other_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/sample_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/simple_adapter.rb +2 -2
- data/spec/apps/rhotestapp/{sources → models/ruby}/sub_adapter.rb +0 -0
- data/spec/apps/rhotestapp/settings/settings.yml +0 -1
- data/spec/bulk_data/bulk_data_spec.rb +20 -5
- data/spec/cli/cli_spec.rb +83 -0
- data/spec/client_spec.rb +20 -17
- data/spec/client_sync_spec.rb +244 -406
- data/spec/controllers/js_base_spec.rb +89 -0
- data/spec/doc/doc_spec.rb +18 -18
- data/spec/document_spec.rb +29 -13
- data/spec/dynamic_adapter_spec.rb +6 -6
- data/spec/generator/generator_spec.rb +7 -4
- data/spec/jobs/bulk_data_job_spec.rb +14 -10
- data/spec/jobs/source_job_spec.rb +8 -8
- data/spec/license_spec.rb +5 -2
- data/spec/models/js_model_spec.rb +39 -0
- data/spec/node_spec.rb +42 -0
- data/spec/perf/store_perf_spec.rb +67 -12
- data/spec/ping/android_spec.rb +1 -1
- data/spec/read_state_spec.rb +1 -1
- data/spec/rhoconnect_spec.rb +1 -1
- data/spec/server/cors_spec.rb +14 -18
- data/spec/server/server_spec.rb +265 -88
- data/spec/server/stats_spec.rb +1 -1
- data/spec/source_adapter_spec.rb +54 -27
- data/spec/source_spec.rb +8 -3
- data/spec/source_sync_spec.rb +538 -468
- data/spec/spec_helper.rb +35 -4
- data/spec/stats/record_spec.rb +10 -10
- data/spec/{model_spec.rb → store_orm_spec.rb} +56 -54
- data/spec/store_spec.rb +159 -179
- data/spec/support/shared_examples.rb +36 -27
- data/spec/sync_states_spec.rb +40 -33
- data/spec/test_methods_spec.rb +18 -14
- data/spec/user_spec.rb +17 -30
- metadata +156 -52
- data/bench/benchapp/application.rb +0 -39
- data/bench/blobapp/application.rb +0 -44
- data/commands/rhoconnect/clean_start.rb +0 -9
- data/commands/rhoconnect/create_user.rb +0 -18
- data/commands/rhoconnect/delete_device.rb +0 -9
- data/commands/rhoconnect/delete_user.rb +0 -8
- data/commands/rhoconnect/reset.rb +0 -16
- data/commands/rhoconnect/reset_refresh.rb +0 -11
- data/generators/templates/application/application.rb +0 -43
- data/lib/rhoconnect/client_sync.rb +0 -434
- data/lib/rhoconnect/dynamic_adapter.rb +0 -91
- data/lib/rhoconnect/middleware/admin_user.rb +0 -23
- data/lib/rhoconnect/middleware/current_request.rb +0 -16
- data/lib/rhoconnect/middleware/login_required.rb +0 -22
- data/lib/rhoconnect/source_adapter.rb +0 -132
- data/lib/rhoconnect/source_sync.rb +0 -464
- data/spec/apps/rhotestapp/application.rb +0 -23
data/install.sh
CHANGED
|
@@ -46,7 +46,7 @@ checkDeps ()
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
# determinePkgMgr
|
|
49
|
-
# Determines if the system is currently using rpm or
|
|
49
|
+
# Determines if the system is currently using rpm or
|
|
50
50
|
# debian based pckage management
|
|
51
51
|
determinePkgMgr ()
|
|
52
52
|
{
|
|
@@ -195,7 +195,7 @@ installRuby ()
|
|
|
195
195
|
echo "tar -xzf ${prefix}/${rubyTar} -C ${prefix}" >> $log
|
|
196
196
|
tar -xzf ${prefix}/${rubyTar} -C ${prefix} > /dev/null 2>&1
|
|
197
197
|
fi
|
|
198
|
-
|
|
198
|
+
|
|
199
199
|
echo "Installing ruby. This may take some time..." | tee -a $log
|
|
200
200
|
echo "pushd ${prefix}/${rubyDir}" | tee -a $log
|
|
201
201
|
pushd ${prefix}/${rubyDir}
|
|
@@ -204,14 +204,14 @@ installRuby ()
|
|
|
204
204
|
echo "make && make install" | tee -a $log
|
|
205
205
|
make >> $log 2>&1
|
|
206
206
|
make install >> $log 2>&1
|
|
207
|
-
|
|
207
|
+
|
|
208
208
|
if (( $? )) ; then
|
|
209
209
|
echo "Some dependencies not installed..." | tee -a $log
|
|
210
210
|
echo "Please install them and then re-run the installation script." | tee -a $log
|
|
211
211
|
echo "For troubleshooting see file $log ..." | tee -a $log
|
|
212
212
|
exit 1
|
|
213
213
|
fi
|
|
214
|
-
|
|
214
|
+
|
|
215
215
|
popd
|
|
216
216
|
echo -e "$rubyDir is successfully installed.\n" | tee -a $log
|
|
217
217
|
}
|
|
@@ -293,7 +293,7 @@ fi
|
|
|
293
293
|
# Install redis, sqllite3, nginx, rhoconnect
|
|
294
294
|
opts=" -d $dist -l $log"
|
|
295
295
|
${prefix}/bin/ruby ${INSTALL_DIR}/unix-like/rhoinstaller.rb ${opts}
|
|
296
|
-
if (( $? )) ; then
|
|
296
|
+
if (( $? )) ; then
|
|
297
297
|
echo "Installation failed. For troubleshooting see file $log ..." | tee -a $log
|
|
298
298
|
exit 1
|
|
299
299
|
fi
|
|
@@ -725,10 +725,10 @@ _NGINX_TO_DO_
|
|
|
725
725
|
else
|
|
726
726
|
server_todo_list = <<_NGINX_TO_DO_
|
|
727
727
|
2) Try rhoconnect 'rhoapp' application, created in /opt/nginx/html directory
|
|
728
|
-
A) As root user start redis,
|
|
728
|
+
A) As root user start redis, thin and nginx servers:
|
|
729
729
|
/etc/init.d/redis start
|
|
730
|
-
/etc/init.d/nginx start
|
|
731
730
|
/etc/init.d/thin start
|
|
731
|
+
/etc/init.d/nginx start
|
|
732
732
|
B) Open RhoConnect application web console in your browser:
|
|
733
733
|
http://servername
|
|
734
734
|
|
|
@@ -9,9 +9,9 @@ module Constants
|
|
|
9
9
|
"dtach"]
|
|
10
10
|
|
|
11
11
|
RUBY = "ruby-1.9.3-p392"
|
|
12
|
-
REDIS = "redis-2.6.
|
|
12
|
+
REDIS = "redis-2.6.10"
|
|
13
13
|
SQLITE3 = "sqlite-autoconf-3071502"
|
|
14
|
-
NGINX = "nginx-1.
|
|
14
|
+
NGINX = "nginx-1.3.13"
|
|
15
15
|
PASSENGER_ROOT = "/opt/rhoconnect/lib/ruby/gems/1.9.1/gems/passenger"
|
|
16
16
|
|
|
17
17
|
SOFTWARE = [ REDIS, SQLITE3, RUBY, NGINX ]
|
|
@@ -41,7 +41,7 @@ module Utilities
|
|
|
41
41
|
# This method moves all compressed files from the installation directory
|
|
42
42
|
# that were downloaded by this installation process
|
|
43
43
|
def cleanup(prefix)
|
|
44
|
-
|
|
44
|
+
print_header "Cleaning up ..."
|
|
45
45
|
Constants::SOFTWARE.each do |sw|
|
|
46
46
|
cmd "rm #{prefix}/#{sw}.tar.gz; rm -rf #{prefix}/#{sw}" if File.exist? "#{prefix}/#{sw}.tar.gz"
|
|
47
47
|
end
|
|
@@ -12,19 +12,19 @@ module Constants
|
|
|
12
12
|
SSH_KEY = "#{HOME_DIR}/.ssh/#{PEM_FILE}"
|
|
13
13
|
ACCESS_KEY_FILE = "#{HOME_DIR}/.ec2"
|
|
14
14
|
UBUNTU_STACK = { :image_id => 'ami-02d7f547', # jenkins-ubuntu-12.04-test-image
|
|
15
|
-
:tags => {'Name' => 'Ubuntu-12.04'},
|
|
15
|
+
:tags => {'Name' => 'Ubuntu-12.04'},
|
|
16
16
|
:flavor_id => 'c1.xlarge',
|
|
17
17
|
:key_name => 'jenkinskey',
|
|
18
18
|
:groups => 'load-test',
|
|
19
19
|
:user => 'ubuntu'}
|
|
20
|
-
CENTOS5_STACK = { :image_id => 'ami-
|
|
21
|
-
:tags => {'Name' => 'CentOS-5.9'},
|
|
20
|
+
CENTOS5_STACK = { :image_id => 'ami-6aaf8d2f', # jenkins-centos-5.9-test-image
|
|
21
|
+
:tags => {'Name' => 'CentOS-5.9'},
|
|
22
22
|
:flavor_id => 'c1.xlarge',
|
|
23
23
|
:key_name => 'jenkinskey',
|
|
24
24
|
:groups => 'load-test',
|
|
25
25
|
:user => 'root'}
|
|
26
26
|
CENTOS6_STACK = { :image_id => 'ami-02ae8c47', # jenkins-centos-6.3-test-image
|
|
27
|
-
:tags => {'Name' => 'CentOS-6.3'},
|
|
27
|
+
:tags => {'Name' => 'CentOS-6.3'},
|
|
28
28
|
:flavor_id => 'c1.xlarge',
|
|
29
29
|
:key_name => 'jenkinskey',
|
|
30
30
|
:groups => 'load-test',
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
var redis = require('redis'),
|
|
2
|
+
fs = require('fs'),
|
|
3
|
+
util = require('util'),
|
|
4
|
+
EventEmitter = require('events').EventEmitter,
|
|
5
|
+
registerEE = new EventEmitter(),
|
|
6
|
+
routes = require('./router'),
|
|
7
|
+
client_sub = redis.createClient(),
|
|
8
|
+
client_pub = redis.createClient(),
|
|
9
|
+
pub_channel = process.argv[2] + "RedisPUB";
|
|
10
|
+
|
|
11
|
+
//define global hash functions to store callbacks, routes
|
|
12
|
+
rhoconnectCallbacks = {};
|
|
13
|
+
registeredRoutes = {};
|
|
14
|
+
registeredControllers = {};
|
|
15
|
+
registeredModels = {};
|
|
16
|
+
var _c_name = null;
|
|
17
|
+
var _m_name = null;
|
|
18
|
+
//TODO: Don't have test-specific code here
|
|
19
|
+
var prefixDir = '/spec/apps/rhotestapp';
|
|
20
|
+
|
|
21
|
+
var controllerName = function(n){
|
|
22
|
+
_c_name = n;
|
|
23
|
+
registeredControllers[_c_name] = {};
|
|
24
|
+
registeredControllers[_c_name]['routes'] = [];
|
|
25
|
+
registeredControllers[_c_name]['defaults'] = [];
|
|
26
|
+
this.modelName(_c_name);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
var modelName = function(n){
|
|
30
|
+
// TODO: Need to map directly to registeredModels
|
|
31
|
+
registeredControllers[_c_name]['model'] = n;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
var exitNodejs = function(){
|
|
35
|
+
send({"exit": true});
|
|
36
|
+
process.exit(0);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var listen = function(channel){
|
|
40
|
+
client_sub.subscribe(channel);
|
|
41
|
+
client_sub.on("message", function(channel, message) {
|
|
42
|
+
//console.error("message nodejs recvd:" + message)
|
|
43
|
+
var json = JSON.parse(message);
|
|
44
|
+
try{
|
|
45
|
+
routes.router(json,send);
|
|
46
|
+
}
|
|
47
|
+
catch(e){
|
|
48
|
+
console.error("Node.js error caught: "+ e);
|
|
49
|
+
console.error("Backtrace: " + e.stack);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
var send = function(json){
|
|
55
|
+
if(json['callback']){
|
|
56
|
+
var h_id = guid();
|
|
57
|
+
rhoconnectCallbacks[h_id] = json['callback'];
|
|
58
|
+
json['callback'] = h_id;
|
|
59
|
+
}
|
|
60
|
+
var j = JSON.stringify(json);
|
|
61
|
+
client_pub.publish(pub_channel,j);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
var registerHandler = function(name) {
|
|
65
|
+
switch(name){
|
|
66
|
+
case 'sync':
|
|
67
|
+
this.defaults(
|
|
68
|
+
{
|
|
69
|
+
admin_required: false,
|
|
70
|
+
login_required: true,
|
|
71
|
+
source_required: true,
|
|
72
|
+
client_required: true
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
this.get('/', {"rc_handler":"query",
|
|
77
|
+
"deprecated_route": {"verb": "get", "url": ['/api/application', '/application', '/api/application/query']}}, function(req,resp){
|
|
78
|
+
loadModel(req.model).query(resp);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
this.post('/', {"rc_handler":"cud",
|
|
82
|
+
"deprecated_route": {"verb": "post", "url": ['/api/application', '/application', '/api/application/queue_updates']}}, function(req,resp){
|
|
83
|
+
var operationCall = req.params.operation;
|
|
84
|
+
if(operationCall === 'delete') {
|
|
85
|
+
operationCall = 'del';
|
|
86
|
+
}
|
|
87
|
+
loadModel(req.model)[operationCall](resp);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
this.put('/:id', {"rc_handler":"update"}, function(req,resp){
|
|
91
|
+
loadModel(req.model).update(resp);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
this.del('/:id', {"rc_handler":"delete"}, function(req,resp){
|
|
95
|
+
loadModel(req.model).del(resp);
|
|
96
|
+
});
|
|
97
|
+
break;
|
|
98
|
+
default: break;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
var register = function(){
|
|
103
|
+
var controller_dir = "";
|
|
104
|
+
var model_dir = "";
|
|
105
|
+
try{
|
|
106
|
+
if(process.argv[3] == 'test' ){
|
|
107
|
+
controller_dir = process.cwd() + prefixDir + "/controllers/js/";
|
|
108
|
+
model_dir = process.cwd() + prefixDir + "/models/js/";
|
|
109
|
+
}
|
|
110
|
+
else{
|
|
111
|
+
controller_dir = process.cwd() + "/controllers/js/";
|
|
112
|
+
model_dir = process.cwd() + "/models/js/";
|
|
113
|
+
}
|
|
114
|
+
if(fs.existsSync(model_dir)){
|
|
115
|
+
var modelFiles = fs.readdirSync(model_dir);
|
|
116
|
+
modelFiles.forEach(function(file){
|
|
117
|
+
//console.error("requiring model file: " + file);
|
|
118
|
+
var model = require(model_dir + file);
|
|
119
|
+
var functions = Object.keys(model);
|
|
120
|
+
mapModelFunctions(file.split(".")[0],functions);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if(fs.existsSync(controller_dir)){
|
|
124
|
+
var controllerFiles = fs.readdirSync(controller_dir);
|
|
125
|
+
controllerFiles.forEach(function(file){
|
|
126
|
+
//console.error("requiring controller file: " + file);
|
|
127
|
+
require(controller_dir + file);
|
|
128
|
+
_c_name = null;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch(e){
|
|
133
|
+
console.error("Error loading JavaScript files.");
|
|
134
|
+
throw(e);
|
|
135
|
+
}
|
|
136
|
+
registerEE.emit('register_complete');
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// this event will be called when all files have been registered
|
|
140
|
+
registerEE.on('register_complete',function(){
|
|
141
|
+
var json = {};
|
|
142
|
+
json['route'] = 'register';
|
|
143
|
+
json['result'] = registeredControllers;
|
|
144
|
+
json['models'] = registeredModels;
|
|
145
|
+
send(json);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
var get = function(url,options,callback){
|
|
150
|
+
var key = 'get_rjs_' + _c_name + '_rjs_' + url + '_rjs_' + format_options(options);
|
|
151
|
+
registeredRoutes[key] = callback;
|
|
152
|
+
registeredControllers[_c_name]['routes'].push(key);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
var post = function(url,options,callback){
|
|
156
|
+
var key = 'post_rjs_' + _c_name + '_rjs_' + url + '_rjs_' + format_options(options);
|
|
157
|
+
registeredRoutes[key] = callback;
|
|
158
|
+
registeredControllers[_c_name]['routes'].push(key);
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
var put = function(url,options,callback){
|
|
162
|
+
var key = 'put_rjs_' + _c_name + '_rjs_' + url + '_rjs_' + format_options(options);
|
|
163
|
+
registeredRoutes[key] = callback;
|
|
164
|
+
registeredControllers[_c_name]['routes'].push(key);
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
var del = function(url,options,callback){
|
|
168
|
+
var key = 'delete_rjs_' + _c_name + '_rjs_' + url + '_rjs_' + format_options(options);
|
|
169
|
+
registeredRoutes[key] = callback;
|
|
170
|
+
registeredControllers[_c_name]['routes'].push(key);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
var defaults = function(hsh){
|
|
174
|
+
registeredControllers[_c_name]['defaults'].push(hsh);
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
var format_options = function(opts){
|
|
178
|
+
return JSON.stringify(opts);
|
|
179
|
+
// var f_opts = "";
|
|
180
|
+
// for(var propt in opts){
|
|
181
|
+
// f_opts += propt + ":" + opts[propt];
|
|
182
|
+
// }
|
|
183
|
+
// return f_opts;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
function guid() {
|
|
187
|
+
return (((1+Math.random())*0x100000000)|0).toString(16).substring(1);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function mapModelFunctions(model,functions){
|
|
191
|
+
registeredModels[model] = [];
|
|
192
|
+
for(var i = 0;i< functions.length;i++){
|
|
193
|
+
registeredModels[model].push(functions[i]);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function loadModel(name) {
|
|
198
|
+
var prefix = process.cwd();
|
|
199
|
+
if(process.argv[3] === 'test') {
|
|
200
|
+
prefix = prefix + prefixDir;
|
|
201
|
+
}
|
|
202
|
+
return require(prefix + "/models/js/" + name);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
exports.controllerName = controllerName;
|
|
206
|
+
exports.modelName = modelName;
|
|
207
|
+
exports.register = register;
|
|
208
|
+
exports.registerHandler = registerHandler;
|
|
209
|
+
exports.send = send;
|
|
210
|
+
exports.listen = listen;
|
|
211
|
+
exports.get = get;
|
|
212
|
+
exports.put = put;
|
|
213
|
+
exports.del = del;
|
|
214
|
+
exports.post = post;
|
|
215
|
+
exports.defaults = defaults;
|
|
216
|
+
exports.exitNodejs = exitNodejs;
|
data/js-adapters/node.rb
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Rhoconnect
|
|
2
|
+
class Node
|
|
3
|
+
|
|
4
|
+
class << self
|
|
5
|
+
attr_accessor :started,:pipe
|
|
6
|
+
end
|
|
7
|
+
@started = false
|
|
8
|
+
@pipe = nil
|
|
9
|
+
|
|
10
|
+
def self.shell_node
|
|
11
|
+
package_file = File.join(Dir.pwd,'package.json')
|
|
12
|
+
if not File.exists?(package_file)
|
|
13
|
+
Rhoconnect.use_node = false
|
|
14
|
+
log "No `package.json` detected, disabling JavaScript support."
|
|
15
|
+
return
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
if which("node")
|
|
19
|
+
begin
|
|
20
|
+
if @started
|
|
21
|
+
kill_process
|
|
22
|
+
end
|
|
23
|
+
@started = true
|
|
24
|
+
dir = File.expand_path(File.dirname(__FILE__))
|
|
25
|
+
pwd = Dir.pwd
|
|
26
|
+
node_modules = File.join(pwd,'node_modules')
|
|
27
|
+
sub_env = { "NODE_PATH" => "#{node_modules}#{File::PATH_SEPARATOR}#{pwd}#{File::PATH_SEPARATOR}#{dir}" }
|
|
28
|
+
file = File.join(dir,"server.js")
|
|
29
|
+
args = [sub_env, "node", file, "#{$$}", Rhoconnect.environment.to_s]
|
|
30
|
+
@pipe = IO.popen(args)
|
|
31
|
+
log "Started Node.js process: #{@pipe.pid}"
|
|
32
|
+
@pipe
|
|
33
|
+
rescue Exception=>e
|
|
34
|
+
puts "Node.js startup error: #{e.message}\n"
|
|
35
|
+
puts e.backtrace.join("\n")
|
|
36
|
+
raise e
|
|
37
|
+
end
|
|
38
|
+
else
|
|
39
|
+
Rhoconnect.use_node = false
|
|
40
|
+
log "Node.js not detected, disabling JavaScript support."
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.kill_process
|
|
45
|
+
log "Stopping Node.js process: #{@pipe.pid}" if @pipe
|
|
46
|
+
NodeChannel.exit_node
|
|
47
|
+
@started = false
|
|
48
|
+
@pipe = nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
require 'timeout'
|
|
2
|
+
require 'open-uri'
|
|
3
|
+
module Rhoconnect
|
|
4
|
+
class NodeChannel
|
|
5
|
+
class << self
|
|
6
|
+
attr_accessor :redis,:redis2,:message_thread
|
|
7
|
+
@message_thread = nil
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
RESULT_HASH = {}
|
|
11
|
+
TIMEOUT = 30 # seconds
|
|
12
|
+
PUB_CHANNEL = "#{$$}RedisSUB" # pub channel must link to redis sub channel
|
|
13
|
+
SUB_CHANNEL = "#{$$}RedisPUB" # sub channel must link to redis pub channel
|
|
14
|
+
@message_thread,@redis,@redis2 = nil
|
|
15
|
+
|
|
16
|
+
class << self
|
|
17
|
+
attr_accessor :thrd, :register_semaphore, :register_condition
|
|
18
|
+
|
|
19
|
+
def get_timeout
|
|
20
|
+
TIMEOUT
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def redis
|
|
24
|
+
url = Rhoconnect.redis.is_a?(Array) ? Rhoconnect.redis[0] : Rhoconnect.redis
|
|
25
|
+
db_inst = RedisImpl.new
|
|
26
|
+
db_inst.create(url)
|
|
27
|
+
@redis ||= db_inst.db
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def redis2
|
|
31
|
+
url = Rhoconnect.redis.is_a?(Array) ? Rhoconnect.redis[0] : Rhoconnect.redis
|
|
32
|
+
db_inst = RedisImpl.new
|
|
33
|
+
db_inst.create(url)
|
|
34
|
+
@redis2 ||= db_inst.db
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def exit_node
|
|
38
|
+
NodeChannel.redis2.publish(PUB_CHANNEL,{:route => 'deregister'}.to_json)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def bootstrap
|
|
42
|
+
@register_semaphore ||= Mutex.new
|
|
43
|
+
@register_condition ||= ConditionVariable.new
|
|
44
|
+
# Run in the main thread, we setup node thread and wait for it to
|
|
45
|
+
# finish bootstrapping before main thread can continue
|
|
46
|
+
if @message_thread
|
|
47
|
+
@message_thread.join
|
|
48
|
+
@message_thread = nil
|
|
49
|
+
end
|
|
50
|
+
@register_semaphore.synchronize do
|
|
51
|
+
@message_thread = Thread.new{check_channel}
|
|
52
|
+
@register_condition.wait(@register_semaphore)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def publish_channel_and_wait(msg,curr_model)
|
|
57
|
+
unique_id = UUIDTools::UUID.random_create.to_s.gsub(/\-/,"")
|
|
58
|
+
msg.merge!(:request_id => unique_id)
|
|
59
|
+
RESULT_HASH[unique_id] = {}
|
|
60
|
+
RESULT_HASH[unique_id][:status] = 'waiting'
|
|
61
|
+
NodeChannel.redis2.publish(PUB_CHANNEL,msg.to_json)
|
|
62
|
+
NodeChannel.wait_for_result(unique_id,curr_model)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def check_channel
|
|
66
|
+
NodeChannel.redis.subscribe(SUB_CHANNEL) do |on|
|
|
67
|
+
on.message do |channel,msg|
|
|
68
|
+
m = JSON.parse(msg)
|
|
69
|
+
#puts "received message: #{m.inspect}"
|
|
70
|
+
if m['exit'] == true
|
|
71
|
+
NodeChannel.redis.unsubscribe
|
|
72
|
+
end
|
|
73
|
+
route_message(m)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def publish_channel(msg)
|
|
79
|
+
NodeChannel.redis2.publish(PUB_CHANNEL,msg.to_json)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def wait_for_result(key,curr_model)
|
|
83
|
+
begin
|
|
84
|
+
Timeout::timeout(TIMEOUT) do
|
|
85
|
+
while(RESULT_HASH[key][:status] == 'waiting') do
|
|
86
|
+
if data = RESULT_HASH[key][:process_request]
|
|
87
|
+
#do some logic and return data with memory
|
|
88
|
+
|
|
89
|
+
RESULT_HASH[key][:process_result] = process_message(curr_model,data)
|
|
90
|
+
RESULT_HASH[key][:process_request] = nil
|
|
91
|
+
else
|
|
92
|
+
sleep 0.001
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
rescue Exception=>e
|
|
97
|
+
RESULT_HASH[key][:status] = 'broken'
|
|
98
|
+
RESULT_HASH[key][:result] = "exception #{e.message}\n#{e.backtrace}"
|
|
99
|
+
puts "Timeout on wait, setting JavaScript result state to broken: #{e.inspect}"
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
#request waiting either timed out or returned response
|
|
103
|
+
if RESULT_HASH[key][:status] == 'broken' or RESULT_HASH[key][:status] == 'waiting'
|
|
104
|
+
res = RESULT_HASH.delete(key)
|
|
105
|
+
elsif RESULT_HASH[key] =~ /JS ERROR/
|
|
106
|
+
res = RESULT_HASH.delete(key)
|
|
107
|
+
raise Exception.new(res)
|
|
108
|
+
else
|
|
109
|
+
res = RESULT_HASH.delete(key)
|
|
110
|
+
end
|
|
111
|
+
res[:result]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def route_message(msg)
|
|
115
|
+
case msg['route']
|
|
116
|
+
when 'request'
|
|
117
|
+
RESULT_HASH[msg['request_id']][:process_result] = 'waiting'
|
|
118
|
+
RESULT_HASH[msg['request_id']][:process_request] = msg
|
|
119
|
+
wait_for_process_result(msg['request_id'])
|
|
120
|
+
when 'response'
|
|
121
|
+
return if RESULT_HASH[msg['request_id']] == nil
|
|
122
|
+
if msg['error'] and msg['error'].size > 1
|
|
123
|
+
RESULT_HASH[msg['request_id']][:result] = "JS ERROR: #{msg['error']}"
|
|
124
|
+
RESULT_HASH[msg['request_id']][:status] = 'done'
|
|
125
|
+
else
|
|
126
|
+
RESULT_HASH[msg['request_id']][:result] = msg["result"]
|
|
127
|
+
RESULT_HASH[msg['request_id']][:status] = 'done'
|
|
128
|
+
end
|
|
129
|
+
when 'register'
|
|
130
|
+
@register_semaphore.synchronize do
|
|
131
|
+
begin
|
|
132
|
+
register_routes(msg)
|
|
133
|
+
rescue Exception => e
|
|
134
|
+
puts "Error registering JavaScript routes: #{e.inspect}"
|
|
135
|
+
puts e.backtrace.join("\n")
|
|
136
|
+
raise e
|
|
137
|
+
ensure
|
|
138
|
+
@register_condition.signal
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def wait_for_process_result(key)
|
|
145
|
+
Timeout::timeout(TIMEOUT){
|
|
146
|
+
while(RESULT_HASH[key][:process_result] == 'waiting') do
|
|
147
|
+
sleep 0.001
|
|
148
|
+
end
|
|
149
|
+
}
|
|
150
|
+
publish_channel(RESULT_HASH[key][:process_result])
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def process_message(curr_model,data)
|
|
154
|
+
#puts "proccessing msg #{data}"
|
|
155
|
+
if curr_model.respond_to?(data['function'])
|
|
156
|
+
if data['args'] and data['args'].size > 0
|
|
157
|
+
if(data['function'] == 'stash_result')
|
|
158
|
+
curr_model.send('result=',data['args'])
|
|
159
|
+
curr_model.send(data['function'])
|
|
160
|
+
process_res = nil
|
|
161
|
+
else
|
|
162
|
+
res = curr_model.send(data['function'],data['args'])
|
|
163
|
+
end
|
|
164
|
+
else
|
|
165
|
+
res = curr_model.send(data['function'])
|
|
166
|
+
end
|
|
167
|
+
else
|
|
168
|
+
raise Exception.new("Method #{data['function']} not found in model #{curr_model.class.name.to_s}.")
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
process_res = res.is_a?(String) ? res : res.to_hash if res
|
|
172
|
+
|
|
173
|
+
{:result=>process_res,:callback=>data['callback'],:request_id=>data['request_id'],:route=>'response'}
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def register_routes(hsh)
|
|
177
|
+
Rhoconnect::Controller::JsBase.register_routes(hsh)
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
var Request = function(){
|
|
2
|
+
this.__defineGetter__("params",function(){
|
|
3
|
+
return params;
|
|
4
|
+
});
|
|
5
|
+
|
|
6
|
+
this.__defineSetter__("params",function(arg){
|
|
7
|
+
params = arg;
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
this.__defineGetter__("header",function(){
|
|
11
|
+
return header;
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
this.__defineSetter__("header",function(arg){
|
|
15
|
+
header = arg;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
this.__defineGetter__("model",function(){
|
|
19
|
+
return model;
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
this.__defineSetter__("model",function(arg){
|
|
23
|
+
model = arg;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
module.exports = Request;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
Object.extend = function(destination, source) {
|
|
2
|
+
for (var property in source) {
|
|
3
|
+
if (source.hasOwnProperty(property)) {
|
|
4
|
+
destination[property] = source[property];
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
return destination;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
var Response = function(){
|
|
11
|
+
var exception = "";
|
|
12
|
+
|
|
13
|
+
this.__defineGetter__("params",function(){
|
|
14
|
+
return params;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
this.__defineSetter__("params",function(arg){
|
|
18
|
+
params = arg;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
this.__defineGetter__("header",function(){
|
|
22
|
+
return header;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
this.__defineSetter__("header",function(arg){
|
|
26
|
+
header = arg;
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
this.__defineGetter__("exception",function(){
|
|
30
|
+
return exception;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
this.__defineSetter__("exception",function(arg){
|
|
34
|
+
exception = arg;
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
this.send = function(data){
|
|
38
|
+
var ballroom = require("./ballroom");
|
|
39
|
+
var user_json = {};
|
|
40
|
+
|
|
41
|
+
//if callback we are sending request to ruby
|
|
42
|
+
if(data['callback']){
|
|
43
|
+
this.params = null;
|
|
44
|
+
this.header['route'] = 'request';
|
|
45
|
+
user_json = data;
|
|
46
|
+
}
|
|
47
|
+
else{
|
|
48
|
+
user_json["result"] = data;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
Object.extend(user_json,this.params);
|
|
52
|
+
Object.extend(user_json,this.header);
|
|
53
|
+
Object.extend(user_json,this.exception);
|
|
54
|
+
ballroom.send(user_json);
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
module.exports = Response;
|