diff options
author | ch <ch@ch.in-silico.ch> | 2015-07-08 10:58:52 +0200 |
---|---|---|
committer | ch <ch@ch.in-silico.ch> | 2015-07-08 10:58:52 +0200 |
commit | 20a1624a96ccb25b0e046cd5927e8d2e7754c262 (patch) | |
tree | b6fff21db04f23518d193605fdf0e1e468380416 | |
parent | 9dce0e31d8dae049ec2bbe088c050dd8cc426c77 (diff) |
feature, error and task (almost) workingmongodb
-rw-r--r-- | application.rb | 54 |
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 |