rhoconnect 3.1.1 → 3.1.2

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 (76) hide show
  1. data/CHANGELOG.md +7 -0
  2. data/Gemfile +3 -3
  3. data/Gemfile.lock +26 -45
  4. data/Rakefile +2 -3
  5. data/bench/bench_runner.rb +37 -37
  6. data/bench/benchapp/Gemfile.lock +4 -5
  7. data/bench/benchapp/config.ru +1 -5
  8. data/bench/benchapp/spec/spec_helper.rb +0 -13
  9. data/bench/blobapp/Gemfile.lock +8 -9
  10. data/bench/blobapp/config.ru +1 -2
  11. data/bench/blobapp/spec/spec_helper.rb +0 -13
  12. data/bench/lib/bench/aws_utils.rb +0 -1
  13. data/bench/spec/bench_spec_helper.rb +1 -1
  14. data/doc/java-plugin.txt +176 -49
  15. data/doc/net-plugin.txt +150 -70
  16. data/doc/plugin-intro.txt +2 -2
  17. data/doc/supported-platforms.txt +12 -11
  18. data/generators/templates/application/config.ru +1 -2
  19. data/generators/templates/application/spec/spec_helper.rb +0 -15
  20. data/install.sh +3 -3
  21. data/installer/unix-like/create_texts.rb +2 -2
  22. data/installer/unix-like/rho_connect_install_constants.rb +3 -3
  23. data/installer/unix-like/rho_connect_install_utilities.rb +0 -1
  24. data/installer/utils/constants.rb +5 -5
  25. data/installer/utils/create_sha1.rb +26 -0
  26. data/installer/utils/delete_from_s3.rb +32 -0
  27. data/installer/utils/download_from_s3.rb +55 -0
  28. data/installer/utils/nix_install_test.rb +29 -19
  29. data/installer/utils/package_upload/repos.rake +52 -40
  30. data/installer/utils/package_upload/s3_upload.rb +7 -28
  31. data/installer/utils/verify_checksum.rb +33 -0
  32. data/installer/windows/rhosync.nsi +5 -5
  33. data/lib/rhoconnect.rb +1 -1
  34. data/lib/rhoconnect/app.rb +0 -3
  35. data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +6 -0
  36. data/lib/rhoconnect/server.rb +27 -24
  37. data/lib/rhoconnect/stats/middleware.rb +13 -8
  38. data/lib/rhoconnect/store.rb +12 -10
  39. data/lib/rhoconnect/version.rb +1 -1
  40. data/rhoconnect.gemspec +2 -2
  41. data/spec/api/admin/api_token_spec.rb +0 -1
  42. data/spec/api/admin/stats_spec.rb +3 -0
  43. data/spec/api/api_helper.rb +2 -2
  44. data/spec/api/user/list_users_spec.rb +2 -2
  45. data/spec/api_token_spec.rb +0 -1
  46. data/spec/app_spec.rb +0 -1
  47. data/spec/bulk_data/bulk_data_spec.rb +0 -1
  48. data/spec/client_spec.rb +0 -1
  49. data/spec/client_sync_spec.rb +0 -2
  50. data/spec/document_spec.rb +0 -1
  51. data/spec/dynamic_adapter_spec.rb +0 -2
  52. data/spec/jobs/bulk_data_job_spec.rb +0 -1
  53. data/spec/jobs/ping_job_spec.rb +0 -1
  54. data/spec/jobs/source_job_spec.rb +0 -1
  55. data/spec/license_spec.rb +0 -1
  56. data/spec/perf/perf_spec_helper.rb +0 -1
  57. data/spec/ping/android_spec.rb +0 -1
  58. data/spec/ping/apple_spec.rb +0 -1
  59. data/spec/ping/blackberry_spec.rb +0 -1
  60. data/spec/read_state_spec.rb +0 -1
  61. data/spec/rhoconnect_spec.rb +0 -1
  62. data/spec/server/server_spec.rb +1 -12
  63. data/spec/source_adapter_spec.rb +0 -1
  64. data/spec/source_spec.rb +0 -1
  65. data/spec/source_sync_spec.rb +0 -1
  66. data/spec/spec_helper.rb +8 -19
  67. data/spec/stats/middleware_spec.rb +9 -0
  68. data/spec/stats/record_spec.rb +1 -0
  69. data/spec/store_spec.rb +6 -1
  70. data/spec/sync_states_spec.rb +0 -1
  71. data/spec/test_methods_spec.rb +0 -1
  72. data/spec/user_spec.rb +0 -1
  73. data/tasks/redis.rake +4 -2
  74. metadata +421 -436
  75. data/bin/thorhoconnect +0 -79
  76. data/installer/utils/package_upload/auto-repo.rb +0 -136
