rhoconnect 4.0.0 → 4.0.1

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 (56) hide show
  1. data/CHANGELOG.md +8 -0
  2. data/Gemfile.lock +16 -18
  3. data/Rakefile +4 -4
  4. data/bench/benchapp/Rakefile +10 -16
  5. data/bench/blobapp/Rakefile +9 -18
  6. data/bench/distr_bench/distr_bench_main +1 -1
  7. data/bench/distr_bench/run_distr_client.sh +2 -1
  8. data/bench/lib/bench.rb +1 -1
  9. data/bench/lib/bench/cli.rb +2 -0
  10. data/bench/lib/bench/distr_runner.rb +5 -5
  11. data/bench/lib/bench/test_data.rb +2 -2
  12. data/bench/scripts/test_query_script.rb +7 -6
  13. data/bin/rhoconnect +2 -0
  14. data/bin/rhoconnect-benchmark +13 -1
  15. data/commands/redis/redis_download.rb +1 -1
  16. data/commands/rhoconnect/routes.rb +12 -0
  17. data/doc/authentication.txt +1 -1
  18. data/doc/command-line.txt +1 -1
  19. data/doc/deploying.txt +2 -2
  20. data/doc/migration.txt +21 -12
  21. data/doc/push-client-setup-android.txt +1 -1
  22. data/doc/push-client-setup-rps.txt +3 -1
  23. data/doc/supported-platforms.txt +14 -7
  24. data/examples/simple/Rakefile +0 -1
  25. data/generators/rhoconnect.rb +15 -3
  26. data/generators/templates/application/Rakefile +1 -2
  27. data/js-adapters/ballroom.js +36 -9
  28. data/js-adapters/node.rb +8 -2
  29. data/js-adapters/node_channel.rb +10 -6
  30. data/js-adapters/rhoconnect_helpers.js +4 -0
  31. data/js-adapters/router.js +5 -3
  32. data/js-adapters/server.js +1 -1
  33. data/lib/rhoconnect.rb +9 -5
  34. data/lib/rhoconnect/api_token.rb +1 -2
  35. data/lib/rhoconnect/client.rb +1 -1
  36. data/lib/rhoconnect/controller/js_base.rb +7 -2
  37. data/lib/rhoconnect/model/base.rb +1 -1
  38. data/lib/rhoconnect/predefined_adapters/controllers/js/rho_internal_js_bench_adapter_controller.js +12 -0
  39. data/lib/rhoconnect/predefined_adapters/models/js/rho_internal_js_bench_adapter.js +107 -0
  40. data/lib/rhoconnect/source.rb +5 -0
  41. data/lib/rhoconnect/store.rb +3 -0
  42. data/lib/rhoconnect/version.rb +1 -1
  43. data/lib/rhoconnect/web-console/server.rb +1 -2
  44. data/rhoconnect.gemspec +0 -1
  45. data/spec/apps/jstestapp/Rakefile +1 -0
  46. data/spec/apps/jstestapp/config.ru +16 -0
  47. data/spec/apps/jstestapp/controllers/js/application_controller.js +18 -0
  48. data/spec/apps/jstestapp/settings/license.key +1 -0
  49. data/spec/apps/jstestapp/settings/settings.yml +13 -0
  50. data/spec/controllers/js_base_spec.rb +129 -97
  51. data/spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb +111 -0
  52. data/spec/predefined_adapters/rho_internal_js_bench_adapter_js_spec.rb +44 -0
  53. data/spec/spec_helper.rb +4 -0
  54. data/tasks/redis.rake +9 -127
  55. metadata +19 -20
  56. data/lib/rhoconnect/tasks.rb +0 -315
