summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--application.rb54
1 files changed, 16 insertions, 38 deletions
diff --git a/application.rb b/application.rb
index b6f7d9f..09d6c7e 100644
--- a/application.rb
+++ b/application.rb
@@ -4,8 +4,7 @@ module OpenTox
helpers do
def status_code uri
- sparql = "SELECT DISTINCT ?o WHERE { GRAPH <#{uri}> { <#{uri}> <#{RDF::OT.hasStatus}> ?o. } }"
- status = Backend::FourStore.query(sparql,"text/uri-list")#.strip.to_s
+ status = $mongo[SERVICE].find({:uri => uri}).distinct(:hasStatus).first
case status
when "Completed"
200
@@ -14,8 +13,7 @@ module OpenTox
when "Cancelled"
503
when "Error"
- sparql = "SELECT ?code WHERE { GRAPH <#{uri}> { <#{uri}> <#{RDF::OT.error}> ?error. ?error <#{RDF::OT.statusCode}> ?code } }"
- code = Backend::FourStore.query(sparql,"text/uri-list")
+ code = $mongo[SERVICE].find({:uri => uri}).distinct(:errorReport).first["statusCode"]
code != "" ? code.to_i : 500
else
500
@@ -24,70 +22,50 @@ module OpenTox
end
- head "/task/?" do
- end
-
- head '/task/:id/?' do
- halt 404 unless FourStore.head(@uri.split('?').first)
- end
-
get '/task/:id/?' do
uri = uri("/task/#{params[:id]}")
code = status_code(uri)
if @accept == "text/uri-list" # return resultURI
halt code, uri unless code == 200
- sparql = "SELECT ?o WHERE { GRAPH <#{uri}> { <#{uri}> <#{RDF::OT.resultURI}> ?o. } }"
- result_uri = Backend::FourStore.query(sparql,"text/uri-list").gsub(/"|'/,'').gsub(/\^\^.*$/,'')
- halt code, result_uri
+ halt code, $mongo[SERVICE].find({:uri => uri}).distinct(:resultURI).first
else
- rdf = FourStore.get(uri, @accept)
- halt code, rdf
+ halt code, render($mongo[SERVICE].find({:uri => uri}).first)
end
end
put '/task/:id/:status/?' do
uri = uri("/task/#{params[:id]}")
- sparql = []
+ metadata = { :hasStatus => params[:status] }
case params[:status]
when "Completed"
bad_request_error "No resultURI parameter recieved. Cannot complete task '#{uri}' without resultURI." unless params[:resultURI]
- sparql << "DELETE DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.hasStatus}> \"Running\"}}"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.hasStatus}> \"Completed\"}}"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.resultURI}> <#{params[:resultURI]}>}}"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.percentageCompleted}> \"100.0\"}}"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.finished_at}> \"#{DateTime.now}\"}}"
+ metadata.merge!({
+ :percentageCompleted => 100.0,
+ :finished_at => DateTime.now.to_s
+ })
when "Running"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.percentageCompleted}> \"#{params["percentageCompleted"].to_f}\"^^#{RDF::XSD.float}}" if params["percentageCompleted"]
+ metadata.merge!({ :percentageCompleted => params["percentageCompleted"].to_f}) if params["percentageCompleted"]
#task.waiting_for = params[:waiting_for] if params.has_key?("waiting_for")
when "Cancelled"
- sparql << "DELETE DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.hasStatus}> \"Running\"}}"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.hasStatus}> \"Cancelled\"}}"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.finished_at}> \"#{DateTime.now}\"}}"
+ metadata.merge!({ :finished_at => DateTime.now.to_s })
when "Error"
- sparql << "DELETE DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.hasStatus}> \"Running\"}}"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.hasStatus}> \"Error\"}}"
- sparql << "INSERT DATA { GRAPH <#{uri}> {<#{uri}> <#{RDF::OT.finished_at}> \"#{DateTime.now}\"}}"
- if params[:errorReport]
- id = params[:errorReport].split("\n").first.sub(/^(_:\w+) .*/,'\1')
- params[:errorReport] += "\n<#{uri}> <#{RDF::OT.error}> #{id} ."
- Backend::FourStore.post uri, params[:errorReport], "text/plain"
- end
+ metadata.merge!({ :finished_at => DateTime.now.to_s, })
+ metadata.merge!({ :errorReport => JSON.parse(params[:errorReport]) }) if params[:errorReport]
#if task.waiting_for and task.waiting_for.uri?
# try cancelling the child task
else
bad_request_error "Invalid status value: '"+params[:status].to_s+"'"
end
- sparql.each{|q| Backend::FourStore.update q}
+ render $mongo[SERVICE].find(:uri => uri).find_one_and_replace('$set' => metadata)
end
delete '/task/:id/?' do
uri = uri("/task/#{params[:id]}")
- sparql = "SELECT ?o WHERE { GRAPH <#{uri}> { <#{uri}> <#{RDF::OT.created_at}> ?o. } }"
- created_at = Backend::FourStore.query(sparql,"text/uri-list").gsub(/"|'/,'').gsub(/\^\^.*$/,'')
+ created_at = $mongo[SERVICE].find(:uri => uri).distinct(:created_at).first
created = DateTime.parse(created_at)
today = DateTime.now
daysback = (today - 30)
- (created <= daysback) ? (result = Backend::FourStore.delete uri) : (bad_request_error "Not allowed.")
+ (created <= daysback) ? render($mongo[SERVICE].find(:uri => uri).find_one_and_delete) : bad_request_error("Cannot delete tasks younger than 30 days.")
# prevent backend type and version displayed
result.split("\n").first
end