Commit b5809eab by John Doe

improved data loading performance

parent 750579a7
......@@ -73,8 +73,8 @@ class DbAdapter
path: entry[0],
attributes: {
data_type: entry[1],
start_time: entry[2] || 0,
end_time: entry[3] || 0,
start_time: entry[2],
end_time: entry[3],
total_rows: entry[4],
total_time: entry[5]
}.merge(metadata),
......
......@@ -59,10 +59,8 @@ class LoadElementData
req_streams.each do |stream|
adapter = DbAdapter.new(stream.db.url)
data_service = LoadStreamData.new(adapter)
time = Benchmark.measure do
data_service.run(stream, @start_time, @end_time,elements.to_a)
end
puts "------ DataService #{time}"
if data_service.success?
combined_data.concat(data_service.data)
else
......
......@@ -64,6 +64,7 @@ class LoadStreamData
@decimation_factor = plottable_decim.level
path = __build_path(db_stream, plottable_decim.level)
resp = @db_adapter.get_data(path, start_time, end_time)
if resp.nil?
add_error("cannot get data for [#{path}] @ #{@db_adapter.url}")
return self
......@@ -77,11 +78,9 @@ class LoadStreamData
decimateable_elements =
elements.select{|e| %w(continuous discrete).include? e.display_type}
interval_elements = elements.select{|e| e.display_type=='event'}
time = Benchmark.measure do
@data = __build_decimated_data(decimateable_elements, resp) +
__build_intervals_from_decimated_data(interval_elements, resp)
end
puts "---- [LoadStreamData] Build Dataset #{time}"
end
self
end
......
......@@ -19,7 +19,7 @@ Rails.application.routes.draw do
end
resources :db_elements, only: [:index] do
collection do
post 'data'
get 'data'
end
end
......
......@@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe DbElementsController, type: :request do
let(:user1) { create(:user, first_name: 'John') }
let(:user2) { create(:user, first_name: 'Sam') }
describe 'POST #data' do
describe 'GET #data' do
# retrieve data for elements listed by array of ids
context 'with authenticated user' do
before do
......@@ -31,7 +31,7 @@ RSpec.describe DbElementsController, type: :request do
allow(LoadElementData).to receive(:new).and_return(@mock_service)
@auth_headers = user1.create_new_auth_token
post '/db_elements/data.json',
get '/db_elements/data.json',
params: { elements: [@elem1.id, @elem2.id].to_json,
start_time: 0, end_time: 100, redux_json: 'new home view' },
headers: @auth_headers
......@@ -44,7 +44,7 @@ RSpec.describe DbElementsController, type: :request do
end
it 'returns error if time bounds are invalid' do
@auth_headers = user1.create_new_auth_token
post '/db_elements/data.json',
get '/db_elements/data.json',
params: { elements: [@elem1.id, @elem2.id].to_json,
start_time: 100, end_time: 0 },
headers: @auth_headers
......@@ -59,7 +59,7 @@ RSpec.describe DbElementsController, type: :request do
stream2.db_elements << @elem3
@auth_headers = user1.create_new_auth_token
post '/db_elements/data.json',
get '/db_elements/data.json',
params: { elements: [@elem1.id, @elem3.id].to_json,
start_time: 100, end_time: 0 },
headers: @auth_headers
......@@ -68,7 +68,7 @@ RSpec.describe DbElementsController, type: :request do
end
context 'without sign-in' do
it 'returns unauthorized' do
post '/db_elements/data.json'
get '/db_elements/data.json'
expect(response).to have_http_status(:unauthorized)
end
end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment