aboutsummaryrefslogtreecommitdiffstats
path: root/app/services
diff options
context:
space:
mode:
Diffstat (limited to 'app/services')
-rw-r--r--app/services/http_service.rb15
-rw-r--r--app/services/retry_service.rb13
2 files changed, 18 insertions, 10 deletions
diff --git a/app/services/http_service.rb b/app/services/http_service.rb
index ae7d0e413..6cf8ef93b 100644
--- a/app/services/http_service.rb
+++ b/app/services/http_service.rb
@@ -20,7 +20,6 @@ module HTTPService extend self
raise "Error on api request status : #{resp.status} => #{resp.body}"
end
end
-
# host: 'http://localhost:3000',
# path: '/api/v1/netex_imports.json',
# token: '13-74009c36638f587c9eafb1ce46e95585',
@@ -32,14 +31,14 @@ module HTTPService extend self
c.request :multipart
c.request :url_encoded
c.adapter Faraday.default_adapter
-
- if upload
- name = upload.keys.first
- value, mime_type, as_name = upload.values.first
- params.update( name => Faraday::UploadIO.new(value, mime_type, as_name ) )
- end
-
+ require 'pry'
+ binding.pry
return c.post path, params
end
end
+
+ # Expose this in order to make the service replaceable
+ def upload(*triple)
+ Faraday::UploadIO.new(*triple)
+ end
end
diff --git a/app/services/retry_service.rb b/app/services/retry_service.rb
index 21b1def36..245dd32df 100644
--- a/app/services/retry_service.rb
+++ b/app/services/retry_service.rb
@@ -16,8 +16,9 @@ class RetryService
# @param@ block:
# This optional code is excuted before each retry, it is passed the result of the failed attempt, thus
# an `Exception` and the number of execution already tried.
- def initialize( delays: [], rescue_from: [], &blk )
+ def initialize( delays: [], rescue_from: [], logger: nil, &blk )
@intervals = delays
+ @logger = logger
@registered_exceptions = Array(rescue_from) << Retry
@failure_callback = blk
end
@@ -31,6 +32,7 @@ class RetryService
result = execute_protected blk
return result if result.ok?
@intervals.each_with_index do | interval, retry_count |
+ warn "retry #{retry_count + 1 }; sleeping #{interval}; cause: #{result.value.inspect}"
sleep interval
@failure_callback.try(:call, result.value, retry_count + 1)
result = execute_protected blk
@@ -43,7 +45,9 @@ class RetryService
private
def execute_protected blk
- Result.ok(blk.())
+ result = blk.()
+ return result if Result === result
+ Result.ok(result)
rescue Exception => e
if @registered_exceptions.any?{ |re| e.is_a? re }
Result.error(e)
@@ -51,4 +55,9 @@ class RetryService
raise
end
end
+
+ def warn message
+ return unless @logger
+ @logger.try :warn, message
+ end
end