diff options
Diffstat (limited to 'lib/task.rb')
-rw-r--r-- | lib/task.rb | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/lib/task.rb b/lib/task.rb index bcf806e..d45b0d2 100644 --- a/lib/task.rb +++ b/lib/task.rb @@ -6,15 +6,25 @@ module OpenTox attr_accessor :pid, :observer_pid - def self.create service_uri, params={} - - task = Task.new RestClientWrapper.post(service_uri,params).chomp + def self.create service_uri, subjectid=nil, params={} + + uri = RDF::URI.new File.join(service_uri,SecureRandom.uuid) + task = Task.new uri, subjectid + task.rdf << RDF::Statement.new(uri, RDF.type, RDF::OT.Task) + task.rdf << RDF::Statement.new(uri, RDF::DC.date, RDF::Literal.new(DateTime.now)) + task.rdf << RDF::Statement.new(uri, RDF::OT.hasStatus, RDF::Literal.new("Running")) + params.each {|k,v| task.rdf << RDF::Statement.new(uri, k, v)} + task.save pid = fork do begin result_uri = yield task.completed result_uri rescue - RestClientWrapper.put(File.join(task.uri,'Error'),{:errorReport => $!.report.to_yaml}) if $!.respond_to? :report + if $!.respond_to? :to_ntriples + RestClientWrapper.put(File.join(task.uri,'Error'),:errorReport => $!.to_ntriples,:content_type => 'text/plain') + else + RestClientWrapper.put(File.join(task.uri,'Error')) + end task.kill end end @@ -58,7 +68,8 @@ module OpenTox end def completed(uri) - #not_found_error "Result URI \"#{uri}\" does not exist." unless URI.accessible? uri + #puts uri + #not_found_error "Result URI \"#{uri}\" does not exist." unless URI.accessible? uri, @subjectid RestClientWrapper.put(File.join(@uri,'Completed'),{:resultURI => uri}) end @@ -68,7 +79,7 @@ module OpenTox def wait start_time = Time.new due_to_time = start_time + DEFAULT_TASK_MAX_DURATION - dur = 0 + dur = 0.3 while running? sleep dur dur = [[(Time.new - start_time)/20.0,0.3].max,300.0].min @@ -96,11 +107,6 @@ module OpenTox code >= 400 and code != 503 end - def errorReport - # TODO: fix rdf output at task service - not_implemented_error "RDF output of errorReports has to be fixed at task service" - end - [:hasStatus, :resultURI].each do |method| define_method method do response = self.[](RDF::OT[method]) |