@@ -20,17 +20,11 @@ end #cmd
20
20
 
21
21
  # Makes sure parameters are correctly formed
22
22
  def check_params
23
- if ARGV.size != 2 && ARGV.size != 3
23
+ if ARGV.size != 2
24
24
  puts "Wrong number of arguments (#{ARGV.size} for 2)"
25
25
  exit
26
26
  end #if
27
27
 
28
- if ARGV.size == 3 && ARGV[2] == "true"
29
- @raked = true
30
- else
31
- @raked = false
32
- end #if
33
-
34
28
  if !FileTest.directory?(START_DIR)
35
29
  puts "#{START_DIR} is not a directory."
36
30
  exit
@@ -38,7 +32,6 @@ def check_params
38
32
 
39
33
  begin
40
34
  found = AWS::S3::Bucket.find(BUCKET)
41
- puts "#{BUCKET} is a valid bucket :)" unless @raked
42
35
  rescue => e
43
36
  puts "#{BUCKET} is not a valid bucket."
44
37
  puts e.inspect
@@ -62,7 +55,6 @@ end #establish_s3_connection
62
55
 
63
56
  # Uploads given file to the specified S3 bucket
64
57
  def upload(file)
65
- puts "Uploading #{file} to bucket #{BUCKET}..." unless @raked
66
58
  # Upload the given file
