rhoconnect 4.0.4 → 5.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/CHANGELOG.md +54 -5
- data/CREDITS +219 -219
- data/Gemfile +2 -2
- data/Gemfile.lock +68 -79
- data/Rakefile +1 -2
- data/bench/benchapp/spec/models/ruby/mock_adapter_spec.rb +17 -17
- data/bench/benchapp/spec/models/ruby/queue_mock_adapter_spec.rb +17 -17
- data/bench/benchapp/spec/spec_helper.rb +3 -3
- data/bench/blobapp/spec/models/ruby/blob_adapter_spec.rb +17 -17
- data/bench/blobapp/spec/spec_helper.rb +3 -3
- data/bench/lib/bench/runner.rb +1 -69
- data/bench/lib/bench.rb +18 -18
- data/bench/spec/mock_adapter_spec.rb +54 -55
- data/bench/spec/mock_client_spec.rb +47 -48
- data/bench/spec/result_spec.rb +41 -44
- data/bench/spec/utils_spec.rb +24 -25
- data/commands/generators/app.rb +7 -5
- data/commands/generators/controller.rb +7 -5
- data/commands/generators/model.rb +7 -5
- data/commands/generators/source.rb +7 -5
- data/commands/parser.rb +1 -1
- data/commands/redis/redis_download.rb +1 -1
- data/doc/async-jobs.txt +9 -9
- data/doc/supported-platforms.txt +0 -2
- data/generators/rhoconnect.rb +92 -212
- data/generators/templates/application/rcgemfile +3 -3
- data/generators/templates/application/spec/application_controller_spec.rb +14 -16
- data/generators/templates/application/spec/js_spec.rb +20 -20
- data/generators/templates/application/spec/spec_helper.rb +1 -1
- data/generators/templates/source/controllers/ruby/controller_spec.rb +18 -19
- data/generators/templates/source/models/ruby/model_spec.rb +17 -17
- data/install.sh +10 -21
- data/installer/unix-like/rho_connect_install_constants.rb +5 -5
- data/installer/unix-like/rho_connect_install_installers.rb +4 -4
- data/installer/utils/constants.rb +6 -6
- data/installer/utils/nix_install_test.rb +29 -29
- data/installer/utils/package_upload/repos.rake +16 -26
- data/js-adapters/node.rb +4 -4
- data/js-adapters/node_channel.rb +4 -8
- data/lib/rhoconnect/db_adapter.rb +13 -13
- data/lib/rhoconnect/handler/changes/engine.rb +1 -1
- data/lib/rhoconnect/jobs/bulk_data_job.rb +29 -29
- data/lib/rhoconnect/license.rb +7 -7
- data/lib/rhoconnect/model/helpers/find_duplicates_on_update.rb +13 -13
- data/lib/rhoconnect/ping/apple.rb +4 -4
- data/lib/rhoconnect/server.rb +2 -2
- data/lib/rhoconnect/source.rb +2 -2
- data/lib/rhoconnect/store.rb +12 -6
- data/lib/rhoconnect/utilities.rb +2 -2
- data/lib/rhoconnect/version.rb +1 -1
- data/lib/rhoconnect.rb +6 -4
- data/rhoconnect.gemspec +5 -6
- data/spec/api/api_helper.rb +1 -1
- data/spec/api/app/fast_delete_spec.rb +22 -22
- data/spec/api/app/fast_insert_spec.rb +23 -23
- data/spec/api/app/fast_update_spec.rb +63 -63
- data/spec/api/app/push_deletes_spec.rb +11 -13
- data/spec/api/app/push_objects_spec.rb +39 -39
- data/spec/api/client/client_get_db_doc_spec.rb +29 -29
- data/spec/api/client/client_set_db_doc_spec.rb +11 -11
- data/spec/api/client/get_client_params_spec.rb +29 -29
- data/spec/api/client/list_client_docs_spec.rb +32 -34
- data/spec/api/client/reset_spec.rb +30 -30
- data/spec/api/readstate/set_refresh_time_spec.rb +43 -43
- data/spec/api/source/get_source_params_spec.rb +32 -34
- data/spec/api/source/list_sources_spec.rb +13 -13
- data/spec/api/source/update_source_params_spec.rb +19 -19
- data/spec/api/store/get_db_doc_spec.rb +27 -27
- data/spec/api/store/set_db_doc_spec.rb +38 -38
- data/spec/api/system/adapter_spec.rb +27 -29
- data/spec/api/system/get_license_info_spec.rb +11 -11
- data/spec/api/system/login_spec.rb +37 -37
- data/spec/api/system/reset_spec.rb +15 -15
- data/spec/api/system/stats_spec.rb +70 -71
- data/spec/api/user/create_user_spec.rb +37 -37
- data/spec/api/user/delete_client_spec.rb +7 -7
- data/spec/api/user/delete_user_spec.rb +62 -62
- data/spec/api/user/list_clients_spec.rb +24 -24
- data/spec/api/user/list_source_docs_spec.rb +29 -29
- data/spec/api/user/list_users_spec.rb +22 -22
- data/spec/api/user/ping_spec.rb +18 -18
- data/spec/api/user/show_user_spec.rb +10 -10
- data/spec/api/user/update_user_spec.rb +43 -43
- data/spec/api/user/user_get_db_doc_spec.rb +12 -12
- data/spec/api/user/user_set_db_doc_spec.rb +37 -37
- data/spec/api_token_spec.rb +8 -8
- data/spec/app_spec.rb +18 -17
- data/spec/apps/jstestapp/settings/settings.yml +2 -0
- data/spec/async_spec.rb +9 -11
- data/spec/bulk_data/bulk_data_spec.rb +120 -120
- data/spec/cli/cli_spec.rb +50 -53
- data/spec/client_spec.rb +105 -105
- data/spec/client_sync_spec.rb +529 -528
- data/spec/controllers/js_base_spec.rb +147 -141
- data/spec/doc/doc_spec.rb +51 -52
- data/spec/document_spec.rb +58 -58
- data/spec/dynamic_adapter_spec.rb +33 -36
- data/spec/generator/generator_spec.rb +76 -42
- data/spec/jobs/bulk_data_job_spec.rb +101 -102
- data/spec/jobs/ping_job_spec.rb +176 -177
- data/spec/jobs/source_job_spec.rb +24 -25
- data/spec/license_spec.rb +54 -55
- data/spec/models/js_base_spec.rb +121 -120
- data/spec/perf/bulk_data_perf_spec.rb +23 -24
- data/spec/perf/perf_spec_helper.rb +7 -7
- data/spec/perf/store_perf_spec.rb +139 -140
- data/spec/ping/apple_spec.rb +65 -65
- data/spec/ping/gcm_spec.rb +83 -84
- data/spec/ping/rhoconnect_push_spec.rb +52 -53
- data/spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb +100 -101
- data/spec/predefined_adapters/rho_internal_js_bench_adapter_js_spec.rb +29 -31
- data/spec/read_state_spec.rb +24 -25
- data/spec/rhoconnect_spec.rb +7 -7
- data/spec/server/server_spec.rb +664 -662
- data/spec/server/stats_spec.rb +12 -12
- data/spec/source_adapter_spec.rb +124 -125
- data/spec/source_spec.rb +148 -149
- data/spec/source_sync_spec.rb +736 -736
- data/spec/spec_helper.rb +4 -5
- data/spec/stats/record_spec.rb +22 -21
- data/spec/store_orm_spec.rb +48 -48
- data/spec/store_spec.rb +428 -426
- data/spec/support/shared_examples.rb +5 -7
- data/spec/sync_states_spec.rb +67 -67
- data/spec/test_methods_spec.rb +121 -123
- data/spec/testdata/10000-data.txt +0 -0
- data/spec/testdata/5000-data.txt +0 -0
- data/spec/user_spec.rb +102 -102
- data/tasks/redis.rake +3 -3
- metadata +154 -195
- data/bench/benchapp/tmp/pids/passenger.9292.pid.lock +0 -0
- data/bench/benchapp/tmp/restart.txt +0 -0
- data/bench/blobapp/settings/license.key.bak +0 -2
- data/bench/blobapp/tmp/restart.txt +0 -0
- data/bench/lib/testdata/1-data.txt +0 -0
- data/bench/lib/testdata/10-data.txt +0 -0
- data/bench/lib/testdata/2-data.txt +0 -0
- data/bench/lib/testdata/250-data.txt +0 -0
- data/bench/lib/testdata/5-blob_data.txt +0 -0
- data/bench/lib/testdata/5-data.txt +0 -0
- data/bench/lib/testdata/50-data.txt +0 -0
- data/bench/lib/testdata/500-data.txt +0 -0
- data/doc/protocol.html +0 -1993
- data/spec/coverage/rcov/assets/0.2.3/jquery-1.3.2.min.js +0 -19
- data/spec/coverage/rcov/assets/0.2.3/jquery.tablesorter.min.js +0 -15
- data/spec/coverage/rcov/assets/0.2.3/print.css +0 -12
- data/spec/coverage/rcov/assets/0.2.3/rcov.js +0 -42
- data/spec/coverage/rcov/assets/0.2.3/screen.css +0 -270
- data/spec/coverage/rcov/index.html +0 -88
- data/spec/generator/generator_spec_helper.rb +0 -9
@@ -19,18 +19,18 @@ module Installers
|
|
19
19
|
end
|
20
20
|
raise "Nginx installation failed." if $? != 0
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def install_all_gems
|
24
24
|
@gem_path = "#{@options[:prefix]}/bin/gem"
|
25
25
|
# Update the RubyGems system software
|
26
26
|
# FIXME: => v.2.0.0
|
27
|
-
cmd "#{@gem_path} update --system 1.8.25"
|
27
|
+
# cmd "#{@gem_path} update --system 1.8.25"
|
28
28
|
GEMS.each do |gem|
|
29
29
|
install_gem(gem)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def install_gem(gem, options = "--no-
|
33
|
+
def install_gem(gem, options = "--no-document")
|
34
34
|
print_header "Installing #{gem} ..."
|
35
35
|
cmd "#{@gem_path} install #{gem} #{options}"
|
36
36
|
raise "#{gem} installation failed." if $? != 0
|
@@ -76,7 +76,7 @@ module Installers
|
|
76
76
|
|
77
77
|
cmd "#{@options[:prefix]}/bin/bundle config build.sqlite3 " +
|
78
78
|
"--with-sqlite3-include=#{@options[:prefix]}/include " +
|
79
|
-
"--with-sqlite3-lib=#{@options[:prefix]}/lib"
|
79
|
+
"--with-sqlite3-lib=#{@options[:prefix]}/lib"
|
80
80
|
gem_name = (Dir.glob "rhoconnect-*.gem")[0]
|
81
81
|
if gem_name && File.exists?(gem_name)
|
82
82
|
install_gem(gem_name)
|
@@ -11,20 +11,20 @@ module Constants
|
|
11
11
|
PEM_FILE = 'jenkinskey.pem'
|
12
12
|
SSH_KEY = "#{HOME_DIR}/.ssh/#{PEM_FILE}"
|
13
13
|
ACCESS_KEY_FILE = "#{HOME_DIR}/.ec2"
|
14
|
-
UBUNTU_STACK = { :image_id => 'ami-
|
15
|
-
:tags => {'Name' => 'Ubuntu-
|
14
|
+
UBUNTU_STACK = { :image_id => 'ami-e0b882a5', # jenkins-ubuntu-14.04-test-image
|
15
|
+
:tags => {'Name' => 'Ubuntu-14.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.
|
20
|
+
CENTOS5_STACK = { :image_id => 'ami-079b9d42', # jenkins-centos-5.10-test-image
|
21
|
+
:tags => {'Name' => 'CentOS-5.10'},
|
22
22
|
:flavor_id => 'c1.xlarge',
|
23
23
|
:key_name => 'jenkinskey',
|
24
24
|
:groups => 'load-test',
|
25
25
|
:user => 'root'}
|
26
|
-
CENTOS6_STACK = { :image_id => 'ami-
|
27
|
-
:tags => {'Name' => 'CentOS-6.
|
26
|
+
CENTOS6_STACK = { :image_id => 'ami-19283b5c', # jenkins-centos-6.6-test-image
|
27
|
+
:tags => {'Name' => 'CentOS-6.6'},
|
28
28
|
:flavor_id => 'c1.xlarge',
|
29
29
|
:key_name => 'jenkinskey',
|
30
30
|
:groups => 'load-test',
|
@@ -16,7 +16,7 @@ def run_on_server(server, cmds)
|
|
16
16
|
result = server.ssh(cmds)
|
17
17
|
result.each do |r|
|
18
18
|
raise "Command #{r.command} failed.\nStdout: #{r.stdout}\nStderr: #{r.stderr}" if r.status != 0
|
19
|
-
puts "$ #{r.command}"
|
19
|
+
puts "$ #{r.command}"
|
20
20
|
puts r.stdout
|
21
21
|
end
|
22
22
|
end
|
@@ -51,7 +51,7 @@ def compile_stack_info(stack)
|
|
51
51
|
:local_file => "#{local_file}rhoconnect_#{Constants::RC_VERSION}_all.deb",
|
52
52
|
:pkg_mgr => 'dpkg',
|
53
53
|
:pkg_type => 'DEB',
|
54
|
-
:pkg_cmd => 'apt-get',
|
54
|
+
:pkg_cmd => 'apt-get --force-yes -y',
|
55
55
|
:deps => Constants::DEB_DEPS,
|
56
56
|
:repo_src_file => '/etc/apt/sources.list',
|
57
57
|
:repo_str => '\n' +
|
@@ -81,22 +81,22 @@ def connect_to_amazon
|
|
81
81
|
lines = IO.readlines Constants::ACCESS_KEY_FILE
|
82
82
|
access_key = lines.first.strip.split("=")[1]
|
83
83
|
secret_access_key = lines.last.strip.split("=")[1]
|
84
|
-
|
84
|
+
|
85
85
|
Fog::Compute.new(:provider => 'AWS', :region => Constants::REGION,
|
86
|
-
:aws_access_key_id => access_key,
|
87
|
-
:aws_secret_access_key => secret_access_key)
|
86
|
+
:aws_access_key_id => access_key,
|
87
|
+
:aws_secret_access_key => secret_access_key)
|
88
88
|
end
|
89
89
|
|
90
90
|
# Creates a new ec2 instance as per the given stack.
|
91
91
|
def start_new_instance(connection, params)
|
92
92
|
puts "Creating new instance..."
|
93
93
|
|
94
|
-
server = connection.servers.create(params)
|
94
|
+
server = connection.servers.create(params)
|
95
95
|
# Wait for machine to be booted
|
96
96
|
server.wait_for { ready? }
|
97
97
|
# Wait for machine to get an ip-address
|
98
|
-
server.wait_for { !public_ip_address.nil? }
|
99
|
-
|
98
|
+
server.wait_for { !public_ip_address.nil? }
|
99
|
+
|
100
100
|
if server.ready?
|
101
101
|
# wait for all services to start on remote VM
|
102
102
|
puts "Waiting #{Constants::SLEEP} seconds for services to start on remote VM..."
|
@@ -122,18 +122,18 @@ def install_package(server, distro_params)
|
|
122
122
|
# Get current permissions of file
|
123
123
|
perms = server.ssh("stat --format=%a #{filename}")[0].stdout.strip
|
124
124
|
# Change permissions so that it can be edited by "others"
|
125
|
-
cmds = ["sudo chmod 0666 #{filename}",
|
126
|
-
"echo -e \"#{src_str}\" >> #{filename}",
|
125
|
+
cmds = ["sudo chmod 0666 #{filename}",
|
126
|
+
"echo -e \"#{src_str}\" >> #{filename}",
|
127
127
|
"sudo chmod 0#{perms} #{filename}"]
|
128
|
-
cmds << "sudo #{distro_params[:pkg_cmd]} update" unless distro_params[:flavor] == "centos"
|
129
|
-
run_on_server(server, cmds)
|
128
|
+
cmds << "sudo #{distro_params[:pkg_cmd]} update" unless distro_params[:flavor] == "centos"
|
129
|
+
run_on_server(server, cmds)
|
130
130
|
|
131
131
|
puts "Installing rhoconnect package.\nThis may take a while...\n\n"
|
132
|
-
run_on_server(server, "
|
132
|
+
run_on_server(server, "sudo #{distro_params[:pkg_cmd]} install rhoconnect")
|
133
133
|
end
|
134
134
|
|
135
135
|
def start_services(server)
|
136
|
-
puts
|
136
|
+
puts
|
137
137
|
['redis', 'thin', 'nginx'].each do |program|
|
138
138
|
status = -1
|
139
139
|
3.times do
|
@@ -183,7 +183,7 @@ def ping_remote_host(server)
|
|
183
183
|
begin
|
184
184
|
res = server.ssh(['uptime'])
|
185
185
|
status = res[0].status
|
186
|
-
break if status == 0
|
186
|
+
break if status == 0
|
187
187
|
rescue Exception => e
|
188
188
|
sleep 6
|
189
189
|
end
|
@@ -194,23 +194,23 @@ end
|
|
194
194
|
def test_package(connection, stack)
|
195
195
|
start_time = Time.now
|
196
196
|
|
197
|
-
user, distro_params = compile_stack_info(stack)
|
198
|
-
server = start_new_instance(connection, stack)
|
197
|
+
user, distro_params = compile_stack_info(stack)
|
198
|
+
server = start_new_instance(connection, stack)
|
199
199
|
host = server.dns_name
|
200
200
|
puts "Remote host #{host} is up and running ..."
|
201
|
-
|
201
|
+
|
202
202
|
server.username = user
|
203
|
-
server.private_key_path = Constants::SSH_KEY
|
203
|
+
server.private_key_path = Constants::SSH_KEY
|
204
204
|
puts "Establish ssh connection for \"#{user}@#{host}\" ..."
|
205
|
-
# For a minute trying to reach remote host
|
206
|
-
raise "Cannot establish ssh connection with #{stack[:tags]['Name']} instance." if ping_remote_host(server) != 0
|
205
|
+
# For a minute trying to reach remote host
|
206
|
+
raise "Cannot establish ssh connection with #{stack[:tags]['Name']} instance." if ping_remote_host(server) != 0
|
207
207
|
puts "SSH connection establised!"
|
208
208
|
|
209
209
|
install_package(server, distro_params)
|
210
210
|
# Start the redis and nginx servers on the remote machine
|
211
211
|
start_services(server)
|
212
212
|
# Check the status of the rhoconnect service
|
213
|
-
check_rhoconnect_status(server)
|
213
|
+
check_rhoconnect_status(server)
|
214
214
|
|
215
215
|
elapsed_time = (Time.now - start_time).to_i
|
216
216
|
puts "Test for #{stack[:tags]['Name']} completed in #{elapsed_time/60} min. #{elapsed_time - ((elapsed_time/60)*60)} sec."
|
@@ -220,7 +220,7 @@ rescue => e
|
|
220
220
|
puts e.backtrace
|
221
221
|
-1
|
222
222
|
ensure
|
223
|
-
if server
|
223
|
+
if server
|
224
224
|
puts "Terminating #{stack[:tags]['Name']} instance ..."
|
225
225
|
server.destroy
|
226
226
|
end
|
@@ -230,7 +230,7 @@ module ThreadOut
|
|
230
230
|
# Writes to Thread.current[:stdout] instead of STDOUT if the thread local is set.
|
231
231
|
def self.write(stuff)
|
232
232
|
if Thread.current[:stdout] then
|
233
|
-
Thread.current[:stdout].write stuff
|
233
|
+
Thread.current[:stdout].write stuff
|
234
234
|
else
|
235
235
|
STDOUT.write stuff
|
236
236
|
end
|
@@ -252,7 +252,7 @@ STACK_SIZE.times do |i|
|
|
252
252
|
threads << Thread.new(i) do |idx|
|
253
253
|
puts "Starting test for #{STACKS[idx][:tags]['Name']} ... "
|
254
254
|
Thread.current[:stdout] = logs[idx]
|
255
|
-
test_package(connection, STACKS[idx])
|
255
|
+
test_package(connection, STACKS[idx])
|
256
256
|
end
|
257
257
|
end
|
258
258
|
# Wait till threads re finished
|
@@ -260,15 +260,15 @@ threads.each { |thread| thread.join }
|
|
260
260
|
|
261
261
|
# Output logs and check resluts
|
262
262
|
threads.each_with_index do |thread, i|
|
263
|
-
puts "\n#{STACKS[i][:tags]['Name']} installation log:"
|
264
|
-
puts logs[i].string
|
263
|
+
puts "\n#{STACKS[i][:tags]['Name']} installation log:"
|
264
|
+
puts logs[i].string
|
265
265
|
end
|
266
266
|
exit_code = 0
|
267
267
|
threads.each_with_index do |thread, i|
|
268
268
|
if thread.value != 0
|
269
|
-
puts "Package for #{STACKS[i][:tags]['Name']} failed to pass test!"
|
269
|
+
puts "Package for #{STACKS[i][:tags]['Name']} failed to pass test!"
|
270
270
|
exit_code = -1
|
271
|
-
end
|
271
|
+
end
|
272
272
|
end
|
273
273
|
|
274
274
|
elapsed_time = (Time.now - start_at).to_i
|
@@ -12,33 +12,23 @@ task "build:repos", :build_type, :build_number do |t, args|
|
|
12
12
|
args.with_defaults :build_type => 'nightly'
|
13
13
|
args.with_defaults :build_number => ''
|
14
14
|
puts args
|
15
|
-
|
15
|
+
|
16
16
|
build_type = args[:build_type]
|
17
17
|
build_number = args[:build_number]
|
18
18
|
|
19
|
-
# CONSTANTS
|
20
|
-
|
21
19
|
RHOCONNECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..'))
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
'/beta-packages'
|
30
|
-
else 'nightly'
|
31
|
-
'/nightly-packages'
|
32
|
-
end #case
|
33
|
-
|
34
|
-
BUCKET = 'rhoconnect'
|
20
|
+
PKG_DIR = case build_type
|
21
|
+
when 'release' then '/packages'
|
22
|
+
when 'test' then '/test-packages'
|
23
|
+
when 'beta' then '/beta-packages'
|
24
|
+
else '/nightly-packages'
|
25
|
+
end
|
26
|
+
BUCKET = 'rhoconnect'
|
35
27
|
|
36
28
|
def cmd(cmd)
|
37
29
|
puts cmd
|
38
30
|
puts `#{cmd}`
|
39
|
-
end
|
40
|
-
|
41
|
-
# METHODS
|
31
|
+
end
|
42
32
|
|
43
33
|
def prepare_destination
|
44
34
|
# Prompt to remove the /deb directory if it exists
|
@@ -61,7 +51,7 @@ task "build:repos", :build_type, :build_number do |t, args|
|
|
61
51
|
cmd "sudo touch #{filename}/distributions"
|
62
52
|
cmd "sudo chmod -R 777 #{PKG_DIR}"
|
63
53
|
|
64
|
-
# Write distributions string to corresponding file
|
54
|
+
# Write distributions string to corresponding file
|
65
55
|
dist_file = File.new("#{filename}/distributions", "w")
|
66
56
|
dist_file.write(distributions)
|
67
57
|
dist_file.close
|
@@ -71,7 +61,7 @@ task "build:repos", :build_type, :build_number do |t, args|
|
|
71
61
|
|
72
62
|
end #prepare_destination
|
73
63
|
|
74
|
-
|
64
|
+
|
75
65
|
def copy_files
|
76
66
|
# Move back into rhoconnect repo root first
|
77
67
|
Dir.chdir RHOCONNECT_ROOT
|
@@ -96,13 +86,13 @@ task "build:repos", :build_type, :build_number do |t, args|
|
|
96
86
|
prepare_destination
|
97
87
|
|
98
88
|
copy_files
|
99
|
-
|
89
|
+
|
100
90
|
if !build_number.empty?
|
101
91
|
# Change name of packages to include build number
|
102
92
|
['deb', 'rpm'].each do |arch|
|
103
93
|
Find.find("#{PKG_DIR}") do |file|
|
104
94
|
if !File.directory?(file) and file =~ /#{arch}$/
|
105
|
-
file_to_rename = File.open(file, 'r')
|
95
|
+
#file_to_rename = File.open(file, 'r')
|
106
96
|
old_name = File.expand_path(file)
|
107
97
|
new_name = old_name.gsub(/(#{arch})$/, "#{build_number}.\\1" )
|
108
98
|
#File.rename(old_name, new_name)
|
@@ -117,14 +107,14 @@ task "build:repos", :build_type, :build_number do |t, args|
|
|
117
107
|
# REPOIFY!
|
118
108
|
cmd "sudo reprepro -b #{PKG_DIR}/deb includedeb rhoconnect #{PKG_DIR}/deb/#{@deb_pkg}"
|
119
109
|
cmd "sudo createrepo #{PKG_DIR}/rpm"
|
120
|
-
|
110
|
+
|
121
111
|
# Create SHA1 checksum of repo dirs
|
122
|
-
checksum_dest = "#{PKG_DIR}/SHA1/"
|
112
|
+
# checksum_dest = "#{PKG_DIR}/SHA1/"
|
123
113
|
cmd "sudo ./installer/utils/create_sha1.rb #{PKG_DIR} #{PKG_DIR}/SHA1"
|
124
114
|
|
125
115
|
# Call s3_upload.rb
|
126
116
|
['deb', 'rpm'].each do |dir|
|
127
|
-
cmd "sudo ruby ./installer/utils/package_upload/s3_upload.rb #{PKG_DIR}/#{dir} #{BUCKET}"
|
117
|
+
cmd "sudo ruby ./installer/utils/package_upload/s3_upload.rb #{PKG_DIR}/#{dir} #{BUCKET}"
|
128
118
|
end #do
|
129
119
|
cmd "sudo ruby ./installer/utils/package_upload/s3_upload.rb #{PKG_DIR}/SHA1 #{BUCKET}"
|
130
120
|
end #build:repos
|
data/js-adapters/node.rb
CHANGED
@@ -24,13 +24,13 @@ module Rhoconnect
|
|
24
24
|
dir = File.expand_path(File.dirname(__FILE__))
|
25
25
|
pwd = Dir.pwd
|
26
26
|
node_modules = File.join(pwd,'node_modules')
|
27
|
-
sub_env = {
|
28
|
-
"NODE_PATH" => "#{node_modules}#{File::PATH_SEPARATOR}#{pwd}#{File::PATH_SEPARATOR}#{dir}",
|
29
|
-
"REDIS_URL" => Rhoconnect.redis_url
|
27
|
+
sub_env = {
|
28
|
+
"NODE_PATH" => "#{node_modules}#{File::PATH_SEPARATOR}#{pwd}#{File::PATH_SEPARATOR}#{dir}",
|
29
|
+
"REDIS_URL" => Rhoconnect.redis_url
|
30
30
|
}
|
31
31
|
file = File.join(dir,"server.js")
|
32
32
|
args = [
|
33
|
-
sub_env, "node", file, Rhoconnect::NodeChannel::PUBSUB_IDENTIFIER,
|
33
|
+
sub_env, "node", file, Rhoconnect::NodeChannel::PUBSUB_IDENTIFIER,
|
34
34
|
Rhoconnect.environment.to_s, Rhoconnect.base_directory
|
35
35
|
]
|
36
36
|
@pipe = IO.popen(args, "w")
|
data/js-adapters/node_channel.rb
CHANGED
@@ -10,18 +10,13 @@ module Rhoconnect
|
|
10
10
|
end
|
11
11
|
|
12
12
|
RESULT_HASH = {}
|
13
|
-
TIMEOUT = 30 # seconds
|
14
13
|
PUBSUB_IDENTIFIER = "#{$$}-#{SecureRandom.hex}"
|
15
14
|
PUB_CHANNEL = "#{PUBSUB_IDENTIFIER}-RedisSUB" # pub channel must link to redis sub channel
|
16
15
|
SUB_CHANNEL = "#{PUBSUB_IDENTIFIER}-RedisPUB" # sub channel must link to redis pub channel
|
17
16
|
@message_thread,@redis_subscriber,@redis_publisher = nil
|
18
17
|
|
19
18
|
class << self
|
20
|
-
attr_accessor :thrd, :register_semaphore, :register_condition
|
21
|
-
|
22
|
-
def get_timeout
|
23
|
-
TIMEOUT
|
24
|
-
end
|
19
|
+
attr_accessor :thrd, :register_semaphore, :register_condition, :timeout
|
25
20
|
|
26
21
|
def redis_subscriber
|
27
22
|
url = Rhoconnect.redis.is_a?(Array) ? Rhoconnect.redis[0] : Rhoconnect.redis
|
@@ -41,7 +36,7 @@ module Rhoconnect
|
|
41
36
|
NodeChannel.redis_publisher.publish(PUB_CHANNEL,{:route => 'deregister'}.to_json)
|
42
37
|
end
|
43
38
|
|
44
|
-
def bootstrap
|
39
|
+
def bootstrap(timeout)
|
45
40
|
@register_semaphore ||= Mutex.new
|
46
41
|
@register_condition ||= ConditionVariable.new
|
47
42
|
# Run in the main thread, we setup node thread and wait for it to
|
@@ -54,6 +49,7 @@ module Rhoconnect
|
|
54
49
|
@message_thread = Thread.new{check_channel}
|
55
50
|
@register_condition.wait(@register_semaphore)
|
56
51
|
end
|
52
|
+
@timeout = timeout
|
57
53
|
end
|
58
54
|
|
59
55
|
def publish_channel_and_wait(msg,curr_model)
|
@@ -97,7 +93,7 @@ module Rhoconnect
|
|
97
93
|
|
98
94
|
def wait_for_result(key,curr_model)
|
99
95
|
begin
|
100
|
-
Timeout::timeout(
|
96
|
+
Timeout::timeout(@timeout) do
|
101
97
|
while(RESULT_HASH[key][:status] == 'waiting') do
|
102
98
|
if RESULT_HASH[key][:pending_js_requests] and result_id = RESULT_HASH[key][:pending_js_requests][0]
|
103
99
|
#do some logic and return data with memory
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
|
3
|
-
class DBAdapter
|
3
|
+
class DBAdapter
|
4
4
|
include Singleton
|
5
5
|
|
6
6
|
# Return the database connection...
|
7
|
-
# For JRuby platform returned connection has extra missing singleton methods ('execute_batch' and 'close'),
|
8
|
-
# and redefined 'transaction' method (to manage DBI auto-commit behavior)
|
7
|
+
# For JRuby platform returned connection has extra missing singleton methods ('execute_batch' and 'close'),
|
8
|
+
# and redefined 'transaction' method (to manage DBI auto-commit behavior)
|
9
9
|
def get_connection(dbfile)
|
10
10
|
if defined?(JRUBY_VERSION) # JRuby
|
11
11
|
require 'dbi'
|
@@ -18,25 +18,25 @@ class DBAdapter
|
|
18
18
|
self.do(sth.strip)
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
# jdbc/sqlite3 instead of 'close' uses 'disconnect' method
|
23
23
|
def close
|
24
24
|
self.disconnect
|
25
25
|
end
|
26
26
|
|
27
27
|
alias_method :do_transaction, :transaction
|
28
|
-
# Disable auto-commit, perform transaction and restore default DBI auto-commit behavior
|
29
|
-
def transaction
|
28
|
+
# Disable auto-commit, perform transaction and restore default DBI auto-commit behavior
|
29
|
+
def transaction(&block)
|
30
30
|
self['AutoCommit'] = false
|
31
|
-
self.do_transaction
|
32
|
-
self['AutoCommit'] = true
|
33
|
-
end
|
34
|
-
end
|
35
|
-
else # Ruby
|
31
|
+
self.do_transaction(&block)
|
32
|
+
self['AutoCommit'] = true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
else # MRI Ruby
|
36
36
|
require 'sqlite3'
|
37
37
|
db = SQLite3::Database.new(dbfile)
|
38
38
|
end
|
39
39
|
|
40
|
-
db
|
41
|
-
end
|
40
|
+
db
|
41
|
+
end
|
42
42
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'zip
|
1
|
+
require 'zip'
|
2
2
|
require 'zlib'
|
3
3
|
|
4
4
|
module Rhoconnect
|
5
5
|
module BulkDataJob
|
6
6
|
@queue = :bulk_data
|
7
|
-
|
7
|
+
|
8
8
|
def self.perform(params)
|
9
9
|
do_bulk_job(params) do |bulk_data|
|
10
10
|
timer = start_timer('starting bulk data process')
|
@@ -50,7 +50,7 @@ module Rhoconnect
|
|
50
50
|
data = source.get_data(:md) if is_selected
|
51
51
|
counter = {}
|
52
52
|
db.transaction do |database|
|
53
|
-
database.prepare("insert into object_values
|
53
|
+
database.prepare("insert into object_values
|
54
54
|
(source_id,attrib,object,value) values (?,?,?,?)") do |stmt|
|
55
55
|
data.each do |object_id,object|
|
56
56
|
object.each do |attrib,value|
|
@@ -62,20 +62,20 @@ module Rhoconnect
|
|
62
62
|
end
|
63
63
|
counter
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
# Loads data into fixed schema table based on source settings
|
67
67
|
def self.import_data_to_fixed_schema(db,source,is_selected=true)
|
68
68
|
data = {}
|
69
69
|
data = source.get_data(:md) if is_selected
|
70
|
-
counter = {}
|
70
|
+
# counter = {}
|
71
71
|
columns,qm = [],[]
|
72
72
|
create_table = ["\"object\" varchar(255) PRIMARY KEY"]
|
73
73
|
schema = JSON.parse(source.schema)
|
74
|
-
|
74
|
+
|
75
75
|
db.transaction do |database|
|
76
76
|
# Create a table with columns specified by 'property' array in settings
|
77
77
|
schema['property'].each do |key,value|
|
78
|
-
create_table << "\"#{key}\" varchar default NULL"
|
78
|
+
create_table << "\"#{key}\" varchar default NULL"
|
79
79
|
columns << key
|
80
80
|
qm << '?'
|
81
81
|
end
|
@@ -86,11 +86,11 @@ module Rhoconnect
|
|
86
86
|
args = [obj]
|
87
87
|
columns.each { |col| args << row[col] }
|
88
88
|
# The * is used to expand an array into individual arguments for 'execute' method.
|
89
|
-
# JRuby (1.6.0) won't work without asterisk, but other rubies doing well!
|
90
|
-
stmt.execute(*args)
|
89
|
+
# JRuby (1.6.0) won't work without asterisk, but other rubies doing well!
|
90
|
+
stmt.execute(*args)
|
91
91
|
end
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
# Create indexes for specified columns in settings 'index'
|
95
95
|
schema['index'].each do |key,value|
|
96
96
|
val2 = ""
|
@@ -98,10 +98,10 @@ module Rhoconnect
|
|
98
98
|
val2 += ',' if val2.length > 0
|
99
99
|
val2 += "\"#{col}\""
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
database.execute("CREATE INDEX #{key} on #{source.name} (#{val2});")
|
103
103
|
end if schema['index']
|
104
|
-
|
104
|
+
|
105
105
|
# Create unique indexes for specified columns in settings 'unique_index'
|
106
106
|
schema['unique_index'].each do |key,value|
|
107
107
|
val2 = ""
|
@@ -109,14 +109,14 @@ module Rhoconnect
|
|
109
109
|
val2 += ',' if val2.length > 0
|
110
110
|
val2 += "\"#{col}\""
|
111
111
|
end
|
112
|
-
|
112
|
+
|
113
113
|
database.execute("CREATE UNIQUE INDEX #{key} on #{source.name} (#{val2});")
|
114
114
|
end if schema['unique_index']
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
return {}
|
118
118
|
end
|
119
|
-
|
119
|
+
|
120
120
|
def self.refs_to_s(refs)
|
121
121
|
str = ''
|
122
122
|
refs.sort.each do |name,value|
|
@@ -124,15 +124,15 @@ module Rhoconnect
|
|
124
124
|
end
|
125
125
|
str[0..-2]
|
126
126
|
end
|
127
|
-
|
127
|
+
|
128
128
|
# #2354: Bulk sync not updating sources table
|
129
129
|
# last_inserted_size +
|
130
130
|
# last_deleted_size
|
131
131
|
# backend_refresh_time +
|
132
|
-
def self.populate_sources_table(db,sources_refs)
|
132
|
+
def self.populate_sources_table(db,sources_refs)
|
133
133
|
db.transaction do |database|
|
134
134
|
database.prepare("insert into sources
|
135
|
-
(source_id,name,sync_priority,partition,sync_type,source_attribs,metadata,schema,blob_attribs,associations,last_inserted_size,backend_refresh_time)
|
135
|
+
(source_id,name,sync_priority,partition,sync_type,source_attribs,metadata,schema,blob_attribs,associations,last_inserted_size,backend_refresh_time)
|
136
136
|
values (?,?,?,?,?,?,?,?,?,?,?,?)") do |stmt|
|
137
137
|
sources_refs.each do |source_name,ref|
|
138
138
|
s = ref[:source]
|
@@ -144,7 +144,7 @@ module Rhoconnect
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
def self.create_sqlite_data_file(bulk_data,ts)
|
149
149
|
sources_refs = {}
|
150
150
|
schema,index,bulk_data.dbfile = get_file_args(bulk_data.name,ts)
|
@@ -152,9 +152,9 @@ module Rhoconnect
|
|
152
152
|
# TODO: remove old bulk files!
|
153
153
|
# FileUtils.rm Dir.glob(File.join(Rhoconnect.data_directory, "#{bulk_data.name}*"))
|
154
154
|
|
155
|
-
db = DBAdapter.instance.get_connection(bulk_data.dbfile)
|
155
|
+
db = DBAdapter.instance.get_connection(bulk_data.dbfile)
|
156
156
|
db.execute_batch(File.open(schema,'r').read)
|
157
|
-
|
157
|
+
|
158
158
|
src_counter = 1
|
159
159
|
selected_sources = {}
|
160
160
|
bulk_data.sources[0, -1].each do |source|
|
@@ -173,33 +173,33 @@ module Rhoconnect
|
|
173
173
|
else
|
174
174
|
source_attrib_refs = import_data_to_object_values(db,source,is_selected_source)
|
175
175
|
end
|
176
|
-
sources_refs[source_name] =
|
176
|
+
sources_refs[source_name] =
|
177
177
|
{:source => source, :refs => source_attrib_refs, :skip_source => !is_selected_source}
|
178
178
|
lap_timer("finished importing sqlite data for #{source_name}",timer)
|
179
179
|
end
|
180
180
|
populate_sources_table(db,sources_refs)
|
181
|
-
|
181
|
+
|
182
182
|
db.execute_batch(File.open(index,'r').read)
|
183
183
|
db.execute_batch("VACUUM;");
|
184
184
|
db.close
|
185
|
-
|
185
|
+
|
186
186
|
compress("#{bulk_data.dbfile}.rzip",bulk_data.dbfile)
|
187
187
|
gzip_compress("#{bulk_data.dbfile}.gzip",bulk_data.dbfile)
|
188
188
|
end
|
189
|
-
|
189
|
+
|
190
190
|
def self.get_file_args(bulk_data_name,ts)
|
191
191
|
schema = BulkData.schema_file
|
192
192
|
index = BulkData.index_file
|
193
193
|
dbfile = File.join(Rhoconnect.data_directory,bulk_data_name+'_'+ts+'.data')
|
194
194
|
[schema,index,dbfile]
|
195
195
|
end
|
196
|
-
|
196
|
+
|
197
197
|
def self.compress(archive,file)
|
198
|
-
Zip::
|
198
|
+
Zip::File.open(archive, 'w') do |zipfile|
|
199
199
|
zipfile.add(URI.escape(File.basename(file)),file)
|
200
200
|
end
|
201
201
|
end
|
202
|
-
|
202
|
+
|
203
203
|
def self.gzip_compress(archive,file)
|
204
204
|
data = File.new(file, "rb")
|
205
205
|
File.open(archive, 'wb') do |f|
|
@@ -209,6 +209,6 @@ module Rhoconnect
|
|
209
209
|
end
|
210
210
|
data.close
|
211
211
|
end
|
212
|
-
|
212
|
+
|
213
213
|
end
|
214
214
|
end
|
data/lib/rhoconnect/license.rb
CHANGED
@@ -4,7 +4,7 @@ require 'pathname'
|
|
4
4
|
module Rhoconnect
|
5
5
|
class LicenseException < RuntimeError; end
|
6
6
|
class LicenseSeatsExceededException < LicenseException; end
|
7
|
-
|
7
|
+
|
8
8
|
class License
|
9
9
|
attr_reader :rhoconnect_version, :licensee, :seats, :issued
|
10
10
|
attr_accessor :license
|
@@ -20,9 +20,9 @@ module Rhoconnect
|
|
20
20
|
elsif ENV['RHOSYNC_LICENSE']
|
21
21
|
@license = ENV['RHOSYNC_LICENSE']
|
22
22
|
else
|
23
|
-
app_config = Rhoconnect.get_config(Rhoconnect.base_directory)
|
23
|
+
# app_config = Rhoconnect.get_config(Rhoconnect.base_directory)
|
24
24
|
settings = Rhoconnect.get_config(Rhoconnect.base_directory)[Rhoconnect.environment]
|
25
|
-
licensefile = settings[:licensefile]
|
25
|
+
licensefile = settings[:licensefile]
|
26
26
|
if licensefile
|
27
27
|
path_to_license = (Pathname.new(licensefile).absolute?) ? licensefile : File.join(Rhoconnect.base_directory, licensefile)
|
28
28
|
else
|
@@ -37,7 +37,7 @@ module Rhoconnect
|
|
37
37
|
raise LicenseException.new("Error verifying license.")
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def check_and_use_seat
|
42
42
|
incr = false
|
43
43
|
Store.lock(CLIENT_DOCKEY) do
|
@@ -53,7 +53,7 @@ module Rhoconnect
|
|
53
53
|
log msg; raise LicenseSeatsExceededException.new(msg)
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
def free_seat
|
58
58
|
Store.lock(CLIENT_DOCKEY) do
|
59
59
|
current = Store.get_value(CLIENT_DOCKEY)
|
@@ -63,14 +63,14 @@ module Rhoconnect
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
def available
|
68
68
|
current = Store.get_value(CLIENT_DOCKEY)
|
69
69
|
current = current ? current.to_i : 0
|
70
70
|
available = self.seats - current
|
71
71
|
available > 0 ? available : 0
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
private
|
75
75
|
|
76
76
|
def _decrypt
|