diff options
author | Christoph Helma <helma@in-silico.ch> | 2012-05-09 16:18:47 +0000 |
---|---|---|
committer | Christoph Helma <helma@in-silico.ch> | 2012-05-09 16:18:47 +0000 |
commit | 13ec52dff891dfe8f1f04315d8d8b5075e4b32e1 (patch) | |
tree | a25a7c94c213e60c6d9d64a1df60465c854faaa5 /lib/task.rb | |
parent | af80cd0ee7c5ecfc8033952b11382b50f67f99e8 (diff) | |
parent | d0c219c5f04edce6ba74b3a937af412bcf24af14 (diff) |
Merge branch 'feature/task' into development
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]) |