summaryrefslogtreecommitdiff
path: root/lib/task.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/task.rb')
-rw-r--r--lib/task.rb28
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])