summaryrefslogtreecommitdiff
path: root/application.rb
blob: 09d6c7e0dcf9ea0263d07222e78c6b757bb60434 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
module OpenTox
  class Application < Service

    helpers do

      def status_code uri
        status = $mongo[SERVICE].find({:uri => uri}).distinct(:hasStatus).first
        case status
        when "Completed"
          200
        when "Running"
          202
        when "Cancelled"
          503
        when "Error"
          code = $mongo[SERVICE].find({:uri => uri}).distinct(:errorReport).first["statusCode"]
          code != "" ? code.to_i : 500
        else
          500
        end
      end

    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
        halt code, $mongo[SERVICE].find({:uri => uri}).distinct(:resultURI).first
      else
        halt code, render($mongo[SERVICE].find({:uri => uri}).first)
      end
    end

    put '/task/:id/:status/?' do
      uri = uri("/task/#{params[:id]}")
      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]
        metadata.merge!({
          :percentageCompleted => 100.0,
          :finished_at => DateTime.now.to_s
        })
      when "Running"
        metadata.merge!({ :percentageCompleted => params["percentageCompleted"].to_f}) if params["percentageCompleted"]
        #task.waiting_for = params[:waiting_for] if params.has_key?("waiting_for")
      when "Cancelled"
        metadata.merge!({ :finished_at => DateTime.now.to_s })
      when "Error"
        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
      render  $mongo[SERVICE].find(:uri => uri).find_one_and_replace('$set' => metadata)
    end
    
    delete '/task/:id/?' do
      uri = uri("/task/#{params[:id]}")
      created_at = $mongo[SERVICE].find(:uri => uri).distinct(:created_at).first
      created = DateTime.parse(created_at)
      today = DateTime.now
      daysback = (today - 30)
      (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

  end
end