@@ -0,0 +1,111 @@
1
+ require 'rack/test'
2
+ require File.join(File.dirname(__FILE__),'..','spec_helper')
3
+ require File.join(File.dirname(__FILE__),'..','..','lib','rhoconnect','server.rb')
4
+
5
+ describe "Rhoconnect::RhoInternalJsBenchAdapterController" do
6
+ include Rack::Test::Methods
7
+ include Rhoconnect
8
+
9
+ it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
10
+ def app
11
+ @app ||= Rack::URLMap.new Rhoconnect.url_map
12
+ end
13
+
14
+ before(:each) do
15
+ Rhoconnect::Server.set :environment, :test
16
+ Rhoconnect::Server.set :secret, "secure!"
17
+ Rhoconnect.use_node = true
18
+ Rhoconnect.bootstrap(get_testapp_path)
19
+ do_post "/rc/#{Rhoconnect::API_VERSION}/app/login", "login" => @u.login, "password" => 'testpass'
20
+ end
21
+
22
+ after(:each) do
23
+ Rhoconnect::Store.flush_all
24
+ Rhoconnect::Node.kill_process
25
+ end
26
+
27
+ it "should call query method" do
28
+ get '/app/v1/RhoInternalJsBenchAdapter', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
29
+ last_response.should be_ok
30
+ body = JSON.parse(last_response.body)
31
+ end
32
+
33
+ it "should call create method" do
34
+ hsh = {'create'=>{'1'=>{'mockId'=>'1','name'=>'testname','price'=>'$199'}}}
35
+ post '/app/v1/RhoInternalJsBenchAdapter', hsh,{Rhoconnect::CLIENT_ID_HEADER => @c.id}
36
+ last_response.should be_ok
37
+
38
+ get '/app/v1/RhoInternalJsBenchAdapter', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
39
+ body = JSON.parse(last_response.body)
40
+ body[5]["insert"]["mockId"]["mockId"].should == "1"
41
+ end
42
+
43
+ it "should call update method" do
44
+ get '/app/v1/RhoInternalJsBenchAdapter', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
45
+ body = JSON.parse(last_response.body)
46
+ body[4]["total_count"].should == 0
47
+
48
+ hsh = {'create'=>{'1'=>{'mockId'=>'1','name'=>'testname','price'=>'$199'}}}
49
+ post '/app/v1/RhoInternalJsBenchAdapter', hsh,{Rhoconnect::CLIENT_ID_HEADER => @c.id}
50
+ last_response.should be_ok
51
+
52
+ get '/app/v1/RhoInternalJsBenchAdapter', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
53
+ body = JSON.parse(last_response.body)
54
+ token = last_response.headers["X-Rhoconnect-PAGE-TOKEN"]
55
+ count = body[4]["total_count"]
56
+ count.should == 1
57
+
58
+ get '/app/v1/RhoInternalJsBenchAdapter', {:token=>token}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
59
+ body = JSON.parse(last_response.body)
60
+ count = body[4]["total_count"]
61
+ count.should == 1
62
+
63
+ hsh = {'update'=>{'mockId'=>'1','name'=>'updatename'}}
64
+ put '/app/v1/RhoInternalJsBenchAdapter/mockId',hsh, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
65
+ last_response.should be_ok
66
+
67
+ get '/app/v1/RhoInternalJsBenchAdapter', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
68
+ body = JSON.parse(last_response.body)
69
+ puts "body is #{body}"
70
+ token = last_response.headers["X-Rhoconnect-PAGE-TOKEN"]
71
+ #body[5]["insert"]["mockId"]["name"].should == "updatename"
72
+
73
+ get '/app/v1/RhoInternalJsBenchAdapter', {:token=>token}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
74
+ body = JSON.parse(last_response.body)
75
+ puts "body is #{body}"
76
+ last_response.should be_ok
77
+ end
78
+
79
+ it "should call delete method" do
80
+ get '/app/v1/RhoInternalJsBenchAdapter', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
81
+ body = JSON.parse(last_response.body)
82
+ body[4]["total_count"].should == 0
83
+
84
+ hsh = {'create'=>{'1'=>{'mockId'=>'1','name'=>'testname','price'=>'$199'}}}
85
+ post '/app/v1/RhoInternalJsBenchAdapter', hsh,{Rhoconnect::CLIENT_ID_HEADER => @c.id}
86
+ last_response.should be_ok
87
+
88
+ get '/app/v1/RhoInternalJsBenchAdapter', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
89
+ body = JSON.parse(last_response.body)
90
+ token = last_response.headers["X-Rhoconnect-PAGE-TOKEN"]
91
+ count = body[4]["total_count"]
92
+ count.should == 1
93
+
94
+ get '/app/v1/RhoInternalJsBenchAdapter', {:token => token}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
95
+ body = JSON.parse(last_response.body)
96
+ count = body[4]["total_count"]
97
+ count.should == 1
98
+
99
+ delete '/app/v1/RhoInternalJsBenchAdapter/1',{}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
100
+ last_response.should be_ok
101
+
102
+ get '/app/v1/RhoInternalJsBenchAdapter', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
103
+ body = JSON.parse(last_response.body)
104
+ token = last_response.headers["X-Rhoconnect-PAGE-TOKEN"]
105
+
106
+ get '/app/v1/RhoInternalJsBenchAdapter', {:token => token}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
107
+ body = JSON.parse(last_response.body)
108
+ body[4]["total_count"].should == 0
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,44 @@
1
+ require File.join(File.dirname(__FILE__),'..','spec_helper')
2
+ require File.join(File.dirname(__FILE__),'..','..','lib','rhoconnect','server.rb')
3
+
4
+ describe "Rhoconnect::RhoInternalJsBenchAdapter" do
5
+ include Rhoconnect
6
+
7
+ it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
8
+ before(:each) do
9
+ Rhoconnect::Server.set :environment, :test
10
+ Rhoconnect::Server.set :secret, "secure!"
11
+ Rhoconnect.use_node = true
12
+ Rhoconnect.bootstrap(get_testapp_path)
13
+ end
14
+
15
+ def app
16
+ @app ||= Rack::URLMap.new Rhoconnect.url_map
17
+ end
18
+
19
+ after(:each) do
20
+ Rhoconnect::Store.flush_all
21
+ Rhoconnect::Node.kill_process
22
+ #Source.valid_doctypes.delete('tmpdoc'.to_sym)
23
+ end
24
+
25
+ it "should call login method from model" do
26
+ rho_int = RhoInternalJsBenchAdapter.new(Source.load('RhoInternalJsBenchAdapter', {:app_id => @a.id, :user_id => @u.id}))
27
+ res = rho_int.login
28
+ res.should == true
29
+ end
30
+
31
+ it "should call logoff method from model" do
32
+ rho_int = RhoInternalJsBenchAdapter.new(Source.load('RhoInternalJsBenchAdapter', {:app_id => @a.id, :user_id => @u.id}))
33
+ res = rho_int.logoff
34
+ res.should == true
35
+ end
36
+
37
+ it "should call query method from model" do
38
+ rho_int = RhoInternalJsBenchAdapter.new(Source.load('RhoInternalJsBenchAdapter', {:app_id => @a.id, :user_id => @u.id}))
39
+ res = rho_int.query
40
+ res.should == true
41
+ end
42
+
43
+ end
44
+ end
@@ -71,6 +71,10 @@ module TestHelpers
71
71
  File.expand_path(File.join(File.dirname(__FILE__),'apps','rhotestapp'))
