From 4387b9c8d477eb288e5bf3ca2409a60b246e63bd Mon Sep 17 00:00:00 2001 From: Ian Calvert Date: Mon, 11 Jun 2012 12:24:15 +0100 Subject: [PATCH] Removed angle brackets from queue list, added version numnber to index page, moved to 0.2.4, support for multiple queue names --- sinan.config | 2 +- src/semq.app.src | 2 +- src/semq_app.erl | 3 +-- src/semq_indexpage.erl | 6 +++++- src/semq_queuelist.erl | 10 +++++++++- src/semq_web.erl | 43 +++++++++++++++++++++++------------------- 6 files changed, 41 insertions(+), 25 deletions(-) diff --git a/sinan.config b/sinan.config index ae8a67b..af83b19 100644 --- a/sinan.config +++ b/sinan.config @@ -1,5 +1,5 @@ {project_name, semq}. -{project_vsn, "0.2.3"}. +{project_vsn, "0.2.4"}. {build_dir, "_build"}. diff --git a/src/semq.app.src b/src/semq.app.src index e029e18..0f7b4e5 100644 --- a/src/semq.app.src +++ b/src/semq.app.src @@ -2,7 +2,7 @@ %% application. {application, semq, [{description, "A simple message queue implementation accessible via POST and GET with an extremely small API"}, - {vsn, "0.2.3"}, + {vsn, "0.2.4"}, {modules, [semq_app, semq_sup]}, {registered,[semq_sup]}, diff --git a/src/semq_app.erl b/src/semq_app.erl index 354d46e..382ec62 100644 --- a/src/semq_app.erl +++ b/src/semq_app.erl @@ -5,7 +5,6 @@ %%% @copyright 2012 Ian Calvert %%%---------------------------------------------------------------- -module(semq_app). - -behaviour(application). %% Application callbacks @@ -33,7 +32,7 @@ start(_StartType, _StartArgs) -> ]} ], - cowboy:start_listener(web_frontend, 10000, + cowboy:start_listener(web_frontend, 100, cowboy_tcp_transport, [{port, get_port()}], cowboy_http_protocol, [{dispatch, Dispatch}] ), diff --git a/src/semq_indexpage.erl b/src/semq_indexpage.erl index 777f7a2..b3a362c 100644 --- a/src/semq_indexpage.erl +++ b/src/semq_indexpage.erl @@ -33,6 +33,10 @@ format_queues({ok, []}) -> format_queues({ok, Queues}) -> [<<"The following queues are currently running:
">>, lists:map(fun semq_indexpage:format_queue/1, Queues)]. + +get_version() -> + {ok, Vsn} = application:get_key(semq, vsn), + list_to_binary(Vsn). handle(Req, State) -> @@ -41,7 +45,7 @@ handle(Req, State) -> - Hooray! SEMQ is running correctly!
">>, + Hooray! SEMQ version ">>, get_version() ,<<" is running correctly!
">>, format_queues(frontend:get_all_queue_names()), <<" diff --git a/src/semq_queuelist.erl b/src/semq_queuelist.erl index 6134390..46196ff 100644 --- a/src/semq_queuelist.erl +++ b/src/semq_queuelist.erl @@ -23,11 +23,19 @@ init({_Any, http}, Req, []) -> {ok, Req, undefined}. +intersperse(_, []) -> []; +intersperse(_, [X]) -> [X]; +intersperse(Sep, [X|Xs]) -> [X|[Sep|intersperse(Sep, Xs)]]. +format_queues([]) -> + <<"[]">>; + +format_queues(Queues) -> + [<<"[\"">>, intersperse(<<"\",\"">>, Queues), <<"\"]">>]. handle(Req, State) -> {ok, Queues} = frontend:get_all_queue_names(), - {ok, Req2} = cowboy_http_req:reply(200, [], io_lib:format(<<"~p~n">>, [Queues]), Req), + {ok, Req2} = cowboy_http_req:reply(200, [], format_queues(Queues), Req), {ok, Req2, State}. terminate(_Req, _State) -> diff --git a/src/semq_web.erl b/src/semq_web.erl index bc7c720..35d2873 100644 --- a/src/semq_web.erl +++ b/src/semq_web.erl @@ -26,15 +26,20 @@ init({_Any, http}, Req, []) -> {ok, Req, undefined}. +extract_queue_names(PathFragments) -> + extract_queue_names(PathFragments, []). -extract_queue_name([<<"queue">> | [Queue | _]]) -> - {ok, Queue}; +extract_queue_names([<<"queue">> | [Queue | Remainder]], Queues) -> + extract_queue_names(Remainder, [Queue | Queues]); -extract_queue_name([_Key | [_Value | Remainder]]) -> - extract_queue_name(Remainder); +extract_queue_names([_Key | [_Value | Remainder]], Queues) -> + extract_queue_names(Remainder, Queues); -extract_queue_name(_) -> - {error, "No queue name in URL"}. +extract_queue_names(_, []) -> + {error, "No queue name in URL"}; + +extract_queue_names(_, Queues) -> + {ok, Queues}. queue_get_head(Queue, Req) -> case frontend:getrequest(Queue) of @@ -52,19 +57,19 @@ queue_get_head(Queue, Req) -> end. -queue_delete(Queue) -> - frontend:deleterequest(Queue). +queue_delete(Queues) -> + lists:foreach(fun frontend:deleterequest/1, Queues). -queue_post(Queue, Req) -> +queue_post(Queues, Req) -> {ok, Body, _Req} = cowboy_http_req:body(Req), {Type, Req2} = cowboy_http_req:header('Content-Type', Req), - post_message(Queue, Body, Type, Req2). + post_message(Queues, Body, Type, Req2). -post_message(Queue, Body, undefined, Req) -> - post_message(Queue, Body, <<"text/plain">>, Req); +post_message(Queues, Body, undefined, Req) -> + post_message(Queues, Body, <<"text/plain">>, Req); -post_message(Queue, Body, Type, Req) -> - frontend:postrequest(Queue, {Type, Body}), +post_message(Queues, Body, Type, Req) -> + lists:foreach(fun (Queue) -> frontend:postrequest(Queue, {Type, Body}) end, Queues), {ok, {<<"text/plain">>, <<"Posted">>}, Req}. jsonp_wrapper(Status, undefined, MimeType, Body) -> @@ -85,7 +90,7 @@ headerswithtype(Mimetype) -> handle_method('GET', Req) -> {Path, Req} = cowboy_http_req:path(Req), - {ok, Queue} = extract_queue_name(Path), + {ok, [Queue]} = extract_queue_names(Path), case queue_get_head(Queue, Req) of {ok, {Type, Message}, Req2} -> reply(200, Type, Message, Req2); @@ -95,8 +100,8 @@ handle_method('GET', Req) -> handle_method('POST', Req) -> {Path, Req} = cowboy_http_req:path(Req), - {ok, Queue} = extract_queue_name(Path), - {ok, {Type, Message}, Req2} = queue_post(Queue, Req), + {ok, Queues} = extract_queue_names(Path), + {ok, {Type, Message}, Req2} = queue_post(Queues, Req), cowboy_http_req:reply(200, headerswithtype(Type), Message, Req2); handle_method('HEAD', Req) -> @@ -104,8 +109,8 @@ handle_method('HEAD', Req) -> handle_method('DELETE', Req) -> {Path, Req} = cowboy_http_req:path(Req), - {ok, Queue} = extract_queue_name(Path), - queue_delete(Queue), + {ok, Queues} = extract_queue_names(Path), + queue_delete(Queues), cowboy_http_req:reply(200, headerswithtype(<<"text/plain">>), <<"deleted">>, Req). handle(Req, State) ->