67
59
  AWS::S3::S3Object.store( file,
68
60
  open( file ),
@@ -71,7 +63,6 @@ def upload(file)
71
63
 
72
64
  # display the URL of the file just uploaded
73
65
  puts AWS::S3::S3Object.url_for((file), BUCKET)[/[^?]+/]
74
- puts unless @raked
75
66
  end #upload
76
67
 
77
68
  # Traverses list of file to upload and calls Upload to upload them
@@ -84,27 +75,15 @@ def upload_files
84
75
  next
85
76
  else
86
77
  paths.push(path)
87
- puts path unless @raked
88
78
  number_of_files += 1
89
79
  end
90
80
  end
91
81
 
92
- if !@raked
93
- puts "Would you like to upload these #{number_of_files} files to the #{BUCKET} bucket? (y/n)"
94
- choice = STDIN.gets.strip.downcase
95
- else
96
- choice = 'y'
97
- end #if
98
-
99
- if choice == 'y'
100
- puts "Uploading #{number_of_files} files."
101
- paths.each do |path|
102
- upload path
103
- end #do
104
- puts "#{number_of_files} files uploaded."
105
- else
106
- puts "Exiting."
107
- end #if
82
+ puts "Uploading #{number_of_files} files."
83
+ paths.each do |path|
84
+ upload path
85
+ end #do
86
+ puts "#{number_of_files} files uploaded."
108
87
  end #upload_files
109
88
 
110
89
  # SCRIPT
@@ -134,4 +113,4 @@ rescue => e
134
113
  puts e.inspect
135
114
  puts e.backtrace
136
115
  exit 3
137
- end #begin
116
+ end #begin
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'digest/sha1'
5
+
6
+ if ARGV.length != 2
7
+ puts "Usage: #{$0} checksum_file directory_to_compare"
8
+ exit 1
9
+ end #if
10
+
11
+ def cmd(cmd)
12
+ puts cmd
13
+ system(cmd)
14
+ end #cmd
15
+
16
+ checksum_file = ARGV[0]
17
+ dir_to_compare = ARGV[1]
18
+
19
+ # Downoad Packages from S3
20
+ cmd "ruby ./installer/utils/download_from_s3.rb #{dir_to_compare}"
21
+
22
+ # Create the checksum to compare against the one from the S3 repo
23
+ cmd "ruby ./installer/utils/create_sha1.rb #{dir_to_compare} ."
24
+
25
+ old_sha1 = File.open(checksum_file) { |f| f.readline }
26
+ new_sha1 = File.open('./checksum') { |f| f.readline }
27
+
28
+ if !new_sha1.eql?(old_sha1)
29
+ puts "Checksums do not match!"
30
+ exit 2
31
+ else
32
+ puts "Checksums match!"
33
+ end #if
@@ -99,7 +99,7 @@ section "uninstall"
99
99
  Push "PATH"
100
100
  Push "R"
101
101
  Push "HKLM"
102
- Push "$INSTDIR\redis-2.4.6"
102
+ Push "$INSTDIR\redis-2.4.10"
103
103
  Call un.EnvVarUpdate
104
104
  Pop $R0
105
105
 
@@ -170,25 +170,25 @@ Section "Redis" redisSection
170
170
 
171
171
  SetOutPath $INSTDIR
172
172
 
173
- File /r "redis-2.4.6"
173
+ File /r "redis-2.4.10"
174
174
 
175
175
  ;add to path here
176
176
 
177
177
  Push "PATH"
178
178
  Push "P"
179
179
  Push "HKLM"
180
- Push "$INSTDIR\redis-2.4.6"
180
+ Push "$INSTDIR\redis-2.4.10"
181
181
  Call EnvVarUpdate
182
182
  Pop $R0
183
183
 
184
184
  Push "REDIS_HOME"
185
185
  Push "P"
186
186
  Push "HKLM"
187
- Push "$INSTDIR\redis-2.4.6"
187
+ Push "$INSTDIR\redis-2.4.10"
188
188
  Call EnvVarUpdate
189
189
  Pop $R0
190
190
 
191
- ExecWait '$INSTDIR\redis-2.4.6\redis-service.exe install' $0
191
+ ExecWait '$INSTDIR\redis-2.4.10\redis-service.exe install' $0
192
192
  StrCmp $0 "0" continue wrong
193
193
 
194
194
  wrong:
@@ -178,7 +178,7 @@ module Rhoconnect
178
178
  if secret == '<changeme>'
179
179
  log "*"*60+"\n\n"
180
180
  log "WARNING: Change the session secret in config.ru from <changeme> to something secure."
181
- log " i.e. running `rake secret` in a rails app will generate a secret you could use.\n\n"
181
+ log " i.e. running `rake rhoconnect:secret` in your rhoconnect app directory will generate a secret you could use.\n\n"
182
182
  log "*"*60
183
183
  end
184
184
  end
@@ -10,9 +10,6 @@ module Rhoconnect
10
10
  class << self
11
11
  def create(fields={})
12
12
  fields[:id] = fields[:name]
13
- begin
14
- require under_score(fields[:name])
15
- rescue Exception; end
16
13
  super(fields)
17
14
  end
18
15
  end
@@ -16,6 +16,12 @@ module Rhoconnect
16
16
  end
17
17
 
18
18
  def query(params=nil)
19
+ if @source.simulate_time > 0
20
+ #for i in 1..10
21
+ # RestClient.get('www.google.com')
22
+ #end
23
+ sleep @source.simulate_time
24
+ end
19
25
  Rhoconnect::Store.lock(lock_name,1) do
20
26
  @result = Rhoconnect::Store.get_data(db_name)
21
27
  end
@@ -25,16 +25,39 @@ module Rhoconnect
25
25
  set :public_folder, "#{libdir}/server/public"
26
26
  set :static, true
27
27
  set :stats, false
28
-
29
28
  # default secret
30
- @@secret = '<changeme>'
29
+ @secret = '<changeme>'
31
30
 
32
31
  # Setup route and mimetype for bulk data downloads
33
32
  # TODO: Figure out why "mime :data, 'application/octet-stream'" doesn't work
34
33
  Rack::Mime::MIME_TYPES['.data'] = 'application/octet-stream'
35
34
 
36
35
  include Rhoconnect
37
-
36
+
37
+ # Set rhoconnect middleware
38
+ set :use_middleware, Proc.new {
39
+ return false if @middleware_configured # Middleware might be configured only once!
40
+
41
+ use XDomainSessionWrapper
42
+ use Rack::Cors do |cfg|
43
+ cfg.allow do |allow|
44
+ allow.origins /.*/
45
+ allow.resource '/application', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
46
+ allow.resource '/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
47
+ allow.resource '/api/application', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
48
+ allow.resource '/api/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
49
+ end
50
+ end
51
+ use Rhoconnect::BodyContentTypeParser
52
+ use Rhoconnect::Stats::Middleware
53
+ Rhoconnect::Server.set :secret, @secret unless settings.respond_to?(:secret)
54
+ use Rack::Session::Cookie,
55
+ :key => 'rhoconnect_session', :expire_after => Rhoconnect.cookie_expire,
56
+ :secret => Rhoconnect::Server.secret
57
+
58
+ @middleware_configured ||= true
59
+ }
60
+
38
61
  helpers do
39
62
  def request_action
40
63
  request.env['PATH_INFO'].split('/').last
@@ -177,34 +200,14 @@ module Rhoconnect
177
200
  end
178
201
  end
179
202
 
180
- # TODO: Load middleware statically
181
- # hook into new so we can enable middleware
182
203
  def self.new
183
- use XDomainSessionWrapper
184
- use Rack::Cors do |cfg|
185
- cfg.allow do |allow|
186
- allow.origins /.*/
187
- allow.resource '/application', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
188
- allow.resource '/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
189
- allow.resource '/api/application', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
190
- allow.resource '/api/application/*', :headers => :any, :methods => [:get, :post, :put, :delete], :credentials => true
191
- end
192
- end
193
- use Rhoconnect::BodyContentTypeParser
194
-
195
204
  if settings.respond_to?(:stats) and settings.send(:stats) == true
196
- use Rhoconnect::Stats::Middleware
197
205
  Rhoconnect.stats = true
198
206
  else
199
207
  Rhoconnect::Server.disable :stats
200
208
  Rhoconnect.stats = false
201
209
  end
202
-
203
- Rhoconnect::Server.set :secret, @@secret unless settings.respond_to?(:secret)
204
- use Rack::Session::Cookie,
205
- :key => 'rhoconnect_session',
206
- :expire_after => Rhoconnect.cookie_expire,
207
- :secret => Rhoconnect::Server.secret
210
+ settings.use_middleware
208
211
  super
209
212
  end
210
213
 
@@ -6,14 +6,19 @@ module Rhoconnect
6
6
  end
7
7
 
8
8
  def call(env)
9
- start = Time.now.to_f
10
- status, headers, body = @app.call(env)
11
- finish = Time.now.to_f
12
- metric = "http:#{env['REQUEST_METHOD']}:#{env['PATH_INFO']}"
13
- source_name = env['rack.request.query_hash']["source_name"] if env['rack.request.query_hash']
14
- metric << ":#{source_name}" if source_name
15
- Record.save_average(metric,finish - start)
16
- [status, headers, body]
9
+ if Rhoconnect.stats || Rhoconnect::Server.stats
10
+ start = Time.now.to_f
11
+ status, headers, body = @app.call(env)
12
+ finish = Time.now.to_f
13
+ metric = "http:#{env['REQUEST_METHOD']}:#{env['PATH_INFO']}"
14
+ source_name = env['rack.request.query_hash']["source_name"] if env['rack.request.query_hash']
15
+ metric << ":#{source_name}" if source_name
16
+ Record.save_average(metric,finish - start)
17
+ [status, headers, body]
18
+ else
19
+ status, headers, body = @app.call(env)
20
+ [status, headers, body]
21
+ end
17
22
  end
18
23
  end
19
24
  end
@@ -299,16 +299,18 @@ module Rhoconnect
299
299
  data = Store.db.zrange(dockey, 0, -1)
300
300
  ret = []
301
301
  keys = []
302
- scores = []
303
- data.each do |zsetkey|
304
- obj_hash = Store.get_data zsetkey
305
- score,key,objkey = getelement(zsetkey)
306
- if scores[-1] != score
307
- ret << obj_hash
308
- keys << key
309
- scores << score
310
- else
311
- ret[-1].merge!(obj_hash)
302
+ unless data.nil?
303
+ scores = []
304
+ data.each do |zsetkey|
305
+ obj_hash = Store.get_data zsetkey
306
+ score,key,objkey = getelement(zsetkey)
307
+ if scores[-1] != score
308
+ ret << obj_hash
309
+ keys << key
310
+ scores << score
311
+ else
312
+ ret[-1].merge!(obj_hash)
313
+ end
312
314
  end
313
315
  end
314
316
  [ret, keys]
@@ -1,3 +1,3 @@
1
1
  module Rhoconnect
2
- VERSION = '3.1.1'
2
+ VERSION = '3.1.2'
3
3
  end
@@ -37,14 +37,14 @@ Gem::Specification.new do |s|
37
37
  ]
