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(_) ->