rhoconnect 3.3.6 → 3.4.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.
- data/CHANGELOG.md +40 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +27 -25
- data/bench/benchapp/Gemfile +7 -27
- data/bench/benchapp/config.ru +9 -31
- data/bench/blobapp/Gemfile +7 -27
- data/bench/blobapp/config.ru +9 -29
- data/bench/lib/bench.rb +8 -1
- data/bench/lib/bench/test_data.rb +4 -1
- data/bench/scripts/blob_cud_script.rb +4 -0
- data/bench/scripts/cud_script.rb +7 -1
- data/bench/scripts/helpers.rb +1 -1
- data/bench/scripts/test_query_script.rb +20 -7
- data/bench/spec/bench_spec_helper.rb +3 -1
- data/bin/rhoconnect +22 -12
- data/commands/{commands/dtach_commands → dtach}/dtach_about.rb +0 -0
- data/commands/{commands/dtach_commands → dtach}/dtach_install.rb +0 -0
- data/commands/{commands/redis_commands → dtach}/redis_attach.rb +0 -0
- data/commands/execute.rb +14 -15
- data/commands/generators/update.rb +26 -0
- data/commands/{commands/redis_commands → redis}/redis_about.rb +0 -0
- data/commands/redis/redis_download.rb +13 -0
- data/commands/redis/redis_install.rb +26 -0
- data/commands/{commands/redis_commands → redis}/redis_make.rb +0 -0
- data/commands/{commands/redis_commands → redis}/redis_restart.rb +3 -2
- data/commands/{commands/redis_commands → redis}/redis_start.rb +0 -0
- data/commands/{commands/redis_commands → redis}/redis_startbg.rb +0 -0
- data/commands/{commands/redis_commands → redis}/redis_stop.rb +3 -2
- data/commands/{commands/rhoconnect → rhoconnect}/clean_start.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/config.rb +7 -2
- data/commands/{commands/rhoconnect → rhoconnect}/create_user.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/delete_device.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/delete_user.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/flushdb.rb +4 -4
- data/commands/{commands/rhoconnect → rhoconnect}/get_token.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/reset.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/reset_refresh.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/restart.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/secret.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/set_admin_password.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/spec.rb +0 -0
- data/commands/rhoconnect/start.rb +27 -0
- data/commands/{commands/rhoconnect → rhoconnect}/startbg.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/startdebug.rb +2 -2
- data/commands/{commands/rhoconnect → rhoconnect}/stop.rb +3 -4
- data/commands/{commands/rhoconnect → rhoconnect}/version.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect}/web.rb +0 -0
- data/commands/rhoconnect_attach/attach.rb +10 -0
- data/commands/rhoconnect_console/console.rb +16 -0
- data/commands/{commands/rhoconnect → rhoconnect_console}/console_helper.rb +0 -0
- data/commands/{commands/rhoconnect → rhoconnect_war}/war.rb +0 -0
- data/commands/{commands/redis_commands → utilities}/redis_runner.rb +22 -19
- data/commands/utilities/utilities.rb +6 -0
- data/doc/benchmarks.txt +2 -2
- data/doc/bulk-sync.txt +12 -1
- data/doc/client-java.txt +3 -3
- data/doc/client-objc.txt +1 -1
- data/doc/client.txt +5 -5
- data/doc/command-line.txt +80 -135
- data/doc/deploying.txt +119 -12
- data/doc/extending-rhoconnect-server.txt +1 -1
- data/doc/heroku-addon.txt +119 -23
- data/doc/install.txt +101 -39
- data/doc/java-plugin.txt +2 -2
- data/doc/licensing.txt +1 -1
- data/doc/plugin-intro.txt +3 -1
- data/doc/preparing-production.txt +4 -4
- data/doc/public/cli.txt +2 -2
- data/doc/push-backend-setup.txt +11 -1
- data/doc/push-client-setup.txt +72 -2
- data/doc/push-server-setup.txt +129 -8
- data/doc/rails-plugin.txt +245 -40
- data/doc/rest-api.txt +10 -6
- data/doc/rhoconnect-calculator.txt +237 -0
- data/doc/rhoconnect-redis-stack.txt +35 -0
- data/doc/session-and-configuration.txt +24 -0
- data/doc/settings.txt +51 -41
- data/doc/source-adapters.txt +45 -45
- data/doc/stats-middleware.txt +2 -2
- data/doc/supported-platforms.txt +6 -6
- data/doc/testing.txt +2 -2
- data/doc/tutorial.txt +63 -63
- data/examples/simple/Gemfile +7 -35
- data/examples/simple/config.ru +8 -26
- data/examples/simple/sources/product.rb +6 -6
- data/generators/rhoconnect.rb +5 -0
- data/generators/templates/application/Gemfile +7 -37
- data/generators/templates/application/Rakefile +8 -0
- data/generators/templates/application/config.ru +12 -31
- data/generators/templates/application/rcgemfile +44 -0
- data/generators/templates/application/settings/settings.yml +7 -5
- data/install.sh +4 -4
- data/installer/unix-like/create_texts.rb +7 -2
- data/installer/unix-like/rho_connect_install_constants.rb +2 -2
- data/installer/unix-like/rho_connect_install_installers.rb +1 -16
- data/lib/rhoconnect.rb +51 -38
- data/lib/rhoconnect/api/app/query.rb +4 -1
- data/lib/rhoconnect/api/app/search.rb +4 -1
- data/lib/rhoconnect/api/client/list_client_docs.rb +3 -1
- data/lib/rhoconnect/api/user/ping.rb +1 -5
- data/lib/rhoconnect/application/init.rb +43 -0
- data/lib/rhoconnect/async.rb +11 -6
- data/lib/rhoconnect/client_sync.rb +30 -37
- data/lib/rhoconnect/document.rb +4 -0
- data/lib/rhoconnect/graph_helper.rb +74 -56
- data/lib/rhoconnect/middleware/helpers.rb +4 -0
- data/lib/rhoconnect/ping.rb +1 -0
- data/lib/rhoconnect/ping/gcm.rb +58 -0
- data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -1
- data/lib/rhoconnect/source.rb +70 -56
- data/lib/rhoconnect/source_sync.rb +33 -5
- data/lib/rhoconnect/store.rb +358 -110
- data/lib/rhoconnect/user.rb +8 -0
- data/lib/rhoconnect/utilities.rb +16 -14
- data/lib/rhoconnect/version.rb +1 -1
- data/lib/rhoconnect/web-console/models/client.js +1 -1
- data/lib/rhoconnect/web-console/public/UNVR67bold.ttf +0 -0
- data/lib/rhoconnect/web-console/public/bootstrap.css +6 -0
- data/lib/rhoconnect/web-console/public/logo.png +0 -0
- data/lib/rhoconnect/web-console/server.rb +13 -11
- data/lib/rhoconnect/web-console/templates/index.erb +5 -5
- data/lib/rhoconnect/web-console/templates/jqplot.erb +1 -0
- data/lib/rhoconnect/web-console/views/doc.js +0 -4
- data/lib/rhoconnect/web-console/views/home.js +2 -1
- data/lib/rhoconnect/web-console/views/new_ping.js +11 -6
- data/lib/rhoconnect/web-console/views/stats.js +9 -5
- data/rhoconnect.gemspec +6 -4
- data/spec/api/app/fast_update_spec.rb +2 -2
- data/spec/api/source/get_source_params_spec.rb +1 -0
- data/spec/apps/rhotestapp/settings/settings.yml +5 -5
- data/spec/client_sync_spec.rb +3 -14
- data/spec/perf/perf_spec_helper.rb +11 -7
- data/spec/perf/store_perf_spec.rb +88 -11
- data/spec/ping/gcm_spec.rb +99 -0
- data/spec/server/server_spec.rb +7 -0
- data/spec/server/stats_spec.rb +9 -2
- data/spec/source_sync_spec.rb +29 -0
- data/spec/spec_helper.rb +40 -38
- data/spec/stats/record_spec.rb +18 -9
- data/spec/store_spec.rb +128 -19
- data/spec/testdata/10000-data.txt +0 -0
- data/spec/testdata/5-data.txt +0 -0
- data/spec/testdata/5000-data.txt +0 -0
- data/tasks/jasmine.rake +1 -0
- data/tasks/redis.rake +16 -13
- metadata +71 -39
- data/commands/commands/redis_commands/redis_download.rb +0 -33
- data/commands/commands/redis_commands/redis_install.rb +0 -26
- data/commands/commands/rhoconnect/attach.rb +0 -8
- data/commands/commands/rhoconnect/console.rb +0 -15
- data/commands/commands/rhoconnect/start.rb +0 -18
- data/commands/utilities/dtach_installed.rb +0 -10
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
Server.api4 :query, :get, "/app/#{Rhoconnect::API_VERSION}/:source_name", false, {:verb => :get, :url => ['/api/application', '/application', '/api/application/query']} do |params,user,server|
|
|
2
2
|
server.content_type :json
|
|
3
|
-
res = server.current_client_sync.send_cud(params[:token],params[:query])
|
|
3
|
+
res = server.current_client_sync.send_cud(params[:token],params[:query])
|
|
4
|
+
server.response.headers[Rhoconnect::PAGE_TOKEN_HEADER] = res[1]['token']
|
|
5
|
+
server.response.headers[Rhoconnect::PAGE_OBJECT_COUNT_HEADER] = res[2]['count'].to_s
|
|
6
|
+
res.to_json
|
|
4
7
|
end
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
Server.api4 :search, :post, "/rc/#{Rhoconnect::API_VERSION}/app/search", false, {:verb => :get, :url => ['/application/search', '/api/application/search']} do |params,user,server|
|
|
2
2
|
server.content_type :json
|
|
3
|
-
ClientSync.search_all(server.current_client,params)
|
|
3
|
+
res = ClientSync.search_all(server.current_client,params)
|
|
4
|
+
server.response.headers[Rhoconnect::PAGE_TOKEN_HEADER] = res[0][1]['token'] if res[0][1] and res[0][1]['token']
|
|
5
|
+
server.response.headers[Rhoconnect::PAGE_OBJECT_COUNT_HEADER] = res[0][3]['count'].to_s if res[0][3] and res[0][3]['count']
|
|
6
|
+
res.to_json
|
|
4
7
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
Server.api4 :list_client_docs, :get, "/rc/#{Rhoconnect::API_VERSION}/clients/:client_id/sources/:source_id/docnames", \
|
|
2
2
|
true, {:verb => :post, :url => ['/api/list_client_docs', '/api/client/list_client_docs']} do |params,user|
|
|
3
|
+
result = ""
|
|
3
4
|
Rhoconnect::Stats::Record.update('clientdocs') do
|
|
4
5
|
c = Client.load(params[:client_id],{:source_name => params[:source_id]})
|
|
5
6
|
res = {}
|
|
@@ -10,6 +11,7 @@ Server.api4 :list_client_docs, :get, "/rc/#{Rhoconnect::API_VERSION}/clients/:cl
|
|
|
10
11
|
db_key = c.docname(doc)
|
|
11
12
|
res.merge!(doc => db_key)
|
|
12
13
|
end
|
|
13
|
-
res.to_json
|
|
14
|
+
result = res.to_json
|
|
14
15
|
end
|
|
16
|
+
result
|
|
15
17
|
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Application root path
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
require 'bundler'
|
|
4
|
+
Bundler.require
|
|
5
|
+
|
|
6
|
+
ROOT_PATH = File.expand_path('.')
|
|
7
|
+
|
|
8
|
+
# Debugger support
|
|
9
|
+
if ENV['DEBUG'] == 'yes'
|
|
10
|
+
ENV['APP_TYPE'] = 'rhosync'
|
|
11
|
+
ENV['ROOT_PATH'] = ROOT_PATH
|
|
12
|
+
require 'debugger'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
require 'rhoconnect/server'
|
|
16
|
+
require 'rhoconnect/web-console/server'
|
|
17
|
+
require 'resque/server'
|
|
18
|
+
|
|
19
|
+
# Rhoconnect server flags
|
|
20
|
+
#Rhoconnect::Server.enable :stats
|
|
21
|
+
Rhoconnect::Server.disable :run
|
|
22
|
+
Rhoconnect::Server.disable :clean_trace
|
|
23
|
+
Rhoconnect::Server.enable :raise_errors
|
|
24
|
+
Rhoconnect::Server.set :root, ROOT_PATH
|
|
25
|
+
Rhoconnect::Server.use Rack::Static, :urls => ['/data'], :root => Rhoconnect::Server.root
|
|
26
|
+
# disable Async mode if Debugger is used
|
|
27
|
+
if ENV['DEBUG'] == 'yes'
|
|
28
|
+
Rhoconnect::Server.set :use_async_model, false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
module Rhoconnect
|
|
32
|
+
def app
|
|
33
|
+
# Setup the url map
|
|
34
|
+
url_map = { '/' => Rhoconnect::Server.new }
|
|
35
|
+
unless Rhoconnect.disable_resque_console
|
|
36
|
+
url_map['/resque'] = Resque::Server.new
|
|
37
|
+
end
|
|
38
|
+
unless Rhoconnect.disable_rc_console
|
|
39
|
+
url_map['/console'] = RhoconnectConsole::Server.new
|
|
40
|
+
end
|
|
41
|
+
return Rack::URLMap.new url_map
|
|
42
|
+
end
|
|
43
|
+
end
|
data/lib/rhoconnect/async.rb
CHANGED
|
@@ -51,13 +51,18 @@ module Rhoconnect
|
|
|
51
51
|
def execute_api_call(client_call = false)
|
|
52
52
|
f = Fiber.current
|
|
53
53
|
operation = proc {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
self.request.env['REQUEST_THREAD'] = Thread.current
|
|
55
|
+
if(request.env['RHO_ABORT_PROCESS'])
|
|
56
|
+
res = [500, 'Request is aborted']
|
|
57
|
+
else
|
|
58
|
+
catch_all do
|
|
59
|
+
res = yield params, current_user, self
|
|
60
|
+
if params.has_key? :warning
|
|
61
|
+
Rhoconnect.log params[:warning]
|
|
62
|
+
response.headers['Warning'] = params[:warning]
|
|
63
|
+
end
|
|
64
|
+
res
|
|
59
65
|
end
|
|
60
|
-
res
|
|
61
66
|
end
|
|
62
67
|
}
|
|
63
68
|
result = nil
|
|
@@ -74,8 +74,7 @@ module Rhoconnect
|
|
|
74
74
|
else
|
|
75
75
|
compute_errors_page
|
|
76
76
|
res = build_page do |r|
|
|
77
|
-
total_count,r['insert'] = compute_page
|
|
78
|
-
r['delete'] = compute_deleted_page
|
|
77
|
+
total_count,r['insert'],r['delete'] = compute_page
|
|
79
78
|
r['links'] = compute_links_page
|
|
80
79
|
r['metadata'] = compute_metadata
|
|
81
80
|
end
|
|
@@ -84,13 +83,11 @@ module Rhoconnect
|
|
|
84
83
|
else
|
|
85
84
|
_delete_errors_page
|
|
86
85
|
end
|
|
87
|
-
@client.put_data(:cd,res['insert'],true)
|
|
88
|
-
@client.delete_data(:cd,res['delete'])
|
|
89
|
-
# TODO: progress count can not be computed properly
|
|
90
|
-
# without comparing what has actually changes
|
|
91
|
-
# so we need to obsolete it in the future versions
|
|
92
|
-
progress_count = 0
|
|
93
86
|
end
|
|
87
|
+
# TODO: progress count can not be computed properly
|
|
88
|
+
# without comparing what has actually changes
|
|
89
|
+
# so we need to obsolete it in the future versions
|
|
90
|
+
progress_count = 0
|
|
94
91
|
[token,progress_count,total_count,res]
|
|
95
92
|
end
|
|
96
93
|
|
|
@@ -167,52 +164,48 @@ module Rhoconnect
|
|
|
167
164
|
# Computes diffs between master doc and client doc, trims it to page size,
|
|
168
165
|
# stores page, and returns page as hash
|
|
169
166
|
def compute_page
|
|
170
|
-
|
|
171
|
-
|
|
167
|
+
inserts_elements_map,deletes_elements_map,total_count = @source.lock(:md) do |s|
|
|
168
|
+
inserts_elements_map = Store.get_diff_data(@client.docname(:cd),s.docname(:md),@p_size)
|
|
172
169
|
total_count = s.get_value(:md_size).to_i
|
|
173
|
-
|
|
170
|
+
deletes_elements_map = Store.get_diff_data(s.docname(:md),@client.docname(:cd),@p_size)
|
|
171
|
+
[inserts_elements_map,deletes_elements_map,total_count]
|
|
174
172
|
end
|
|
175
173
|
# until sync is not done - set cd_size to 0
|
|
176
174
|
# once there are no changes, then, set cd_size to md_size
|
|
177
|
-
cd_size =
|
|
175
|
+
cd_size = inserts_elements_map.size > 0 ? 0 : total_count
|
|
178
176
|
@client.put_value(:cd_size, cd_size)
|
|
179
|
-
|
|
177
|
+
|
|
178
|
+
# now, find the exact changes
|
|
179
|
+
inserts,deletes = Store.get_inserts_deletes(inserts_elements_map,deletes_elements_map)
|
|
180
|
+
|
|
181
|
+
@client.put_data(:page,inserts)
|
|
182
|
+
@client.put_data(:delete_page,deletes,true)
|
|
180
183
|
@client.put_value(:total_count_page,total_count)
|
|
181
|
-
|
|
184
|
+
Store.update_elements(@client.docname(:cd),inserts_elements_map,deletes_elements_map)
|
|
185
|
+
|
|
186
|
+
[total_count,inserts,deletes]
|
|
182
187
|
end
|
|
183
188
|
|
|
184
189
|
# Computes search result, updates md for source and cd for client with the result
|
|
185
190
|
def compute_search
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
@client.
|
|
189
|
-
@client.
|
|
191
|
+
cd_inserts_elements_map = Store.get_diff_data(@client.docname(:cd),@client.docname(:search),@p_size)
|
|
192
|
+
|
|
193
|
+
Store.update_elements(@client.docname(:cd), cd_inserts_elements_map, {})
|
|
194
|
+
@client.update_count(:cd_size,cd_inserts_elements_map.size)
|
|
195
|
+
# remove previous search page and build new one
|
|
196
|
+
@client.flash_data(:search_page)
|
|
197
|
+
Store.update_elements(@client.docname(:search_page),cd_inserts_elements_map,{})
|
|
198
|
+
client_res = @client.get_data(:search_page)
|
|
190
199
|
|
|
191
200
|
@source.lock(:md) do |s|
|
|
192
|
-
|
|
193
|
-
s.
|
|
194
|
-
s.update_count(:md_size,
|
|
201
|
+
md_inserts_elements_map = Store.get_diff_data(s.docname(:md),@client.docname(:cd))
|
|
202
|
+
Store.update_elements(s.docname(:md), md_inserts_elements_map, {})
|
|
203
|
+
s.update_count(:md_size,md_inserts_elements_map.size)
|
|
195
204
|
end
|
|
196
205
|
|
|
197
206
|
[client_res,client_res.size]
|
|
198
207
|
end
|
|
199
208
|
|
|
200
|
-
# Computes deleted objects (down to individual attributes)
|
|
201
|
-
# in the client document, trims it to page size, stores page, and returns page as hash
|
|
202
|
-
def compute_deleted_page
|
|
203
|
-
res = {}
|
|
204
|
-
delete_page_doc = @client.docname(:delete_page)
|
|
205
|
-
page_size = @p_size
|
|
206
|
-
diff = @source.lock(:md) { |s| Store.get_diff_data(s.docname(:md),@client.docname(:cd),@p_size) }
|
|
207
|
-
diff.each do |key,value|
|
|
208
|
-
res[key] = value
|
|
209
|
-
Store.put_object(delete_page_doc,key,value)
|
|
210
|
-
page_size -= 1
|
|
211
|
-
break if page_size <= 0
|
|
212
|
-
end
|
|
213
|
-
res
|
|
214
|
-
end
|
|
215
|
-
|
|
216
209
|
# Computes errors for client and stores a copy as errors page
|
|
217
210
|
def compute_errors_page
|
|
218
211
|
['create','update','delete'].each do |operation|
|
data/lib/rhoconnect/document.rb
CHANGED
|
@@ -5,11 +5,7 @@ module GraphHelper
|
|
|
5
5
|
#name,data,options
|
|
6
6
|
@displayname = params['display_name']
|
|
7
7
|
names = []
|
|
8
|
-
|
|
9
|
-
# names = get_sources('all')
|
|
10
|
-
# rescue Exception => e
|
|
11
|
-
# puts "errror #{e.message}"
|
|
12
|
-
# end
|
|
8
|
+
|
|
13
9
|
names = [params['display_name']]
|
|
14
10
|
@sources = []
|
|
15
11
|
|
|
@@ -61,14 +57,13 @@ module GraphHelper
|
|
|
61
57
|
s['data'] = data
|
|
62
58
|
options[:series] = series
|
|
63
59
|
options[:cursor] = {:zoom => true, :showTooltip => true}
|
|
64
|
-
|
|
60
|
+
options[:seriesDefaults] = {:pointLabels => { :show=>true }}
|
|
65
61
|
s['options'] = options
|
|
66
62
|
end
|
|
67
63
|
|
|
68
64
|
@sources << s
|
|
69
65
|
end
|
|
70
|
-
|
|
71
|
-
@data = [[[1,2],[3,4],[5,6]]].to_json
|
|
66
|
+
|
|
72
67
|
erb :jqplot, :layout => false
|
|
73
68
|
end
|
|
74
69
|
|
|
@@ -78,19 +73,14 @@ module GraphHelper
|
|
|
78
73
|
|
|
79
74
|
#name,data,options
|
|
80
75
|
@displayname = params['display_name']
|
|
81
|
-
|
|
82
|
-
# begin
|
|
83
|
-
# names = get_sources('all')
|
|
84
|
-
# rescue Exception => e
|
|
85
|
-
# puts "errror #{e.message}"
|
|
86
|
-
# end
|
|
76
|
+
|
|
87
77
|
@sources = []
|
|
88
78
|
name = key = params['display_name']
|
|
89
79
|
|
|
90
80
|
s = {}
|
|
91
81
|
data = []
|
|
92
82
|
series = []
|
|
93
|
-
options = { :legend => { :show =>
|
|
83
|
+
options = { :legend => { :show => false }, :title => name }
|
|
94
84
|
s['name'] = name
|
|
95
85
|
|
|
96
86
|
xmin = 9999999999999999
|
|
@@ -98,43 +88,46 @@ module GraphHelper
|
|
|
98
88
|
ymin = 9999999999999999
|
|
99
89
|
ymax = -1
|
|
100
90
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
count = value.split(',')[0]
|
|
108
|
-
value.gsub!(/.*,/,"")
|
|
109
|
-
thisdata << value.split(":").reverse
|
|
110
|
-
thisdata[-1][0] = thisdata[-1][0].to_i * 1000
|
|
111
|
-
thisdata[-1][1] = thisdata[-1][1].to_f
|
|
112
|
-
thisdata[-1][1] /= count.to_f
|
|
113
|
-
|
|
114
|
-
ymin = thisdata[-1][1].to_f if thisdata[-1][1] && thisdata[-1][1].to_f < ymin
|
|
115
|
-
ymax = thisdata[-1][1].to_f if thisdata[-1][1] && thisdata[-1][1].to_f > ymax
|
|
91
|
+
keys = Rhoconnect::Stats::Record.keys(key)
|
|
92
|
+
|
|
93
|
+
keys.each_with_index do |k,index|
|
|
94
|
+
method = key.gsub(/http:.*?:/,"")
|
|
95
|
+
#method.gsub!(/:.*/,"") unless name == "*"
|
|
96
|
+
series << {:showLabel => true, :label => method, :showLine => false }
|
|
116
97
|
|
|
98
|
+
range = get_user_count(nil,k,0,-1)
|
|
99
|
+
thisdata = []
|
|
100
|
+
range.each do |value|
|
|
101
|
+
count = value.split(',')[0]
|
|
102
|
+
value.gsub!(/.*,/,"")
|
|
103
|
+
thisdata << value.split(":").reverse
|
|
104
|
+
thisdata[-1][0] = thisdata[-1][0].to_i * 1000
|
|
105
|
+
thisdata[-1][1] = thisdata[-1][1].to_f
|
|
106
|
+
thisdata[-1][1] /= count.to_f
|
|
107
|
+
end
|
|
108
|
+
data << thisdata
|
|
109
|
+
xmin = thisdata[0][0].to_i if thisdata[0] && thisdata[0][0].to_i < xmin
|
|
110
|
+
xmax = thisdata[-1][0].to_i if thisdata[-1] && thisdata[-1][0].to_i > xmax
|
|
117
111
|
end
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
112
|
+
|
|
113
|
+
data_normalized,ymin,ymax,days = average_data(data,ymin,ymax)
|
|
114
|
+
#puts "dn is ****************** #{data_normalized}"
|
|
115
|
+
format_str = days ? "%m/%d%y" : "%H"
|
|
116
|
+
label_time = days ? "Days" : "#{data_normalized.first.first[0].year}-#{data_normalized.first.first[0].month}-#{data_normalized.first.first[0].day} (Hours)"
|
|
117
|
+
|
|
123
118
|
options[:axes] = {
|
|
124
119
|
:yaxis => { :tickOptions => { :formatString =>'%.3f'}, :autoscale => true, :min => 0, :max => ymax + (ymax * 0.05), :label => 'Seconds', :labelRenderer => '$.jqplot.CanvasAxisLabelRenderer' },
|
|
125
|
-
:xaxis => { :autoscale => true, :renderer=>'$.jqplot.DateAxisRenderer',
|
|
126
|
-
:tickOptions => {:formatString =>
|
|
120
|
+
:xaxis => { :autoscale => true, :label => label_time, :renderer=>'$.jqplot.DateAxisRenderer',
|
|
121
|
+
:tickOptions => {:formatString => format_str}}
|
|
127
122
|
}
|
|
128
|
-
|
|
129
|
-
s['data'] = data
|
|
123
|
+
s['data'] = data_normalized
|
|
130
124
|
options[:series] = series
|
|
131
|
-
options[:cursor] = {:zoom => true, :showTooltip => true}
|
|
125
|
+
options[:cursor] = {:zoom => true, :showTooltip => true, :show => true}
|
|
126
|
+
options[:seriesDefaults] = {:pointLabels => { :show=>true },:rendererOptions => {:smooth => true}}
|
|
132
127
|
s['options'] = options
|
|
133
128
|
|
|
134
129
|
@sources << s
|
|
135
130
|
|
|
136
|
-
@graph_t = 'http'
|
|
137
|
-
@data = [[[1,2],[3,4],[5,6]]].to_json
|
|
138
131
|
erb :jqplot, :layout => false
|
|
139
132
|
end
|
|
140
133
|
|
|
@@ -194,7 +187,8 @@ module GraphHelper
|
|
|
194
187
|
|
|
195
188
|
s['data'] = data
|
|
196
189
|
options[:series] = series
|
|
197
|
-
options[:cursor] = {:zoom => true, :showTooltip => true}
|
|
190
|
+
options[:cursor] = {:zoom => true, :showTooltip => true}
|
|
191
|
+
options[:seriesDefaults] = {:rendererOptions => {:smooth => true}}
|
|
198
192
|
s['options'] = options
|
|
199
193
|
|
|
200
194
|
@sources << s
|
|
@@ -207,19 +201,11 @@ module GraphHelper
|
|
|
207
201
|
|
|
208
202
|
def get_http_routes()
|
|
209
203
|
keys = get_user_count("http:*:*")
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
# found = true
|
|
216
|
-
# sources.each do |s|
|
|
217
|
-
# found = false if element.match(s)
|
|
218
|
-
# end
|
|
219
|
-
# keys_final << element.strip if found
|
|
220
|
-
# keys_final
|
|
221
|
-
# end
|
|
222
|
-
|
|
204
|
+
keys.each do |k|
|
|
205
|
+
client_id = k.split("/")[4]
|
|
206
|
+
k.gsub!(client_id,"*") if client_id
|
|
207
|
+
end
|
|
208
|
+
keys.uniq
|
|
223
209
|
end
|
|
224
210
|
|
|
225
211
|
def count_graph(uri,title,name,metric)
|
|
@@ -253,6 +239,7 @@ module GraphHelper
|
|
|
253
239
|
}
|
|
254
240
|
|
|
255
241
|
options[:cursor] = {:zoom => true, :showTooltip => true}
|
|
242
|
+
options[:seriesDefaults] = {:pointLabels => { :show=>true },:rendererOptions => {:smooth => true}}
|
|
256
243
|
s['name'] = name
|
|
257
244
|
s['data'] = [thisdata]
|
|
258
245
|
s['options'] = options
|
|
@@ -303,7 +290,38 @@ module GraphHelper
|
|
|
303
290
|
end
|
|
304
291
|
res
|
|
305
292
|
end
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def average_data(data,ymin,ymax)
|
|
296
|
+
data_buckets = {}
|
|
297
|
+
data_count = {}
|
|
298
|
+
data_result = []
|
|
299
|
+
days = false
|
|
300
|
+
|
|
301
|
+
data.each do |d_arr|
|
|
302
|
+
bucket = Time.at(d_arr.first[0]/1000)
|
|
303
|
+
bucket_key = "#{bucket.year}-#{bucket.month}-#{bucket.day} #{bucket.hour}:0:0"
|
|
304
|
+
if data_buckets.include? bucket_key
|
|
305
|
+
data_buckets[bucket_key] += d_arr.first[1]
|
|
306
|
+
data_count[bucket_key] += 1
|
|
307
|
+
else
|
|
308
|
+
data_buckets[bucket_key] = d_arr.first[1]
|
|
309
|
+
data_count[bucket_key] = 1
|
|
310
|
+
end
|
|
311
|
+
ymin = d_arr.first[1].to_f if d_arr.first[1].to_f < ymin.to_f
|
|
312
|
+
ymax = d_arr.first[1].to_f if d_arr.first[1].to_f > ymax.to_f
|
|
313
|
+
end
|
|
314
|
+
data_buckets.each do |index,value|
|
|
315
|
+
average_val = value/data_count[index]
|
|
316
|
+
data_result << [[Time.at(Time.parse(index).to_i),average_val.round(3)]]
|
|
317
|
+
end
|
|
306
318
|
|
|
319
|
+
unless data_buckets.size < 2
|
|
320
|
+
start_day = Time.parse(data_buckets.first.first)
|
|
321
|
+
end_day = Time.parse(data_buckets.last.first)
|
|
322
|
+
days = true if start_day.month != end_day.month and start_day.day != end_day.day
|
|
323
|
+
end
|
|
324
|
+
return data_result,ymin,ymax,days
|
|
307
325
|
end
|
|
308
326
|
|
|
309
327
|
end
|
|
@@ -10,6 +10,10 @@ module Rhoconnect
|
|
|
10
10
|
API_TOKEN_HEADER = 'HTTP_X_RHOCONNECT_API_TOKEN'.freeze
|
|
11
11
|
# X-RhoConnect-CLIENT-ID
|
|
12
12
|
CLIENT_ID_HEADER = 'HTTP_X_RHOCONNECT_CLIENT_ID'.freeze
|
|
13
|
+
# X-RhoConnect-PAGE-TOKEN
|
|
14
|
+
PAGE_TOKEN_HEADER = 'X-Rhoconnect-PAGE-TOKEN'
|
|
15
|
+
# X-RhoConnect-PAGE-OBJECT-COUNT
|
|
16
|
+
PAGE_OBJECT_COUNT_HEADER = 'X-Rhoconnect-PAGE-OBJECT-COUNT'
|
|
13
17
|
|
|
14
18
|
# old-way admin routes
|
|
15
19
|
OLD_API_URI_REGEXP = /\/api\//
|