summaryrefslogtreecommitdiff
path: root/src/couch_prometheus/src/couch_prometheus_http.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/couch_prometheus/src/couch_prometheus_http.erl')
-rw-r--r--src/couch_prometheus/src/couch_prometheus_http.erl112
1 files changed, 0 insertions, 112 deletions
diff --git a/src/couch_prometheus/src/couch_prometheus_http.erl b/src/couch_prometheus/src/couch_prometheus_http.erl
deleted file mode 100644
index b3df1ea4b..000000000
--- a/src/couch_prometheus/src/couch_prometheus_http.erl
+++ /dev/null
@@ -1,112 +0,0 @@
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
--module(couch_prometheus_http).
-
--compile(tuple_calls).
-
--export([
- start_link/0,
- handle_request/1
-]).
-
--include("couch_prometheus.hrl").
--include_lib("couch/include/couch_db.hrl").
-
-start_link() ->
- IP =
- case config:get("prometheus", "bind_address", "any") of
- "any" -> any;
- Else -> Else
- end,
- Port = config:get("prometheus", "port"),
- ok = couch_httpd:validate_bind_address(IP),
-
- Options = [
- {name, ?MODULE},
- {loop, fun ?MODULE:handle_request/1},
- {ip, IP},
- {port, Port}
- ],
- case mochiweb_http:start(Options) of
- {ok, Pid} ->
- {ok, Pid};
- {error, Reason} ->
- io:format("Failure to start Mochiweb: ~s~n", [Reason]),
- {error, Reason}
- end.
-
-handle_request(MochiReq) ->
- RawUri = MochiReq:get(raw_path),
- {"/" ++ Path, _, _} = mochiweb_util:urlsplit_path(RawUri),
- PathParts = string:tokens(Path, "/"),
- try
- case PathParts of
- ["_node", Node, "_prometheus"] ->
- send_prometheus(MochiReq, Node);
- _ ->
- send_error(MochiReq, 404, <<"not_found">>, <<>>)
- end
- catch
- T:R ->
- Body = list_to_binary(io_lib:format("~p:~p", [T, R])),
- send_error(MochiReq, 500, <<"server_error">>, Body)
- end.
-
-send_prometheus(MochiReq, Node) ->
- Type = "text/plain; version=" ++ ?PROMETHEUS_VERSION,
- Headers =
- couch_httpd:server_header() ++
- [
- {<<"Content-Type">>, ?l2b(Type)}
- ],
- Body = call_node(Node, couch_prometheus_server, scrape, []),
- send_resp(MochiReq, 200, Headers, Body).
-
-send_resp(MochiReq, Status, ExtraHeaders, Body) ->
- Headers = couch_httpd:server_header() ++ ExtraHeaders,
- MochiReq:respond({Status, Headers, Body}).
-
-send_error(MochiReq, Code, Error, Reason) ->
- Headers =
- couch_httpd:server_header() ++
- [
- {<<"Content-Type">>, <<"application/json">>}
- ],
- JsonError =
- {[
- {<<"error">>, Error},
- {<<"reason">>, Reason}
- ]},
- Body = ?JSON_ENCODE(JsonError),
- MochiReq:respond({Code, Headers, Body}).
-
-call_node("_local", Mod, Fun, Args) ->
- call_node(node(), Mod, Fun, Args);
-call_node(Node0, Mod, Fun, Args) when is_list(Node0) ->
- Node1 =
- try
- list_to_existing_atom(Node0)
- catch
- error:badarg ->
- NoNode = list_to_binary(Node0),
- throw({not_found, <<"no such node: ", NoNode/binary>>})
- end,
- call_node(Node1, Mod, Fun, Args);
-call_node(Node, Mod, Fun, Args) when is_atom(Node) ->
- case rpc:call(Node, Mod, Fun, Args) of
- {badrpc, nodedown} ->
- Reason = list_to_binary(io_lib:format("~s is down", [Node])),
- throw({error, {nodedown, Reason}});
- Else ->
- Else
- end.