From 611d5e5623c42c3cd3c4c1bae44c0d09d7a1a939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Guti=C3=A9rrez?= Date: Mon, 9 Aug 2021 18:56:12 +0200 Subject: [PATCH 1/4] Parse SSL options from grpc endpoints --- .../src/opentelemetry_exporter.erl | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl b/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl index 3aa73bdd..eed9ec9e 100644 --- a/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl +++ b/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl @@ -152,7 +152,8 @@ shutdown(#state{channel_pid=Pid}) -> %% grpcbox_endpoints(Endpoints) -> - [{scheme(Scheme), Host, Port, []} || #{scheme := Scheme, host := Host, port := Port} <- Endpoints]. + [{scheme(Scheme), Host, Port, SSLOptions} || + #{scheme := Scheme, host := Host, port := Port, ssl_options := SSLOptions} <- Endpoints]. headers_to_grpc_metadata(Headers) -> lists:foldl(fun({X, Y}, Acc) -> @@ -186,8 +187,8 @@ endpoint(Endpoint) -> Parsed end. -parse_endpoint({Scheme, Host, Port, _}) -> - {true, #{scheme => atom_to_list(Scheme), host => Host, port => Port, path => []}}; +parse_endpoint({Scheme, Host, Port, SSLOptions}) -> + {true, #{scheme => atom_to_list(Scheme), host => Host, port => Port, path => [], ssl_options => SSLOptions}}; parse_endpoint(Endpoint=#{host := _Host, port := _Port, scheme := _Scheme, path := _Path}) -> {true, Endpoint}; parse_endpoint(Endpoint=#{host := _Host, scheme := _Scheme, path := _Path}) -> @@ -243,8 +244,8 @@ endpoints_append_path(E) when is_list(E) -> endpoints_append_path(E) -> [append_path(E)]. -append_path({Scheme, Host, Port, _}) -> - #{scheme => atom_to_list(Scheme), host => Host, port => Port, path => "/v1/traces"}; +append_path({Scheme, Host, Port, SSLOptions}) -> + #{scheme => atom_to_list(Scheme), host => Host, port => Port, path => "/v1/traces", ssl_options => SSLOptions}; append_path(Endpoint=#{path := Path}) -> Endpoint#{path => filename:join(Path, ?DEFAULT_TRACES_PATH)}; append_path(EndpointString) when is_list(EndpointString) orelse is_binary(EndpointString) -> From b81cc01cc430cf10bf6ceb25469c51f8159e43f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Guti=C3=A9rrez?= Date: Mon, 9 Aug 2021 19:26:52 +0200 Subject: [PATCH 2/4] Support grpcbox endpoints without ssl options --- apps/opentelemetry_exporter/src/opentelemetry_exporter.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl b/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl index eed9ec9e..09e21c09 100644 --- a/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl +++ b/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl @@ -152,8 +152,8 @@ shutdown(#state{channel_pid=Pid}) -> %% grpcbox_endpoints(Endpoints) -> - [{scheme(Scheme), Host, Port, SSLOptions} || - #{scheme := Scheme, host := Host, port := Port, ssl_options := SSLOptions} <- Endpoints]. + [{scheme(Scheme), Host, Port, maps:get(ssl_options, Endpoint, [])} || + #{scheme := Scheme, host := Host, port := Port} = Endpoint <- Endpoints]. headers_to_grpc_metadata(Headers) -> lists:foldl(fun({X, Y}, Acc) -> From 723b08122cbafe6fb339ec297cab78eb89ada723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Guti=C3=A9rrez?= Date: Mon, 9 Aug 2021 20:01:09 +0200 Subject: [PATCH 3/4] Slightly more robust endpoint parsing --- apps/opentelemetry_exporter/src/opentelemetry_exporter.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl b/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl index 09e21c09..b2e5666c 100644 --- a/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl +++ b/apps/opentelemetry_exporter/src/opentelemetry_exporter.erl @@ -187,8 +187,10 @@ endpoint(Endpoint) -> Parsed end. -parse_endpoint({Scheme, Host, Port, SSLOptions}) -> +parse_endpoint({Scheme, Host, Port, SSLOptions}) when is_list(SSLOptions) -> {true, #{scheme => atom_to_list(Scheme), host => Host, port => Port, path => [], ssl_options => SSLOptions}}; +parse_endpoint({Scheme, Host, Port, _}) -> + {true, #{scheme => atom_to_list(Scheme), host => Host, port => Port, path => []}}; parse_endpoint(Endpoint=#{host := _Host, port := _Port, scheme := _Scheme, path := _Path}) -> {true, Endpoint}; parse_endpoint(Endpoint=#{host := _Host, scheme := _Scheme, path := _Path}) -> From f5ce58ae1f56b47b6438c38d1a6c86809524e927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Guti=C3=A9rrez?= Date: Tue, 10 Aug 2021 15:46:53 +0200 Subject: [PATCH 4/4] Add ssl_options parsing tests --- .../test/opentelemetry_exporter_SUITE.erl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/opentelemetry_exporter/test/opentelemetry_exporter_SUITE.erl b/apps/opentelemetry_exporter/test/opentelemetry_exporter_SUITE.erl index e0b68e4f..30d405c3 100644 --- a/apps/opentelemetry_exporter/test/opentelemetry_exporter_SUITE.erl +++ b/apps/opentelemetry_exporter/test/opentelemetry_exporter_SUITE.erl @@ -42,9 +42,14 @@ configuration(_Config) -> try ?assertMatch(#{endpoints := [#{scheme := "http", host := "localhost", - port := 9090, path := "/v1/traces"}]}, + port := 9090, path := "/v1/traces", ssl_options := []}]}, opentelemetry_exporter:merge_with_environment(#{endpoints => [{http, "localhost", 9090, []}]})), + ?assertMatch(#{endpoints := + [#{scheme := "http", host := "localhost", + port := 9090, path := "/v1/traces", ssl_options := [{verify, verify_none}]}]}, + opentelemetry_exporter:merge_with_environment(#{endpoints => [{http, "localhost", 9090, [{verify, verify_none}]}]})), + ?assertMatch([#{scheme := "http", host := "localhost", port := 443, path := []}], opentelemetry_exporter:endpoints(["http://localhost:443"])),