summaryrefslogtreecommitdiff
path: root/lib/oxidized/api
diff options
context:
space:
mode:
Diffstat (limited to 'lib/oxidized/api')
-rw-r--r--lib/oxidized/api/rest.rb45
1 files changed, 38 insertions, 7 deletions
diff --git a/lib/oxidized/api/rest.rb b/lib/oxidized/api/rest.rb
index 4a5fbca..9e00837 100644
--- a/lib/oxidized/api/rest.rb
+++ b/lib/oxidized/api/rest.rb
@@ -3,6 +3,14 @@ module Oxidized
require 'json'
module API
class Rest
+ module Helpers
+ def send res, msg='OK', status=200
+ res['Content-Type'] = 'application/json'
+ res.status = status
+ res.body = JSON.dump msg
+ end
+ end
+ include Oxidized::API::Rest::Helpers
def initialize nodes, listen
@nodes = nodes
addr, port = listen.to_s.split ':'
@@ -18,26 +26,49 @@ module Oxidized
end
end
def maps
+ @web.mount '/nodes/next', Next, @nodes
@web.mount_proc '/nodes' do |req, res|
#script_name, #path_info
case req.path_info[1..-1]
# /nodes/reload - reloads list of nodes
when 'reload'
@nodes.load
- res.body = JSON.dump 'OK'
- # /nodes/next/node - moves node to head of queue
- when /next\/(.*)/
- @nodes.next $1
- res.body = JSON.dump 'OK'
+ send res
# /nodes/list - returns list of nodes
when 'list'
- res.body = JSON.dump @nodes.list
+ send res, @nodes.list
# /nodes/show/node - returns data about node
when /show\/(.*)/
- res.body = JSON.dump @nodes.show $1
+ send res, @nodes.show($1)
+ end
+ end
+ end
+
+ # /nodes/next/node - moves node to head of queue
+ class Next < WEBrick::HTTPServlet::AbstractServlet
+ include Oxidized::API::Rest::Helpers
+ def initialize server, nodes
+ super server
+ @nodes = nodes
+ end
+ def do_GET req, res
+ @nodes.next req.path_info[1..-1]
+ send res
+ end
+ def do_PUT req, res
+ node = req.path_info[1..-1]
+ begin
+ opt = JSON.load req.body
+ Log.debug "before: #{@nodes.list}"
+ @nodes.next node, opt
+ Log.debug "after: #{@nodes.list}"
+ send res
+ rescue JSON::ParserError
+ send res, 'broken JSON', 400
end
end
end
+
end
end
end