72
72
  end
73
73
 
74
+ def get_jstestapp_path
75
+ File.expand_path(File.join(File.dirname(__FILE__),'apps','jstestapp'))
76
+ end
77
+
74
78
  def get_emptyapp_path
75
79
  File.expand_path(File.join(File.dirname(__FILE__),'apps','emptyapp'))
76
80
  end
@@ -1,105 +1,12 @@
1
1
  # Inspired by rabbitmq.rake the Redbox project at http://github.com/rick/redbox/tree/master
2
- require 'fileutils'
3
- require 'open-uri'
4
- require 'rbconfig'
5
-
2
+ require_relative '../lib/rhoconnect/utilities'
3
+ require_relative '../commands/utilities/redis_runner'
4
+ include Utilities
6
5
  include Rake::DSL
7
6
 
8
- REDIS_RELEASE = "2.4.10"
9
-
10
- # See: http://rbjl.net/35-how-to-properly-check-for-your-ruby-interpreter-version-and-os
11
- def windows?
12
- RbConfig::CONFIG['host_os'] =~ /(win|w)32$/
13
- end
14
-
15
- if windows?
16
- $redis_ver = "redis-#{REDIS_RELEASE}"
17
- $redis_zip = "C:/#{$redis_ver}.zip"
18
- $redis_dest = "C:/"
19
- end
20
-
21
-
22
- def redis_home
23
- ENV['REDIS_HOME'] || File.join($redis_dest,$redis_ver)
24
- end
25
-
26
- def mk_bin_dir(bin_dir)
27
- begin
28
- mkdir_p bin_dir unless File.exists?(bin_dir)
29
- rescue
30
- puts "Can't create #{bin_dir}, maybe you need to run command as root?"
31
- exit 1
32
- end
33
- end
34
-
35
- class RedisRunner
36
-
37
- def self.prefix
38
- "/usr/local/"
39
- end
40
-
41
- def self.redisdir
42
- "/tmp/redis/"
43
- end
44
-
45
- def self.redisconfdir
46
- server_dir = File.dirname(`which redis-server`)
47
- conf_file = "#{RedisRunner.prefix}etc/redis.conf"
48
- unless File.exists? conf_file
49
- conf_file = "#{server_dir}/redis.conf"
50
- end
51
- conf_file
52
- end
53
-
54
- def self.dtach_socket
55
- '/tmp/redis.dtach'
56
- end
57
-
58
- # Just check for existance of dtach socket
59
- def self.running?
60
- File.exists? dtach_socket
61
- end
62
-
63
- def self.start
64
- if windows?
65
- puts "Starting redis in a new window..."
66
- sh "start #{File.join(redis_home,'redis-server')} #{File.join(redis_home,'redis.conf')}" rescue
67
- "redis-server not installed on your path, please install redis."
68
- elsif defined?(JRUBY_VERSION)
69
- puts "Starting redis ..."
70
- sh "redis-server #{redisconfdir}"
71
- else
72
- puts 'Detach with Ctrl+\ Re-attach with rake redis:attach'
73
- sleep 1
74
- command = "dtach -A #{dtach_socket} redis-server #{redisconfdir}"
75
- sh command
76
- end
77
- end
78
-
79
- # this function is used with Rhostudio where there is no terminal
80
- def self.startbg
81
- if windows?
82
- puts "Starting redis in a new window..."
83
- sh "start #{File.join(redis_home,'redis-server')} #{File.join(redis_home,'redis.conf')}" rescue
84
- "redis-server not installed on your path, please install redis."
85
- else
86
- puts "Starting redis ..."
87
- system("redis-server #{redisconfdir} &")
88
- end
89
- end
90
-
91
- def self.attach
92
- exec "dtach -a #{dtach_socket}"
93
- end
94
-
95
- def self.stop
96
- Redis.new.shutdown rescue nil
97
- end
98
-
99
- end
7
+ REDIS_RELEASE = "2.6.14"
100
8
 
