From 53488b4377a99469e5e561ca9687faa9df6be91b Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Fri, 10 Feb 2023 17:51:36 +0800 Subject: [PATCH] fix: add push_gateway_server's validator --- apps/emqx_prometheus/src/emqx_prometheus_schema.erl | 10 +++++++++- .../emqx_prometheus/test/emqx_prometheus_api_SUITE.erl | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/emqx_prometheus/src/emqx_prometheus_schema.erl b/apps/emqx_prometheus/src/emqx_prometheus_schema.erl index c13d198a2..fcda5dea0 100644 --- a/apps/emqx_prometheus/src/emqx_prometheus_schema.erl +++ b/apps/emqx_prometheus/src/emqx_prometheus_schema.erl @@ -26,7 +26,8 @@ fields/1, desc/1, translation/1, - convert_headers/1 + convert_headers/1, + validate_push_gateway_server/1 ]). namespace() -> "prometheus". @@ -41,6 +42,7 @@ fields("prometheus") -> #{ default => "http://127.0.0.1:9091", required => true, + validator => fun ?MODULE:validate_push_gateway_server/1, desc => ?DESC(push_gateway_server) } )}, @@ -158,6 +160,12 @@ convert_headers(Headers) when is_map(Headers) -> convert_headers(Headers) when is_list(Headers) -> Headers. +validate_push_gateway_server(Url) -> + case uri_string:parse(Url) of + #{scheme := S} when S =:= "https" orelse S =:= "http" -> ok; + _ -> {error, "Invalid url"} + end. + %% for CI test, CI don't load the whole emqx_conf_schema. translation(Name) -> emqx_conf_schema:translation(Name). diff --git a/apps/emqx_prometheus/test/emqx_prometheus_api_SUITE.erl b/apps/emqx_prometheus/test/emqx_prometheus_api_SUITE.erl index 0968100b8..c4867d9fd 100644 --- a/apps/emqx_prometheus/test/emqx_prometheus_api_SUITE.erl +++ b/apps/emqx_prometheus/test/emqx_prometheus_api_SUITE.erl @@ -92,6 +92,12 @@ t_prometheus_api(_) -> NewConf1 = Conf#{<<"enable">> => (not Enable)}, {ok, _Response3} = emqx_mgmt_api_test_util:request_api(put, Path, "", Auth, NewConf1), ?assertEqual((not Enable), undefined =/= erlang:whereis(emqx_prometheus)), + + ConfWithoutScheme = Conf#{<<"push_gateway_server">> => "127.0.0.1:8081"}, + ?assertMatch( + {error, {"HTTP/1.1", 400, _}}, + emqx_mgmt_api_test_util:request_api(put, Path, "", Auth, ConfWithoutScheme) + ), ok. t_stats_api(_) ->