rhoconnect 3.0.2 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/doc/client.txt CHANGED
@@ -121,6 +121,9 @@ Rhoconnect Client is a library to add sync data capability to your applications.
121
121
  //find all objects by set of properties
122
122
  - (NSMutableArray *) find_all: (NSDictionary *)cond;
123
123
 
124
+ //run sql query - result is array of hashes (string)
125
+ - (NSMutableArray *) find_bysql: (NSString*)sql args: (NSArray*) sql_args;
126
+
124
127
  //save object represents by data to database
125
128
  - (void) save: (NSDictionary *)data;
126
129
 
@@ -238,6 +241,13 @@ To create schema model tables edit database schema file:
238
241
 
239
242
  [sclient addObjectNotify: [[item objectForKey:@"source_id"] intValue] szObject:[item valueForKey:@"object"] ];
240
243
 
244
+ #### Run SQL query on Schema model
245
+
246
+ :::cplusplus
247
+ NSArray* params = [NSArray arrayWithObjects: @"Apple", nil];
248
+ NSMutableArray* items2 = [product find_bysql:@"SELECT * FROM Product_s WHERE name=?" args: params];
249
+ //items2 is an Array of NSDictionary* (NSString* to NSString*)
250
+
241
251
  ## Android Java Client
242
252
 
243
253
  ### Getting started
data/doc/deploying.txt CHANGED
@@ -80,3 +80,114 @@ Deploying the WAR container varies per J2EE App Server, for JBoss it is necessar
80
80
  to place the WAR file into the server's deploy directory.
81
81
 
