aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert2017-08-22 18:07:13 +0200
committerRobert2017-08-22 18:07:13 +0200
commit038710b22ccf3dd2421ec8d07fae45ef05a47ada (patch)
tree68c0be569ac09e87ae6151803879ca52953b4a36
parent61c4a303183284fc107325aeeef5ace7a3e68c0c (diff)
downloadchouette-core-038710b22ccf3dd2421ec8d07fae45ef05a47ada.tar.bz2
Refs: 4273@5h; Still debugging zip file upload inside post to Rails api; Retry removed (but not the deadcode yet) [amend me]
-rw-r--r--app/controllers/api/v1/netex_imports_controller.rb4
-rw-r--r--app/services/http_service.rb4
-rw-r--r--app/services/zip_service.rb9
-rw-r--r--app/workers/workbench_import_worker.rb56
4 files changed, 33 insertions, 40 deletions
diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb
index 7dc18a7be..fd28ba45a 100644
--- a/app/controllers/api/v1/netex_imports_controller.rb
+++ b/app/controllers/api/v1/netex_imports_controller.rb
@@ -44,10 +44,8 @@ module Api
ReferentialMetadataKludge.make_metadata_from_name! netex_import_params['name'], referential_id: @new_referential.id
# <<< REMOVE ME !!!!
rescue ActiveRecord::RecordInvalid
- require 'pry'
- binding.pry
# render json: {errors: @new_referential.errors}, status: 406
- render json: {errors: ErrorFormat.detailed(@new_referential)}, status: 406
+ render json: {errors: ErrorFormat.details(@new_referential)}, status: 406
finish_action!
end
diff --git a/app/services/http_service.rb b/app/services/http_service.rb
index 6cf8ef93b..d3999f293 100644
--- a/app/services/http_service.rb
+++ b/app/services/http_service.rb
@@ -26,13 +26,11 @@ module HTTPService extend self
# params: { netex_import: {referential_id: 13, workbench_id: 1}},
# upload: {file: [StringIO.new('howdy'), 'application/zip', 'greeting']})
def post_resource(host:, path:, token: nil, params: {}, upload: nil)
- Faraday.new(url: host) do |c|
+ result = Faraday.new(url: host) do |c|
c.headers['Authorization'] = "Token token=#{token.inspect}" if token
c.request :multipart
c.request :url_encoded
c.adapter Faraday.default_adapter
- require 'pry'
- binding.pry
return c.post path, params
end
end
diff --git a/app/services/zip_service.rb b/app/services/zip_service.rb
index f2e7fc2ed..cab301b01 100644
--- a/app/services/zip_service.rb
+++ b/app/services/zip_service.rb
@@ -1,12 +1,15 @@
class ZipService
+ # TODO: Remove me before merge https://github.com/rubyzip/rubyzip
- class Subdir < Struct.new( :name, :stream)
+ class Subdir < Struct.new(:name, :stream)
end
attr_reader :current_key, :current_output, :yielder
def initialize data
- @zip_data = StringIO.new(data)
+ @zip_data = StringIO.new(data)
+ @current_key = nil
+ @current_output = nil
end
def subdirs
@@ -38,6 +41,7 @@ class ZipService
end
def write_to_current_output input_stream
+ # the condition below is true for directory entries
return if Zip::NullInputStream == input_stream
current_output.write input_stream.read
end
@@ -58,6 +62,7 @@ class ZipService
end
def entry_key entry
+ # last dir name File.dirname.split("/").last
entry.name.split('/', -1)[-2]
end
end
diff --git a/app/workers/workbench_import_worker.rb b/app/workers/workbench_import_worker.rb
index d06d4607c..325ff401d 100644
--- a/app/workers/workbench_import_worker.rb
+++ b/app/workers/workbench_import_worker.rb
@@ -3,15 +3,13 @@ class WorkbenchImportWorker
include Rails.application.routes.url_helpers
include Configurable
- RETRY_DELAYS = [3, 5, 8]
-
# Workers
# =======
def perform(import_id)
@workbench_import = WorkbenchImport.find(import_id)
@response = nil
- @workbench_import.update_attributes(status: 'running')
+ @workbench_import.update(status: 'running')
downloaded = download
zip_service = ZipService.new(downloaded)
upload zip_service
@@ -34,49 +32,38 @@ class WorkbenchImportWorker
params: params(eg_file, eg_name))
end
- def log_failure reason, count
- logger.warn "HTTP POST failed with #{reason}, count = #{count}, response=#{@response}"
- end
-
- def try_upload_entry_group eg_name, eg_file
- result = execute_post eg_name, eg_file
- return Result.ok(result) if result && result.status < 400
- Result.error(JSON.parse result.body)
- end
-
def upload zip_service
entry_group_streams = zip_service.subdirs
- @workbench_import.update_attributes total_steps: entry_group_streams.size
+ @workbench_import.update total_steps: entry_group_streams.size
entry_group_streams.each_with_index(&method(:upload_entry_group))
- rescue StopIteration
- @workbench_import.update_attributes( current_step: entry_group_streams.size, status: 'failed' )
+ rescue Exception => e
+ logger.error e.message
+ @workbench_import.update( current_step: entry_group_streams.size, status: 'failed' )
+ raise
end
def upload_entry_group entry_pair, element_count
- @workbench_import.update_attributes( current_step: element_count.succ )
- retry_service = RetryService.new(
- delays: RETRY_DELAYS,
- rescue_from: [HTTPService::Timeout],
- logger: logger,
- &method(:log_failure))
- status = retry_service.execute(&upload_entry_group_proc(entry_pair))
- raise StopIteration unless status.ok?
- end
-
- def upload_entry_group_proc entry_pair
+ @workbench_import.update( current_step: element_count.succ )
+ # status = retry_service.execute(&upload_entry_group_proc(entry_pair))
eg_name = entry_pair.name
eg_stream = entry_pair.stream
- eg_file = Tempfile.new("WorkbenchImport_#{eg_name}_#{$$}").tap do |file|
- eg_stream.read
+ eg_file = File.new(Rails.root.join('tmp', "WorkbenchImport_#{eg_name}_#{$$}.zip"), 'wb').tap do |file|
+ eg_stream.rewind
+ file.write eg_stream.read
end
eg_file.rewind
- -> do
- try_upload_entry_group(eg_name, eg_file)
+ result = execute_post eg_name, eg_file
+ if result && result.status < 400
+ result
+ else
+ raise StopIteration, result.body
end
+ ensure
+ eg_file.close rescue nil
+ eg_file.unlink rescue nil
end
-
# Queries
# =======
@@ -112,6 +99,11 @@ class WorkbenchImportWorker
end
def params file, name
+ if dest = ENV["DEBUG_TEMPFILE"]
+ require 'pry'
+ binding.pry
+ %x{unzip -oqq #{file.path} -d #{dest}}
+ end
{ netex_import:
{ referential_id: @workbench_import.referential_id,
workbench_id: @workbench_import.workbench_id,