101
9
  namespace :redis do
102
-
103
10
  desc 'About redis'
104
11
  task :about do
105
12
  puts "\nSee http://redis.io/ for information about redis.\n\n"
@@ -137,11 +44,9 @@ namespace :redis do
137
44
  ENV['PREFIX'] and bin_dir = "#{ENV['PREFIX']}/bin" or bin_dir = "#{RedisRunner.prefix}bin"
138
45
 
139
46
  mk_bin_dir(bin_dir)
140
-
141
47
  %w(redis-benchmark redis-cli redis-server).each do |bin|
142
48
  sh "cp /tmp/redis/src/#{bin} #{bin_dir}"
143
49
  end
144
-
145
50
  puts "Installed redis-benchmark, redis-cli and redis-server to #{bin_dir}"
146
51
 
147
52
  ENV['PREFIX'] and conf_dir = "#{ENV['PREFIX']}/etc" or conf_dir = "#{RedisRunner.prefix}etc"
@@ -162,40 +67,17 @@ namespace :redis do
162
67
 
163
68
  desc "Download package"
164
69
  task :download do
165
- if windows?
166
- require 'net/http'
167
- require 'zip/zip'
168
- puts "Installing redis to #{redis_home}."
169
-
170
- Net::HTTP.start("cloud.github.com") do |http|
171
- resp = http.get("/downloads/dmajkic/redis/#{$redis_ver}-win32-win64.zip")
172
- open($redis_zip, "wb") do |file|
173
- file.write(resp.body)
174
- end
175
- end
176
-
177
- Zip::ZipFile.open($redis_zip) do |zip_file|
178
- zip_file.each do |f|
179
- f_path = File.join(redis_home, f.name)
180
- FileUtils.mkdir_p(File.dirname(f_path))
181
- zip_file.extract(f, f_path) { true }
182
- end
183
- end
184
-
185
- FileUtils.mv Dir.glob(File.join(redis_home,'32bit','*')), redis_home
186
- FileUtils.rm_rf File.join(redis_home, '64bit')
187
- FileUtils.rm_f $redis_zip
70
+ unless windows?
71
+ system 'rm -rf /tmp/redis/' if File.exists?("#{RedisRunner.redisdir}")
72
+ system 'git clone git://github.com/antirez/redis.git /tmp/redis -n'
73
+ system "cd #{RedisRunner.redisdir} && git reset --hard && git checkout #{REDIS_RELEASE}"
188
74
  else