82
82
  We recommend using the [phusion passenger](http://modrails.com/index.html) stack for deploying an on-premise RhoConnect application. Please refer to the [section on rack applications](http://modrails.com/documentation/Users%20guide%20Apache.html#_deploying_a_rack_based_ruby_application) for information on deploying a RhoConnect sinatra application.
83
+
84
+ ## Deploying packaged RhoConnect software on Linux servers
85
+
86
+ You can create RhoConnect production environment on Linux servers by installing software packages
87
+ for Ubuntu and Cent OS respectively. At this moment supported formats are Debian (deb) and Red Hat (rpm) packages.
88
+
89
+ Every package provides the following components:
90
+
91
+ * Ruby 1.8.7, Ruby Enterprise Edition 2011.03
92
+
93
+ * Nginx HTTP server (v. 1.0.6)
94
+
95
+ * Passenger (v. 3.0.9)
96
+
97
+ * Redis data store (v. 2.2.14)
98
+
99
+ * Rhoconnect gem with all required dependencies
100
+
101
+ In addition, RPM package provides latest Sqlite3 headers and binaries, because standard Cent OS (5.x) libraries for Sqlite3 outdated.
102
+
103
+ To create Debian package you need to have development version of RhoConnect software on Ubuntu (server, desktop. virtual machine) and execute the following rake task:
104
+ <pre>
105
+ rake build:deb
106
+ </pre>
107
+
108
+ To create RPM package you need to have development version of RhoConnect software on Cent OS and execute the following rake task:
109
+ <pre>
110
+ rake build:rpm
111
+ </pre>
112
+
113
+ After task is compete, either rhoconnect-x.y.z_all.deb or rhoconnect-x.y.z.noarch.rpm package will be created in the pkg/ directory. In the future, pre-built packages for latest RhoConnect software will be available for direct download.
114
+
115
+ To install Deb package on Ununtu server (Ubuntu 11.4 server, Amazon EC2 Ubuntu server), you should run the following command:
116
+ <pre>
117
+ dpkg -i rhoconnect-x.y.z_all.deb
118
+ </pre>
119
+
120
+ To install RPM package on Cent OS server (tested for 5.x, 6.x, and basic 64-bit Amazon Linux AMI 2011.09):
121
+ <pre>
122
+ rpm -i rhoconnect-x.y.z.noarch.rpm
123
+ </pre>
124
+
125
+ In process of installation many of above components will be downloaded, configured and compiled on target platform.
126
+ For practical usage, you should be familiar with and understand some of the provided settings.
127
+
128
+ ### Ruby Enterprise Edition
129
+ By defaut all ruby binaries, libraries, and gems are installed into <b>/opt/rhoconnect</b> directory.
130
+ You may wish to have access to these items by adding to bash configuration files this command:
131
+ <pre>
132
+ export PATH=/opt/rhoconnect/bin:$PATH
133
+ </pre>
134
+
135
+ ### Redis
136
+ Rhoconnect installer configured redis server with the following settings:
137
+
138
+ * Redis configuration file <b>/opt/rhoconnect/etc/redis.conf</b> has the following properties:
139
+ <pre>
140
+ daemonize yes
141
+ pidfile /var/run/redis.pid
142
+ logfile /var/log/redis.log
143
+ </pre>
144
+
145
+ * Redis logrotate settings for <b>/var/log/redis.log</b> files defined in <b>/etc/logrotate.d/redis</b> as:
146
+ <pre>
147
+ /var/log/redis.log {
148
+ rotate 3
149
+ missingok
150
+ notifempty
151
+ size 250k
152
+ create 0644 root root
153
+ compress
154
+ }
155
+ </pre>
156
+
157
+ * Redis start-up script <b>/etc/init.d/redis</b>. You can start/stop redis server by running the following commands:
158
+ <pre>
159
+ /etc/init.d/redis {start|stop}
160
+ </pre>
161
+
162
+ ### Nginx
163
+ Installer compiled Nginx web server (to <b>/opt/nginx</b> directory) with the following configuration files:
164
+
165
+ * Nginx start-up script (<b>/etc/init.d/nginx</b>)
166
+
167
+ * Nginx logrotate settings (<b>/etc/logrotate.d/nginx</b>)
168
+
169
+ * Nginx configuration file (<b>/opt/nginx/conf/nginx.conf</b>)
170
+
171
+ * Passenger configuration file and virtual host template for RhoConnect application
172
+ (<b>/opt/nginx/conf/conf.d/passenger.conf</b> and <b>/opt/nginx/conf/conf.d/rhoconnect.conf</b>)
173
+
174
+ * user <b>nginx</b> added to system users list
175
+
176
+
177
+ ### As a bonus :-)
178
+ Installer also created and configured RhoConnect <b>rhoapp</b> application in <b>/opt/nginx/html</b> directory.
179
+ To test it you need to as a root user start redis and nginx servers:
180
+ <pre>
181
+ /etc/init.d/redis start
182
+ /etc/init.d/nginx start
183
+ </pre>
184
+
185
+ And verify that it's up and running by visiting application web console in your browser:
186
+ <pre>
187
+ http://server_ip_address/console/
188
+ </pre>
189
+
190
+
191
+
192
+
193
+
data/doc/heroku-addon.txt CHANGED
@@ -4,7 +4,6 @@ Heroku Addon
4
4
  RhoConnect is now available for those using <a href='http://heroku.com' target='_blank'>Heroku</a> as an addon.
5
5
 
6
6
 
7
-
8
7
  Adding RhoConnect from Heroku
9
8
  -----------------------
10
9
  To use RhoConnect from Heroku, install the RhoConnect add-on:
@@ -12,14 +11,14 @@ To use RhoConnect from Heroku, install the RhoConnect add-on:
12
11
  :::term
13
12
  $ heroku addons:add rhoconnect
14
13
 
15
- ###Setup
14
+ ##Setup
16
15
 
17
16
  From inside your heroku account, setup the url to your backend service that RhoConnect will connect to.
18
17
 
19
18
  First, click the addons drop down and select rhoconnect.
20
19
  <p><img src='https://s3.amazonaws.com/rhodocs/rhoconnect-service/addon_rhoconnect.png' width="479" height="319"/></p>
21
20
 
22
- You will be redirected to the admin console of your RhoConnect instance where you can set the backend app url. Select Backend App Url from the right menu.
21
+ You will be redirected to the admin console of your RhoConnect instance where you can set the backend app url. Select Backend App URL from the right menu.
23
22
  <p><img src='https://s3.amazonaws.com/rhodocs/rhoconnect-service/console.png' width="800" height="280"/></p>
24
23
 
25
24
 
@@ -31,24 +30,26 @@ Connecting a simple rhodes app
31
30
  -------------------------------
32
31
  To view a full tutorial about creating a rhodes application and the features of rhodes see [Rhodes framework](http://docs.rhomobile.com/rhodes/tutorial).
33
32
 
34
- ###Gem installation:
33
+ ##Gem installation:
35
34
 
36
- :::ruby
37
- [sudo] gem install rhodes
35
+ :::term
36
+ $ [sudo] gem install rhodes
38
37
 
39
38
  Next using the rhodes gem you can create a rhodes app.
40
39
 
41
- :::ruby
42
- rhodes app sample_app url_of_rhoconnect_instance
40
+ :::term
41
+ $ rhodes app sample_app url_of_rhoconnect_instance
43
42
 
44
43
  To get the value for the url_of_rhoconnect_instance argument, go to the RhoConnect console and click on the right Backend App URL link. From there you can copy the syncserver url.
45
44
 
46
45
  <p><img src='https://s3.amazonaws.com/rhodocs/rhoconnect-service/console.png' width="800" height="280"/></p>
47
46
 
48
47
 
49
- ----
50
- [RhoConnect Introduction](http://docs.rhomobile.com/rhosync/introduction)
48
+ ##Other Resources
49
+ [RhoConnect Introduction](http://docs.rhomobile.com/rhoconnect/introduction)
50
+
51
+ [RhoConnect Installation](http://docs.rhomobile.com/rhoconnect/install)
51
52
 
52
- [RhoConnect Installation](http://docs.rhomobile.com/rhosync/install)
53
+ [RhoConnect Tutorial](http://docs.rhomobile.com/rhoconnect/tutorial)
53
54
 
54
- [RhoConnect Tutorial](http://docs.rhomobile.com/rhosync/tutorial)
55
+ [Using RhoConnect from Rails/Sinatra](http://docs.rhomobile.com/rhoconnect/rails-plugin)
data/doc/install.txt CHANGED
@@ -3,9 +3,9 @@ Installing RhoConnect
3
3
 
4
4
  ## Windows
5
5
 
6
- If you're running Windows, download the latest [RhoConnect windows installer](http://github.com/rhomobile/rhoconnect/downloads). This installs the [Ruby stack](http://www.ruby-lang.org/en/), [Redis](http://redis.io/), [Apache](http://httpd.apache.org/), and a default RhoConnect application so you don't need to generate one by hand.
6
+ If you're running Windows, download the latest [RhoStudio for Windows](http://rhomobile.com/rhostudio-windows). This installs the [Ruby stack](http://www.ruby-lang.org/en/), [Redis](http://redis.io/), [RhoConnect](/rhoconnect/introduction) and [Rhodes](/rhodes/introduction).
7
7
 
8
- Your RhoConnect application folder will be located in C:\RhoConnect\rhoconnect by default so you can skip to the [generating a source instructions](/rhoconnect/command-line#rhoconnect-generator) in the next section.
8
+ You can now skip to the [generating a new application instructions](/rhoconnect/command-line#generate-an-application) in the next section.
9
9
 
10
10
  ## Mac OS / Linux
11
11
 
@@ -17,7 +17,7 @@ Your RhoConnect application folder will be located in C:\RhoConnect\rhoconnect b
17
17
 
18
18
  3. Ruby Web Server - We test with [thin](http://code.macournoyer.com/thin/), and [passenger](http://www.modrails.com/). WEBrick, the web server that ships with ruby, is known to cause issues with HTTP headers/cookies and is ***not*** recommended.
19
19
 
20
- 4. [Redis 2.2.14+](http://redis.io/) - RhoConnect includes a simple [rake task](/rhoconnect/command-line#rake-tasks) `redis:install` to install redis, covered in the [Rake Tasks section](rhoconnect/command-line#rake-tasks). Alternatively, you can [install redis directly](http://redis.io/download).
20
+ 4. [Redis 2.2.14+](http://redis.io/) - RhoConnect includes a simple [rake task](/rhoconnect/command-line#rake-tasks) `redis:install` to install redis, covered in the [Rake Tasks section](/rhoconnect/command-line#rake-tasks). Alternatively, you can [install redis directly](http://redis.io/download).
21
21
 
22
22
  ### Installing RhoConnect Gem
23
23
 
data/doc/net-plugin.txt CHANGED
@@ -1,9 +1,9 @@
1
1
  rhoconnect.NET
2
2
  ===
3
3
 
4
- A .NET 4 framework library for the [Rhoconnect](http://rhomobile.com/products/rhosync) App Integration Server.
4
+ A .NET 4 framework library for the [Rhoconnect](http://rhomobile.com/products/rhoconnect) App Integration Server.
5
5
 
6
- Using rhoconnect.NET, your [ASP.NET MVC3](http://www.asp.net/mvc/mvc3) application's data will transparently synchronize with a mobile application built on the [Rhodes framework](http://rhomobile.com/products/rhodes), or any of the available [Rhoconnect clients](http://rhomobile.com/products/rhosync/).
6
+ Using rhoconnect.NET, your [ASP.NET MVC3](http://www.asp.net/mvc/mvc3) application's data will transparently synchronize with a mobile application built on the [Rhodes framework](http://rhomobile.com/products/rhodes), or any of the available [Rhoconnect clients](http://rhomobile.com/products/rhoconnect/).
7
7
 
8
8
  ## Getting started
9
9
 
@@ -183,7 +183,7 @@ Each of the above methods have a partition key supplied with the CRUD request. T
183
183
  For example, the `Product` model above might have a relationship to the User model. This provides us a simple way to organize the `Product` dataset for rhoconnect by reusing this relationship.
184
184
  In this case, your implementation might filter out data on a per user basis.
185
185
 
186
- For more information about Rhoconnect partitions, please refer to the [Rhoconnect docs](http://docs.rhomobile.com/rhosync/source-adapters#data-partitioning).
186
+ For more information about Rhoconnect partitions, please refer to the [Rhoconnect docs](http://docs.rhomobile.com/rhoconnect/source-adapters#data-partitioning).
187
187
 
188
188
  ## Implementing MVC callbacks
189
189
  All of the above methods are necessary to establish the communication from the Rhoconnect instance to your ASP.NET MVC application.
data/doc/rails-plugin.txt CHANGED
@@ -1,9 +1,9 @@
1
1
  rhoconnect-rb
2
2
  ===
3
3
 
4
- A ruby library for the [Rhoconnect](http://rhomobile.com/products/rhosync) App Integration Server.
4
+ A ruby library for the [Rhoconnect](http://rhomobile.com/products/rhoconnect) App Integration Server.
5
5
 
6
- Using rhoconnect-rb, your application's model data will transparently synchronize with a mobile application built on the [Rhodes framework](http://rhomobile.com/products/rhodes), or any of the available [Rhoconnect clients](http://rhomobile.com/products/rhosync/). This client includes built-in support for [ActiveRecord](http://ar.rubyonrails.org/) and [DataMapper](http://datamapper.org/) models.
6
+ Using rhoconnect-rb, your application's model data will transparently synchronize with a mobile application built on the [Rhodes framework](http://rhomobile.com/products/rhodes), or any of the available [Rhoconnect clients](http://rhomobile.com/products/rhoconnect/). This client includes built-in support for [ActiveRecord](http://ar.rubyonrails.org/) and [DataMapper](http://datamapper.org/) models.
7
7
 
8
8
  ## Getting started
9
9
 
@@ -13,7 +13,7 @@ Load the `rhoconnect-rb` library:
13
13
 
14
14
  Note, if you are using datamapper, install the `dm-serializer` library and require it in your application. `rhoconnect-rb` depends on this utility to interact with Rhoconnect applications using JSON.
15
15
 
16
- ## Usage
16
+ ## Setup the Model
17
17
  Now include Rhoconnect::Resource in a model that you want to synchronize with your mobile application:
18
18
 
19
19
  class Product < ActiveRecord::Base
@@ -27,7 +27,7 @@ Or, if you are using DataMapper:
27
27
  include Rhoconnect::Resource
28
28
  end
29
29
 
30
- ### Partitioning Datasets
30
+ ## Partitioning Datasets
31
31
 
32
32
  Next, your models will need to declare a partition key for `rhoconnect-rb`. This partition key is used by `rhoconnect-rb` to uniquely identify the model dataset when it is stored in a rhoconnect instance. It is typically an attribute on the model or related model. `rhoconnect-rb` supports two types of partitions:
33
33
 
@@ -52,9 +52,9 @@ Now all of the `Product` data synchronized by rhoconnect will organized by `self
52
52
  :app
53
53
  end
54
54
 
55
- For more information about Rhoconnect partitions, please refer to the [Rhoconnect docs](http://docs.rhomobile.com/rhosync/source-adapters#data-partitioning).
55
+ For more information about Rhoconnect partitions, please refer to the [Rhoconnect docs](http://docs.rhomobile.com/rhoconnect/source-adapters#data-partitioning).
56
56
 
57
- ### Querying Datasets
57
+ ## Querying Datasets
58
58
 
59
59
  `rhoconnect-rb` installs a `/rhoconnect/query` route in your application which the Rhoconnect instance invokes to query the dataset for the dataset you want to synchronize. This route is mapped to a `rhoconnect_query` method in your model. This method should return a collection of objects:
60
60
 
@@ -74,7 +74,7 @@ For more information about Rhoconnect partitions, please refer to the [Rhoconnec
74
74
 
75
75
  In this example, `self.rhoconnect_query` returns a list of products where the partition string (provided by the rhoconnect instance) matches the `user_id` field in the products table.
76
76
 
77
- ### Configuration and Authentication
77
+ ## Configuration and Authentication
78
78
 
79
79
  Configure Rhoconnect in an initializer like `config/initializers/rhoconnect.rb` (for Rails), or directly in your application (i.e. Sinatra). Here you will setup the rhoconnect uri (the location of your rhoconnect instance), and app\_endpoint (the location of your ruby app):
80
80
 
@@ -109,6 +109,17 @@ Example with authentication:
109
109
  }
110
110
  end
111
111
 
112
+ Example using the [RhoConnect Heroku Addon](/rhoconnect/heroku-addon):
113
+
114
+ If you're using the [RhoConnect Heroku Addon](/rhoconnect/heroku-addon), then you can omit the config.uri (it is added for you):
115
+
116
+ Rhoconnect.configure do |config|
117
+ config.token = "secrettoken"
118
+ config.authenticate = lambda { |credentials|
119
+ User.authenticate(credentials[:login], credentials[:password])
120
+ }
121
+ end
122
+
112
123
 
113
124
  ## Meta
114
125
  Created and maintained by Lucas Campbell-Rossen, Vladimir Tarasov and Lars Burgess.
data/doc/web-console.txt CHANGED
@@ -32,4 +32,4 @@ If you want to disable this web interface, you can do so by editing the rackup f
32
32
 
33
33
  Here is a screenshot of the web console:
34
34
 
35
- <img src="https://img.skitch.com/20110110-f81w9mr8ujegyep543bjsrkigj.jpg"/>
35
+ <img src="https://img.skitch.com/20111007-c7agn6jqxnq2nne5srq1ijxk4g.png"/>
@@ -11,7 +11,6 @@ module Constants
11
11
  REMOTE_HOME = '/home/ubuntu'
12
12
  PEM_FILE = 'alexdevkey.pem'
13
13
  SSH_KEY = "#{HOME_DIR}/.ssh/#{PEM_FILE}"
14
- SCP_KEY = "#{HOME_DIR}/.scp/#{PEM_FILE}"
15
14
  ACCESS_KEY_FILE = "#{HOME_DIR}/.ec2/credentials"
16
15
  UBUNTU_STACK = { :image_id => 'ami-3d491a78',
17
16
  :flavor_id => 'm1.small',
@@ -25,8 +24,8 @@ module Constants
25
24
  :groups => 'load-test',
26
25
  :user => 'root'}
27
26
 
28
- STACKS = [ UBUNTU_STACK ]
29
- # CENTOS_STACK ]
27
+ STACKS = [ UBUNTU_STACK,
28
+ CENTOS_STACK ]
30
29
 
31
30
  DEB_DEPS = [ "build-essential",
32
31
  "zlib1g-dev",
@@ -32,21 +32,23 @@ def compile_stack_info
32
32
  @stack.delete :user
33
33
 
34
34
  # This part of the package name will always be the same
35
- local_file = "#{`pwd`.strip}/../../pkg/"
35
+ local_file = "#{`pwd`.strip}/pkg/"
36
36
 
37
37
  # Append the rest of the file name according to distribution
38
38
  if @user == 'ubuntu'
39
- @dist = { :package => "rhoconnect_#{Constants::RC_VERSION}_all.deb",
40
- :local_file => "#{local_file}rhoconnect_#{Constants::RC_VERSION}_all.deb",
41
- :pkg_mgr => 'dpkg',
42
- :pkg_repo => 'apt-get -y',
43
- :deps => Constants::DEB_DEPS }
39
+ @dist = { :package => "rhoconnect_#{Constants::RC_VERSION}_all.deb",
40
+ :local_file => "#{local_file}rhoconnect_#{Constants::RC_VERSION}_all.deb",
41
+ :pkg_mgr => 'dpkg',
42
+ :pkg_type => 'DEB',
43
+ :pkg_repo => 'apt-get -y',
44
+ :deps => Constants::DEB_DEPS }
44
45
  elsif @user == 'root'
45
- @dist = { :package => "rhoconnect_#{Constants::RC_VERSION}_noarch.rpm",
46
- :local_file => "#{local_file}rhoconnect_#{Constants::RC_VERSION}_noarch.rpm",
47
- :pkg_mgr => 'rpm',
48
- :pkg_repo => 'yes | yum',
49
- :deps => Constants::RPM_DEPS }
46
+ @dist = { :package => "rhoconnect-#{Constants::RC_VERSION}.noarch.rpm",
47
+ :local_file => "#{local_file}rhoconnect-#{Constants::RC_VERSION}.noarch.rpm",
48
+ :pkg_mgr => 'rpm',
49
+ :pkg_type => 'RPM',
50
+ :pkg_repo => 'yes | yum',
51
+ :deps => Constants::RPM_DEPS }
50
52
  else
51
53
  puts "Incorrect user name"
52
54
  exit
@@ -122,7 +124,8 @@ end #create_scp_connection
122
124
  # transfer
123
125
  # transfers given data to remote machine via scp
124
126
  def transfer(local_data, remote_data)
125
- puts "Attempting to establish SCP connection..."
127
+ puts "Attempting file transfer via SCP"
128
+ puts "Transferring #{local_data} to #{remote_data}..."
126
129
  @scp.upload( local_data, remote_data ) do |cd, name, sent, total|
127
130
  print "\r#{name}: #{(sent.to_f * 100 / total.to_f).to_i}%"
128
131
  end #do
@@ -132,7 +135,7 @@ end #establish_scp_connection
132
135
  # transfer_rhoconnect
133
136
  # Transfers the rhoconnect package over SCP
134
137
  def transfer_rhoconnect
135
- transfer @dist[:local_file], Constants::REMOTE_HOME
138
+ transfer @dist[:local_file], @dist[:remote_home]
136
139
  end #transfer_rhoconnect
137
140
 
138
141
  # destroy_ec2_instance
@@ -163,8 +166,20 @@ def install_package
163
166
  end #install_package
164
167
 
165
168
  def start_servers
166
- ssh_cmd "sudo /etc/init.d/redis start"
167
- ssh_cmd "sudo /etc/init.d/nginx start"
169
+ attempts = 0
170
+ while @ssh.run("pgrep redis")[0].stdout.strip == ""
171
+ ssh_cmd "sudo /etc/init.d/redis start"
172
+ attempts += 0
173
+ end #while
174
+ puts "Redis start took #{attempts} attempts"
175
+ puts
176
+ attempts = 0
177
+ while @ssh.run("pgrep nginx")[0].stdout.strip == ""
178
+ ssh_cmd "sudo /etc/init.d/nginx start"
179
+ attempts += 0
180
+ end #while
181
+ puts "Nginx start took #{attempts} attempts."
182
+ puts
168
183
  puts "Waiting #{Constants::SLEEP} seconds for servers to initialize"
169
184
  Constants::SLEEP.times do
170
185
  sleep 1
@@ -198,51 +213,35 @@ def compute_time(start_time, end_time)
198
213
  time_units = 'seconds'
199
214
  end #if
200
215
 
201
- "Test completed in #{time_delta} #{time_units}"
216
+ "\nTest completed in #{time_delta} #{time_units}\n"
202
217
  end #compute_time
203
218
 
204
219
  # SCRIPT
205
220
 
206
- ### This part has been set as a dependency in the :test rake task
207
- # Create Packages
208
-
209
- # Creating debian package
210
- #cmd "sudo rake build:deb"
211
- # Make sure package was created successfully
212
- #if $? != 0
213
- # puts "Debian package was not created successfully" +
214
- # "Exiting..."
215
- # exit 1
216
- #end #if
217
-
218
- # Keep commented until running on a machine with rpm
219
- # Creating RPM package
220
- #cmd "sudo rake build:rpm"
221
- # Make sure package was created successfully
222
- #if $? != 0
223
- # puts "RPM package was not created successfully" +
224
- # "Exiting..."
225
- # exit 1
226
- #end #if
227
-
228
221
  # Test Package installations
229
- start_time = Time.now
230
222
  Constants::STACKS.each do |stack|
223
+ start_time = Time.now
231
224
  begin
232
225
  @stack = stack
233
226
  compile_stack_info
227
+ puts
228
+ puts "================================================"
229
+ puts "Now starting test of #{@dist[:pkg_type]} package"
230
+ puts "================================================"
231
+ puts
234
232
 
235
233
  create_ec2_instance
236
234
 
237
235
  # Establish connections
238
236
  establish_ssh_connection
237
+ @dist[:remote_home] = @ssh.run("echo ~")[0].stdout.strip
239
238
  establish_scp_connection
240
239
 
241
240
  # Transfer the Rhoconnect package to the remote machine
242
241
  transfer_rhoconnect
243
242
 
244
243
  puts "Installing rhoconnect package.\n" +
245
- "This may take a while..."
244
+ "This may take a while...\n\n"
246
245
  install_package
247
246
 
248
247
  # Start the redis and nginx servers on the remote machine
@@ -250,6 +249,9 @@ Constants::STACKS.each do |stack|
250
249
 
251
250
  # Check the status of the rhoconnect service
252
251
  check_rc_service
252
+
253
+ end_time = Time.now
254
+ puts compute_time(start_time, end_time)
253
255
  rescue => e
254
256
  puts "OH NOEZ, Exception!!"
255
257
  puts e.inspect
@@ -260,5 +262,3 @@ Constants::STACKS.each do |stack|
260
262
  end #if
261
263
  end #begin
262
264
  end #do
263
- end_time = Time.now
264
- puts compute_time(start_time, end_time)
@@ -2,6 +2,6 @@ namespace :rc_pkg do
2
2
  desc 'Test creation and installation of both DEB and RPM rhoconnect packages.'
3
3
  task :test => ['build:deb', 'build:rpm'] do
4
4
  # Run installation test
5
- sudo ruby "installer/utils/nix_install_test.rb"
5
+ ruby "installer/utils/nix_install_test.rb"
6
6
  end #:test
7
7
  end #:rc_pkg
@@ -49,7 +49,7 @@ module Rhoconnect
49
49
  return _resend_search_result if params[:token] and params[:resend]
50
50
  if params[:token] and !_ack_search(params[:token])
51
51
  formatted_result = _format_search_result
52
- @client.flash_data('search*')
52
+ _delete_search
53
53
  return formatted_result
54
54
  end
55
55
  end
@@ -304,7 +304,7 @@ module Rhoconnect
304
304
 
305
305
  def _ack_search(search_token)
306
306
  if @client.get_value(:search_token) != search_token
307
- @client.flash_data('search*')
307
+ _delete_search
308
308
  @client.put_data(:search_errors,
309
309
  {'search-error'=>{'message'=>'Search error - invalid token'}}
310
310
  )
@@ -313,13 +313,19 @@ module Rhoconnect
313
313
  true
314
314
  end
315
315
 
316
+ def _delete_search
317
+ [:search, :search_page, :search_token, :search_errors].each do |search_doc|
318
+ @client.flash_data(search_doc)
319
+ end
320
+ end
321
+
316
322
  def _do_search(params={})
317
323
  # call source adapter search unless client is sending token for ack
318
324
  search_params = params[:search] if params
319
325
  res = @source_sync.search(@client.id,search_params) if params.nil? or !params[:token]
320
326
  res,diffsize = @source.is_pass_through? ? [res,res.size] : compute_search
321
327
  formatted_res = _format_search_result(res,diffsize)
322
- @client.flash_data('search*') if diffsize == 0
328
+ _delete_search if diffsize == 0
323
329
  formatted_res
324
330
  end
325
331
 
@@ -1,6 +1,7 @@
1
1
  module Rhoconnect
2
2
  class ReadState < Model
3
3
  field :refresh_time, :integer
4
+ field :prev_refresh_time, :integer
4
5
  field :retry_counter, :integer
5
6
 
6
7
  def self.create(fields)
@@ -9,6 +10,7 @@ module Rhoconnect
9
10
  fields.delete(:user_id)
10
11
  fields.delete(:source_name)
11
12
  fields[:refresh_time] ||= Time.now.to_i
13
+ fields[:prev_refresh_time] ||= Time.now.to_i
12
14
  fields[:retry_counter] ||= 0
13
15
  super(fields,{})
14
16
  end
@@ -266,11 +266,47 @@ module Rhoconnect
266
266
  def if_need_refresh(client_id=nil,params=nil)
267
267
  need_refresh = lock(:md) do |s|
268
268
  check = check_refresh_time
269
- s.read_state.refresh_time = Time.now.to_i + s.poll_interval if check
269
+ self.read_state.prev_refresh_time = self.read_state.refresh_time if check
270
+ self.read_state.refresh_time = Time.now.to_i + self.poll_interval if check
270
271
  check
271
272
  end
272
273
  yield client_id,params if need_refresh
273
274
  end
275
+
276
+ def rewind_refresh_time(query_failure)
277
+ return if self.poll_interval == 0
278
+ lock(:md) do |s|
279
+ rewind_time = false
280
+ # reset number of retries
281
+ # and prev_refresh_time on succesfull query
282
+ # or if last refresh was more than 'poll_interval' time ago
283
+ if not query_failure or ((Time.now.to_i - self.read_state.prev_refresh_time) >= self.poll_interval)
284
+ # we need to reset the prev_refresh_time here
285
+ # otherwise in case of expired poll interval
286
+ # and repeating failures - it will reset the counter
287
+ # on every error
288
+ self.read_state.prev_refresh_time = Time.now.to_i
289
+ self.read_state.retry_counter = 0
290
+ end
291
+
292
+ # rewind the refresh time on failure
293
+ # if retry limit is not reached
294
+ if query_failure
295
+ if self.read_state.retry_counter < self.retry_limit
296
+ self.read_state.increment!(:retry_counter)
297
+ rewind_time = true
298
+ # we have reached the limit - do not rewind the refresh time
299
+ # and reset the counter
300
+ else
301
+ self.read_state.retry_counter = 0
302
+ end
303
+ end
304
+
305
+ if rewind_time
306
+ self.read_state.refresh_time = self.read_state.prev_refresh_time
307
+ end
308
+ end
309
+ end
274
310
 
275
311
  def is_pass_through?
276
312
  self.pass_through and self.pass_through == 'true'
@@ -92,10 +92,14 @@ module Rhoconnect
92
92
  result = nil
93
93
  @source.if_need_refresh do
94
94
  Stats::Record.update("source:query:#{@source.name}") do
95
- return if _auth_op('login') == false
96
- result = self.read(nil,params)
97
- _auth_op('logoff')
98
- end
95
+ if _auth_op('login')
96
+ result = self.read(nil,params)
97
+ _auth_op('logoff')
98
+ end
99
+ # re-wind refresh time in case of error
100
+ query_failure = Store.exists?(@source.docname(:errors))
101
+ @source.rewind_refresh_time(query_failure)
102
+ end
99
103
  end
100
104
  result
101
105
  end