Skip to content

Commit

Permalink
Changed interface for accessing the queues, now uses /queue/queuename…
Browse files Browse the repository at this point in the history
…, also provides /queues which lists all live queues
  • Loading branch information
IanCal committed Nov 3, 2011
1 parent 7c42919 commit c866b64
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 17 deletions.
1 change: 0 additions & 1 deletion Makefile
Expand Up @@ -26,4 +26,3 @@ dialyzer:

app:
@$(REBAR) create template=mochiwebapp dest=$(DEST) appid=$(PROJECT)

5 changes: 4 additions & 1 deletion src/frontend.erl
@@ -1,6 +1,9 @@
-module(frontend).
-import(routing).
-export([getrequest/1, postrequest/2, deleterequest/1]).
-export([getrequest/1, postrequest/2, deleterequest/1, get_all_queue_names/0]).

get_all_queue_names() ->
routing:getqueues().

postrequest(QueueName, Message) ->
{ok, Pid} = routing:getqueue(QueueName),
Expand Down
9 changes: 8 additions & 1 deletion src/routing.erl
Expand Up @@ -4,7 +4,7 @@
-behaviour(gen_server).
-export([start_link/0, stop/0]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-export([getqueue/1, deletequeue/1]).
-export([getqueue/1, deletequeue/1, getqueues/0]).

-import(messagequeue).

Expand All @@ -15,6 +15,9 @@
start_link() ->
gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).

getqueues() ->
gen_server:call(?SERVER, {getqueues}).

getqueue(QueueName) ->
gen_server:call(?SERVER, {getqueue, QueueName}).

Expand All @@ -29,6 +32,10 @@ init([]) ->
}
}.

handle_call({getqueues}, _From, State) ->
Queues = [QueueName || {QueueName, _} <- ets:tab2list(State#state.id2pid)],
{reply, {ok, Queues}, State};

handle_call({getqueue, QueueName}, _From, State) ->
case ets:lookup(State#state.id2pid, QueueName) of
[] ->
Expand Down
45 changes: 32 additions & 13 deletions src/semq_web.erl
Expand Up @@ -39,26 +39,45 @@ get_request(Req, Queue) ->
Req:respond({404, headers(),
io_lib:format("~p~n", [Reason])})
end.

listqueues_request(Req) ->
{ok, Queues} = frontend:get_all_queue_names(),
Req:respond({200, headers(), io_lib:format("~p~n", [Queues])}).

post_request(Req, Queue, Message) ->
frontend:postrequest(Queue, Message),
Req:respond({200, [{"Content-Type", "text/plain"}], "Posted"}).


process_request("queue/"++Queue, Req) ->
case Req:get(method) of
'GET' ->
get_request(Req, Queue);
'HEAD' ->
head_request(Req);
'POST' ->
Message = Req:recv_body(),
post_request(Req, Queue, Message);
'DELETE' ->
delete_request(Req, Queue);
_ ->
Req:respond({405, [], []})
end;

process_request("queues", Req) ->
case Req:get(method) of
'GET' ->
listqueues_request(Req);
'HEAD' ->
head_request(Req);
_ ->
Req:respond({405, [], []})
end.

loop(Req, _DocRoot) ->
"/" ++ Path = Req:get(path),
try
case Req:get(method) of
'GET' ->
get_request(Req, Path);
'HEAD' ->
head_request(Req);
'POST' ->
Message = Req:recv_body(),
post_request(Req, Path, Message);
'DELETE' ->
delete_request(Req, Path);
_ ->
Req:respond({501, [], []})
end
process_request(Path, Req)
catch
Type:What ->
Report = ["web request failed",
Expand Down
1 change: 0 additions & 1 deletion start-dev.sh
@@ -1,5 +1,4 @@
#!/bin/sh
# NOTE: mustache templates need \ because they are not awesome.
exec erl -pa ebin edit deps/*/ebin -boot start_sasl \
-sname semq_dev \
-s semq \
Expand Down

0 comments on commit c866b64

Please sign in to comment.