189
- sh 'rm -rf /tmp/redis/' if File.exists?("#{RedisRunner.redisdir}")
190
- sh 'git clone git://github.com/antirez/redis.git /tmp/redis -n'
191
- sh "cd #{RedisRunner.redisdir} && git reset --hard && git checkout #{REDIS_RELEASE}"
75
+ puts "Not implemented on Windows"
192
76
  end
193
77
  end
194
-
195
78
  end
196
79
 
197
80
  namespace :dtach do
198
-
199
81
  desc 'About dtach'
200
82
  task :about do
201
83
  puts "\nSee http://dtach.sourceforge.net/ for information about dtach.\n\n"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhoconnect
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-05 00:00:00.000000000 Z
12
+ date: 2013-10-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -107,22 +107,6 @@ dependencies:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
109
  version: 0.9.4
110
- - !ruby/object:Gem::Dependency
111
- name: uuidtools
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: 2.1.1
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: 2.1.1
126
110
  - !ruby/object:Gem::Dependency
127
111
  name: connection_pool
128
112
  requirement: !ruby/object:Gem::Requirement
@@ -594,9 +578,10 @@ files:
594
578
  - lib/rhoconnect/web-console/controllers/admins.js
595
579
  - lib/rhoconnect/web-console/templates/index.erb
596
580
  - lib/rhoconnect/web-console/templates/jqplot.erb
597
- - lib/rhoconnect/tasks.rb
598
581
  - lib/rhoconnect/read_state.rb
599
582
  - lib/rhoconnect/predefined_adapters/bench_adapter.rb
583
+ - lib/rhoconnect/predefined_adapters/models/js/rho_internal_js_bench_adapter.js
584
+ - lib/rhoconnect/predefined_adapters/controllers/js/rho_internal_js_bench_adapter_controller.js
600
585
  - lib/rhoconnect/ping.rb
601
586
  - lib/rhoconnect/bulk_data.rb
602
587
  - lib/rhoconnect/source.rb
@@ -659,6 +644,8 @@ files:
659
644
  - spec/perf/store_perf_spec.rb
660
645
  - spec/rhoconnect_spec.rb
661
646
  - spec/user_spec.rb
647
+ - spec/predefined_adapters/rho_internal_js_bench_adapter_js_spec.rb
648
+ - spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb
662
649
  - spec/models/js_base_spec.rb
663
650
  - spec/server/cors_spec.rb
664
651
  - spec/server/x_domain_session_wrapper_spec.rb
@@ -732,6 +719,11 @@ files:
732
719
  - spec/ping/apple_spec.rb
733
720
  - spec/ping/gcm_spec.rb
734
721
  - spec/license_spec.rb
722
+ - spec/apps/jstestapp/settings/settings.yml
723
+ - spec/apps/jstestapp/settings/license.key
724
+ - spec/apps/jstestapp/config.ru
725
+ - spec/apps/jstestapp/controllers/js/application_controller.js
726
+ - spec/apps/jstestapp/Rakefile
735
727
  - spec/apps/emptyapp/application.rb
736
728
  - spec/apps/emptyapp/settings/settings.yml
737
729
  - spec/apps/emptyapp/settings/license.key
@@ -770,7 +762,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
770
762
  version: '0'
771
763
  segments:
772
764
  - 0
773
- hash: -2978824811517012826
765
+ hash: -3033428230071358530
774
766
  required_rubygems_version: !ruby/object:Gem::Requirement
775
767
  none: false
776
768
  requirements:
@@ -821,6 +813,8 @@ test_files:
821
813
  - spec/perf/store_perf_spec.rb
822
814
  - spec/rhoconnect_spec.rb
823
815
  - spec/user_spec.rb
816
+ - spec/predefined_adapters/rho_internal_js_bench_adapter_js_spec.rb
817
+ - spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb
824
818
  - spec/models/js_base_spec.rb
825
819
  - spec/server/cors_spec.rb
826
820
  - spec/server/x_domain_session_wrapper_spec.rb
@@ -894,6 +888,11 @@ test_files:
894
888
  - spec/ping/apple_spec.rb
895
889
  - spec/ping/gcm_spec.rb
896
890
  - spec/license_spec.rb
