Class: Pi::Browser::Taskbar::Rails::ApiController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- Pi::Browser::Taskbar::Rails::ApiController
- Defined in:
- lib/pi/browser/taskbar/rails/engine.rb
Constant Summary collapse
- MAX_BODY_BYTES =
128 * 1024
Instance Method Summary collapse
Instance Method Details
#cancel_task ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/pi/browser/taskbar/rails/engine.rb', line 133 def cancel_task response = Pi::Browser::Taskbar::Rails.broker_client.cancel(params[:id]) case response["result"] when "accepted" render_snapshot(response.fetch("snapshot"), :accepted) when "cancelled" render_snapshot(response.fetch("snapshot"), :ok) when "not_found" render_error(:not_found, "task_not_found", "Task was not found", response["snapshot"]) when "not_cancellable" render_error(:conflict, "task_not_cancellable", "Task can no longer be stopped", response["snapshot"]) when "unavailable" render_error(:service_unavailable, "unavailable", "Pi is not ready", response["snapshot"]) else render_unavailable end rescue Broker::Unavailable render_unavailable end |
#reset_session ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/pi/browser/taskbar/rails/engine.rb', line 115 def reset_session response = Pi::Browser::Taskbar::Rails.broker_client.reset case response["result"] when "accepted" render_snapshot(response.fetch("snapshot"), :accepted) when "reset_while_busy" render_error(:conflict, "reset_while_busy", "A fresh session cannot start while Pi is busy", response["snapshot"]) when "session_reset_rejected" render_error(:conflict, "session_reset_rejected", "Pi kept the current session", response["snapshot"]) when "unavailable" render_error(:service_unavailable, "unavailable", "Pi is not ready", response["snapshot"]) else render_unavailable end rescue Broker::Unavailable render_unavailable end |
#state ⇒ Object
81 82 83 84 85 86 |
# File 'lib/pi/browser/taskbar/rails/engine.rb', line 81 def state response = Pi::Browser::Taskbar::Rails.broker_client.snapshot render_snapshot(response.fetch("snapshot"), :ok) rescue Broker::Unavailable render_unavailable end |
#tasks ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/pi/browser/taskbar/rails/engine.rb', line 88 def tasks body = request.raw_post return render_error(:payload_too_large, "oversized_payload", "Request body exceeds 128 KiB") if body.bytesize > MAX_BODY_BYTES task = JSON.parse(body) raise JSON::ParserError, "object required" unless task.is_a?(Hash) validated = Task.parse(task) response = Pi::Browser::Taskbar::Rails.broker_client.submit("prompt" => validated.prompt, "context" => validated.context) case response["result"] when "accepted" render_snapshot(response.fetch("snapshot"), :accepted) when "busy" render_error(:conflict, "busy", "Another Pi task is active", response["snapshot"]) when "unavailable" render_error(:service_unavailable, "unavailable", "Pi is not ready", response["snapshot"]) when "invalid" render_error(:unprocessable_entity, "invalid_task", "Task request is invalid") else render_unavailable end rescue JSON::ParserError render_error(:bad_request, "malformed_json", "Request body must be valid JSON") rescue Task::Invalid render_error(:unprocessable_entity, "invalid_task", "Task request is invalid") rescue Broker::Unavailable render_unavailable end |