From 63fcd8f8feed58af4b1e1ff0e5fdaa09791c9596 Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Thu, 8 Mar 2012 15:23:43 +0000 Subject: improved integration of error reports, call stack added as errorDetails --- lib/task.rb | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) (limited to 'lib/task.rb') diff --git a/lib/task.rb b/lib/task.rb index 3a52dee..0562dc7 100644 --- a/lib/task.rb +++ b/lib/task.rb @@ -15,13 +15,11 @@ module OpenTox pid = fork do begin result_uri = yield - if URI.accessible?(result_uri) - task.completed result_uri - else - not_found_error "\"#{result_uri}\" is not a valid result URI" - end + task.completed result_uri rescue - task.error $! + RestClientWrapper.put(File.join(task.uri,'Error'),{:errorReport => $!.report.to_yaml}) + task.kill + #raise $! end end Process.detach(pid) @@ -49,11 +47,13 @@ module OpenTox end def description - metadata[RDF::DC.description] + pull + self.[](RDF::DC.description).uniq.first end def creator - metadata[RDF::DC.creator] + pull + self.[](RDF::DC.creator).uniq.first end def cancel @@ -66,16 +66,6 @@ module OpenTox RestClientWrapper.put(File.join(@uri,'Completed'),{:resultURI => uri}) end - def error error - # TODO: switch task service to rdf - #RestClientWrapper.put(File.join(@uri,'Error'),{:errorReport => error.report.to_rdfxml}) - # create report for non-runtime errors - error.respond_to?(:reporti) ? report = error.report : report = OpenTox::ErrorReport.create(error) - RestClientWrapper.put(File.join(@uri,'Error'),{:errorReport => report.to_yaml}) - kill - raise error - end - # waits for a task, unless time exceeds or state is no longer running # @param [optional,Numeric] dur seconds pausing before checking again for completion def wait(dur=0.3) @@ -114,12 +104,11 @@ module OpenTox res = RestClientWrapper.put(File.join(@uri,method.sub(/=/,'')),{}) super unless res.code == 200 else - response = metadata[RDF::OT[method]].to_s - response = metadata[RDF::OT1[method]].to_s if response.empty? # API 1.1 compatibility - if response.empty? - not_found_error "No #{method} metadata for #{@uri} " - end - return response + pull + response = self.[](RDF::OT[method]) + response = self.[](RDF::OT1[method]) if response.empty? # API 1.1 compatibility + internal_server_error "No #{method} metadata for #{@uri} " if response.empty? + return response.uniq.first.to_s end rescue OpenTox::Error raise $! -- cgit v1.2.3