891
+ - spec/apps/jstestapp/settings/settings.yml
892
+ - spec/apps/jstestapp/settings/license.key
893
+ - spec/apps/jstestapp/config.ru
894
+ - spec/apps/jstestapp/controllers/js/application_controller.js
895
+ - spec/apps/jstestapp/Rakefile
897
896
  - spec/apps/emptyapp/application.rb
898
897
  - spec/apps/emptyapp/settings/settings.yml
899
898
  - spec/apps/emptyapp/settings/license.key
@@ -1,315 +0,0 @@
1
- require 'zip/zip'
2
- require 'uri'
3
- $:.unshift File.dirname(__FILE__)
4
- require 'utilities'
5
-
6
- DEPRECATION_MSG = "\n" +
7
- "*** Warning: As of version 4.0 of rhoconnect, the rake command will be deprecated. ***\n" +
8
- "*** Use the corresponding rhoconnect commands instead. ***\n" +
9
- "*** Type 'rhoconnect help' for more information on these commands. ***\n" +
10
- "\n"
11
-
12
- puts DEPRECATION_MSG if $0.include? 'rake'
13
-
14
- namespace :rhoconnect do
15
- include Utilities
16
-
17
- task :config do
18
- $settings = load_settings(File.join('settings','settings.yml'))
19
- $env = (ENV['RHO_ENV'] || ENV['RACK_ENV'] || :development).to_sym
20
- uri = URI.parse($settings[$env][:syncserver])
21
- $url = "#{uri.scheme}://#{uri.host}"
22
- $url = "#{$url}:#{uri.port}" if uri.port && uri.port != 80
23
- $host = uri.host
24
- $port = uri.port
25
- $appname = $settings[$env][:syncserver].split('/').last
26
- $token_file = File.join(ENV['HOME'],'.rhoconnect_token')
27
- $token = File.read($token_file) if File.exist?($token_file)
28
- end
29
-
30
- task :dtach_installed do
31
- if !windows? and (`which dtach` == '')
32
- puts "WARNING: dtach not installed or not on path, some tasks will not work!"
33
- puts " Install with '[sudo] rake dtach:install'"
34
- exit
35
- end
36
- end
37
-
38
- desc "Reset the rhoconnect database (you will need to run rhoconnect:get_token afterwards)"
39
- task :reset => :config do
40
- confirm = ask " Are you sure? Resetting will remove all data!\n It will also return an error code to all\n existing devices when they connect! (yes/no): "
41
- if confirm == 'yes'
42
- RestClient.post("#{$url}/api/admin/reset", { :api_token => $token })
43
- puts "Database reset."
44
- else
45
- puts "Cancelling."
46
- end
47
- end
48
-
49
- desc "Fetches current api token from rhoconnect"
50
- task :get_token => :config do
51
- password = ''
52
- login = ask "admin login: "
53
- begin
54
- system "stty -echo"
55
- password = ask "\nadmin password: "
56
- system "stty echo"
57
- rescue NoMethodError, Interrupt
58
- system "stty echo"
59
- exit
60
- end
61
- puts ''
62
- begin
63
- $token = RestClient.post("#{$url}/api/admin/login", { :login => login, :password => password})
64
- rescue
65
- puts "Login failed."
66
- exit
67
- end
68
- File.open($token_file,'w') {|f| f.write $token}
69
- puts "Token is saved in: #{$token_file}"
70
- end
71
-
72
- desc "Clean rhoconnect, get token, and create new user"
73
- task :clean_start => [:get_token, :reset, :get_token, :create_user]
74
-
75
- desc "Alias for `rake rhoconnect:stop; rake rhoconnect:start`"
76
- task :restart => [:stop, :start]
77
-
78
- desc "Creates and subscribes user for application in rhoconnect"
79
- task :create_user => :config do
80
- password = ''
81
- login = ask "new user login: "
82
- begin
83
- system "stty -echo"
84
- password = ask "\nnew user password: "
85
- system "stty echo"
86
- rescue NoMethodError, Interrupt
87
- system "stty echo"
88
- exit
89
- end
90
- puts ''
91
- RestClient.post("#{$url}/api/user/create_user", { :api_token => $token, :attributes => {:login => login, :password => password}})
92
- end
93
-
94
- desc "Deletes a user from rhoconnect"
95
- task :delete_user => :config do
96
- login = ask "user to delete: "
97
- RestClient.post("#{$url}/api/user/delete_user", { :api_token => $token, :user_id => login })
98
- end
99
-
100
- desc "Deletes a device from rhoconnect"
101
- task :delete_device => :config do
102
- user_id = ask "device's user_id: "
103
- device_id = ask "device to delete: "
104
- RestClient.post("#{$url}/api/client/delete_client", { :api_token => $token, :user_id => user_id, :client_id => device_id})
105
- end
106
-
107
- desc "Sets the admin password"
108
- task :set_admin_password => :get_token do
109
- new_pass,new_pass_confirm = '',''
110
- begin
111
- system "stty -echo"
112
- new_pass = ask "\nnew admin password: "
113
- new_pass_confirm = ask "\nconfirm new admin password: "
114
- system "stty echo"
115
- rescue NoMethodError, Interrupt
116
- system "stty echo"
117
- exit
118
- end
119
- if new_pass == ''
120
- puts "\nNew password can't be empty."
121
- elsif new_pass == new_pass_confirm
122
- puts ""
123
- admin_user = 'rhoadmin'
124
- RestClient.put("#{$url}/rc/#{Rhoconnect::API_VERSION}/users/#{admin_user}", {:app_name => $appname, :api_token => $token,
125
- :attributes => {:new_password => new_pass}})
126
- else
127
- puts "\nNew password and confirmation must match."
128
- end
129
- end
130
-
131
- desc "Reset source refresh time"
132
- task :reset_refresh => :config do
133
- user = ask "user: "
134
- source_name = ask "source name: "
135
- RestClient.put("#{$url}/rc/#{Rhoconnect::API_VERSION}/readstate/users/#{user}/sources/#{source_name}", {:api_token => $token})
136
- end
137
-
138
- begin
139
- require 'rspec/core/rake_task'
140
-
141
- desc "Run source adapter specs"
142
- task :spec do
143
- files = File.join('spec','**','*_spec.rb')
144
- puts "files loaded are ****** #{files}"
145
- RSpec::Core::RakeTask.new('rhoconnect:spec') do |t|
146
- t.pattern = FileList[files]
147
- t.rspec_opts = %w(-fn -b --color)
148
- end
149
- end
150
- rescue Exception => e
151
- puts "Run source adapter specs error: #{e.inspect}"
152
- end
153
-
154
- desc "Start rhoconnect server"
155
- task :start => :dtach_installed do
156
- cmd = (jruby?) ? trinidad? : (thin? || mongrel? || report_missing_server)
157
- if windows?
158
- puts 'Starting rhoconnect...'
159
- system("#{cmd} config.ru -P #{rhoconnect_pid}")
160
- elsif jruby?
161
- puts 'Starting rhoconnect in jruby environment...'
162
- system("#{cmd} -r config.ru")
163
- else
164
- puts 'Detach with Ctrl+\ Re-attach with rake rhoconnect:attach'
165
- sleep 2
166
- system "dtach -A #{rhoconnect_socket} #{cmd} config.ru -P #{rhoconnect_pid}"
167
- end
168
- end
169
-
170
- # desc "Start rhoconnect server in bg mode (Rhostudio) - this is an internal command"
171
- task :startbg do
172
- cmd = (jruby?) ? trinidad? : (thin? || mongrel? || report_missing_server)
173
- require 'win32/process' if windows?
174
-
175
- p1 = Process.fork {
176
- if windows?
177
- puts 'Starting rhoconnect ...'
178
- system("#{cmd} config.ru -P #{rhoconnect_pid}")
179
- elsif jruby?
180
- puts 'Starting rhoconnect in jruby environment...'
181
- system("#{cmd} -r config.ru")
182
- else
183
- system("bundle exec #{cmd} config.ru -P #{rhoconnect_pid}")
184
- end
185
- }
186
- Process.detach(p1)
187
-
188
- exit
189
- end
190
-
191
- # desc "Start rhoconnect server in debug mode (Rhostudio) - this is an internal command"
192
- task :startdebug do
193
- cmd = (jruby?) ? trinidad? : (thin? || mongrel? || report_missing_server)
194
- ENV['DEBUG'] = 'yes'
195
- require 'win32/process' if windows?
196
-
197
- p1 = Process.fork {
198
- if windows?
199
- puts 'Starting rhoconnect ...'
200
- system("#{cmd} config.ru -P #{rhoconnect_pid}")
201
- elsif jruby?
202
- puts 'Starting rhoconnect in jruby environment...'
203
- system("#{cmd} -r config.ru")
204
- else
205
- system("bundle exec #{cmd} config.ru -P #{rhoconnect_pid}")
206
- end
207
- }
208
- Process.detach(p1)
209
-
210
- exit
211
- end
212
-
213
- desc "run rhoconnect console"
214
- task :console, :environment do |t, args|
215
- if RedisRunner.running?
216
- application_file = ruby19? ? './application' : 'application'
217
- #load development environment by default
218
- ENV['RACK_ENV'] = args[:environment] || 'development'
219
- system "irb -rubygems -r #{File.join(File.dirname(__FILE__),'console')} " +
220
- "-r #{File.dirname(__FILE__)} " +
221
- "-r #{application_file}"
222
- else
223
- puts "Redis is not running. Please start it by running 'rake redis:start' command."
224
- end
225
- end
226
-
227
- desc "Stop rhoconnect server"
228
- task :stop => :dtach_installed do
229
- if windows?
230
- File.delete "#{rhoconnect_pid}" if system("FOR /F %A in (#{rhoconnect_pid}) do taskkill /F /PID %A")
231
- else
232
- if File.exist?("#{rhoconnect_pid}")
233
- pid = `cat #{rhoconnect_pid}`
234
- puts "Sending a QUIT signal to process #{pid}"
235
- system "kill -3 #{pid}"
236
- count = 0
237
- loop do
238
- sleep 1
239
- count += 1
240
- exit if !File.exist?("#{rhoconnect_pid}")
241
- break if count >= 5
242
- end
243
- puts "Process #{pid} is still running. Sending a KILL signal to it ..."
244
- system "kill -9 #{pid}"
245
- end
246
- end
247
- end
248
-
249
- desc "Attach to rhoconnect console"
250
- task :attach => :dtach_installed do
251
- system "dtach -a #{rhoconnect_socket}" unless windows?
252
- end
253
-
254
- desc "Launch the web console in a browser - uses :syncserver: in settings.yml"
255
- task :web => :config do
256
- windows? ? sh("start #{$url}") : sh("open #{$url}")
257
- end
258
-
259
- desc "Flush data store - WARNING: THIS REMOVES ALL DATA IN RHOCONNECT"
260
- task :flushdb => :config do
261
- puts "*** WARNING: THIS WILL REMOVE ALL DATA FROM YOUR REDIS STORE ***"
262
- confirm = ask "Are you sure (please answer yes/no)? "
263
- if confirm == 'yes'
264
- Redis.new.flushdb
265
- puts "Database flushed..."
266
- else
267
- puts "Aborted..."
268
- end
269
- end
270
-
271
- desc "Generate a cryptographically secure secret session key"
272
- task :secret do
273
- begin
274
- require 'securerandom'
275
- puts SecureRandom.hex(64)
276
- rescue LoadError
277
- puts "Missing secure random generator. Try running `rake secret` in a rails application instead."
278
- end
279
- end
280
-
281
- desc "Build executable WAR file to be used in Java App Servers"
282
- task :war do
283
- if jruby? then
284
- puts "building the WAR file"
285
- if not File::exists? "config/warble.rb"
286
- puts "generating Warbler's config file"
287
- includeDirs = []
288
- Dir.mkdir('config') if not File.exists?('config')
289
- aFile = File.new("config/warble.rb", "w+")
290
- if aFile
291
- includeDirs = FileList['*'].exclude do |entry|
292
- entry if (not File.directory? entry) || (entry == 'spec')
293
- end
294
- configFile = "Warbler::Config.new do |config|\n" +
295
- "config.dirs = %w(#{includeDirs.join(' ')})\n" +
296
- "config.includes = FileList[\"./*\"]\n" +
297
- "config.excludes = FileList[\"./*.war\",'spec']\nend"
298
- aFile.write("#{configFile}")
299
- aFile.close
300
- else
301
- puts "Unable to create config/warble.rb file!"
302
- end
303
- end
304
- # build the executable WAR using the config/warble.rb file
305
- ENV['BUNDLE_WITHOUT'] = ['development','test'].join(':')
306
- system 'warble executable war'
307
- else
308
- puts "Cannot build WAR files outside of JRuby environment!"
309
- end
310
- end
311
- end
312
-
313
- task :default => ['rhoconnect:spec']
314
-
315
- load File.join(File.dirname(__FILE__),'..','..','tasks','redis.rake')