Class: RedfishTools::Servlet
- Inherits:
-
WEBrick::HTTPServlet::AbstractServlet
- Object
- WEBrick::HTTPServlet::AbstractServlet
- RedfishTools::Servlet
- Extended by:
- Forwardable
- Defined in:
- lib/redfish_tools/servlet.rb
Constant Summary collapse
- BAD_HEADERS =
Set.new(["connection", "content-length", "keep-alive"])
- DEFAULT_HEADERS =
{ "content-type" => "application/json" }.freeze
- TRANSITIONS =
{ "PoweringOn" => {}.freeze, "On" => { "GracefulShutdown" => "Off", "ForceOff" => "Off", "PushPowerButton" => "Off", "Nmi" => "Off", "GracefulRestart" => "On", "ForceRestart" => "On", "PowerCycle" => "On", }.freeze, "PoweringOff" => {}.freeze, "Off" => { "On" => "On", "ForceOn" => "On", "PushPowerButton" => "On", }.freeze, }.freeze
- TASK_TRANSITIONS =
{ "New" => "Starting", "Starting" => "Running", "Running" => "Completed", "Completed" => "Completed", }
Instance Method Summary collapse
- #do_DELETE(request, response) ⇒ Object
- #do_GET(request, response) ⇒ Object
- #do_PATCH(request, response) ⇒ Object
- #do_POST(request, response) ⇒ Object
- #do_PUT(_request, response) ⇒ Object
- #service(request, response) ⇒ Object
Instance Method Details
#do_DELETE(request, response) ⇒ Object
112 113 114 115 116 117 118 |
# File 'lib/redfish_tools/servlet.rb', line 112 def do_DELETE(request, response) item = datastore.get(request.path) return response.status = 404 unless item.body delete_item(item) response.status = 204 end |
#do_GET(request, response) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/redfish_tools/servlet.rb', line 54 def do_GET(request, response) return response.status = 404 unless datastore.get(request.path).body item = datastore.get(request.path) response.status = 200 if request.path.chomp("/").end_with?("monitor") && item.body["TaskState"] item.body["TaskState"] = TASK_TRANSITIONS[item.body["TaskState"]] response.status = 202 if item.body["TaskState"] == "Completed" response.status = 200 item.body["EndTime"] = Time.now.utc.iso8601 end end set_headers(response, item.headers) response.body = item.body.to_json end |
#do_PATCH(request, response) ⇒ Object
101 102 103 104 105 106 107 108 109 110 |
# File 'lib/redfish_tools/servlet.rb', line 101 def do_PATCH(request, response) system = datastore.get(request.path) return response.status = 404 unless system.body system.body = Utils.combine_hashes(system.body, JSON.parse(request.body)) response.status = 200 rescue Exceptions::MergeConflict => error response.status = 405 set_headers(response) response.body = error_body(error).to_json end |
#do_POST(request, response) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/redfish_tools/servlet.rb', line 73 def do_POST(request, response) action = actions[request.path] item = datastore.get(request.path) return response.status = 404 unless action || item.body return response.status = 405 if action.nil? && item.body["Members"].nil? data = JSON.parse(request.body) if action body, headers, status = execute_action(action, data) elsif login_path?(request.path) body, headers, status = login(item, data) else body, headers, status = new_item(item, data) end response.status = status set_headers(response, headers) response.body = body.to_json rescue JSON::ParserError response.status = 400 set_headers(response) response.body = error_body("Invalid JSON").to_json end |
#do_PUT(_request, response) ⇒ Object
97 98 99 |
# File 'lib/redfish_tools/servlet.rb', line 97 def do_PUT(_request, response) response.status = 501 end |
#service(request, response) ⇒ Object
48 49 50 51 52 |
# File 'lib/redfish_tools/servlet.rb', line 48 def service(request, response) return response.status = 401 unless (request) super end |