38
38
 
39
39
  s.add_dependency('bundler', '~> 1.0')
40
- s.add_dependency("rack", '~> 1.3.6')
40
+ # s.add_dependency("rack", '~> 1.4.0')
41
41
  s.add_dependency("sinatra", '~> 1.3')
42
42
  s.add_dependency('rake', '~> 0.9.2')
43
43
  s.add_dependency('json', '~> 1.6.0')
44
44
  s.add_dependency('rubyzip', '~> 0.9.4')
45
45
  s.add_dependency('uuidtools', '>= 2.1.1')
46
46
  s.add_dependency('redis', '>= 2.2.0')
47
- s.add_dependency('resque', '~> 1.19.0')
47
+ s.add_dependency('resque', '~> 1.20.0')
48
48
  s.add_dependency('rest-client', '~> 1.6.1')
49
49
  s.add_dependency('templater', '~> 1.0.0')
50
50
  end
@@ -1,5 +1,4 @@
1
1
  require File.join(File.dirname(__FILE__),'..','..','spec_helper')
2
- require File.join(File.dirname(__FILE__), '..','..','support', 'shared_examples')
3
2
 
4
3
  describe "ApiToken" do
5
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
@@ -9,10 +9,12 @@ describe "RhoconnectApiStats" do
9
9
 
10
10
  before(:each) do
11
11
  Rhoconnect::Server.set :stats, true
12
+ Rhoconnect.stats = true
12
13
  end
13
14
 
14
15
  after(:each) do
15
16
  Rhoconnect::Server.set :stats, false
17
+ Rhoconnect.stats = false
16
18
  end
17
19
 
18
20
  it "should retrieve metric names" do
@@ -60,6 +62,7 @@ describe "RhoconnectApiStats" do
60
62
 
61
63
  it "should raise error if stats not enabled" do
62
64
  Rhoconnect::Server.set :stats, false
65
+ Rhoconnect.stats = false
63
66
  post "/api/admin/stats", {
64
67
  :api_token => @api_token,
65
68
  :metric => 'foo'
@@ -1,12 +1,12 @@
1
1
  require 'rack/test'
2
2
  require 'rspec'
3
3
 
4
- require File.join(File.dirname(__FILE__),'..','..','lib','rhoconnect','server.rb')
5
4
  require File.join(File.dirname(__FILE__),'..','spec_helper')
6
- require File.join(File.dirname(__FILE__), '..', 'support', 'shared_examples')
5
+ require File.join(File.dirname(__FILE__),'..','..','lib','rhoconnect','server.rb')
7
6
 
8
7
  def app
9
8
  Rhoconnect::Server.set :stats, false
9
+ Rhoconnect.stats = false
10
10
  @app ||= Rhoconnect::Server.new
11
11
  end
12
12
 
@@ -8,7 +8,7 @@ describe "RhoconnectApiListUsers" do
8
8
  post "/api/user/create_user", params
9
9
  last_response.should be_ok
10
10
  post "/api/user/list_users", {:api_token => @api_token}
11
- JSON.parse(last_response.body).should == ["testuser", "testuser1"]
11
+ JSON.parse(last_response.body).sort.should == ["testuser", "testuser1"].sort
12
12
  end
13
13
 
14
14
  it "should handle empty user's list" do
@@ -23,7 +23,7 @@ describe "RhoconnectApiListUsers" do
23
23
  post "/api/user/create_user", params
24
24
  last_response.should be_ok
25
25
  post "/api/list_users", {:api_token => @api_token}
26
- JSON.parse(last_response.body).should == ["testuser", "testuser1"]
26
+ JSON.parse(last_response.body).sort.should == ["testuser", "testuser1"].sort
27
27
  last_response.headers['Warning'].index('deprecated').should_not == nil
28
28
  end
29
29
  end
@@ -1,5 +1,4 @@
1
1
  require File.join(File.dirname(__FILE__),'spec_helper')
2
- require File.join(File.dirname(__FILE__), 'support', 'shared_examples')
3
2
 
4
3
  describe "ApiToken" do
5
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
@@ -1,5 +1,4 @@
1
1
  require File.join(File.dirname(__FILE__),'spec_helper')
2
- require File.join(File.dirname(__FILE__), 'support', 'shared_examples')
3
2
 
4
3
  describe "App" do
5
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => false do
@@ -1,5 +1,4 @@
1
1
  require File.join(File.dirname(__FILE__),'..','spec_helper')
2
- require File.join(File.dirname(__FILE__), '..', 'support', 'shared_examples')
3
2
 
4
3
  describe "BulkData" do
5
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
@@ -1,5 +1,4 @@
1
1
  require File.join(File.dirname(__FILE__),'spec_helper')
2
- require File.join(File.dirname(__FILE__), 'support', 'shared_examples')
3
2
 
4
3
  STATS_RECORD_RESOLUTION = 2 unless defined? STATS_RECORD_RESOLUTION
5
4
  STATS_RECORD_SIZE = 8 unless defined? STATS_RECORD_SIZE
@@ -1,6 +1,4 @@
1
1
  require File.join(File.dirname(__FILE__),'spec_helper')
2
- require File.join(File.dirname(__FILE__), 'support', 'shared_examples')
3
-
4
2
 
5
3
  describe "ClientSync" do
6
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
@@ -1,5 +1,4 @@
1
1
  require File.join(File.dirname(__FILE__),'spec_helper')
2
- require File.join(File.dirname(__FILE__), 'support', 'shared_examples')
3
2
 
4
3
  describe "Document" do
5
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do