Skip to content

Commit f0c6a5a

Browse files
Merge pull request #234 from getsentry/system-env-list
Allow string for included_environments by splitting on commas
2 parents 3f58364 + a067c10 commit f0c6a5a

File tree

6 files changed

+59
-21
lines changed

6 files changed

+59
-21
lines changed

lib/sentry/config.ex

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
defmodule Sentry.Config do
22
@moduledoc """
33
This module provides the functionality for fetching configuration settings and their defaults.
4+
5+
Sentry supports loading config at runtime, via `{:system, SYSTEM_ENV_KEY}` tuples, where Sentry will read `SYSTEM_ENV_KEY` to get the config value from the system environment at runtime.
46
"""
57

68
@default_included_environments [:dev, :test, :prod]
@@ -19,8 +21,11 @@ defmodule Sentry.Config do
1921
get_config(:dsn, check_dsn: false)
2022
end
2123

24+
@doc """
25+
The `:included_environments` config key expects a list, but if given a string, it will split the string on commas to create a list.
26+
"""
2227
def included_environments do
23-
get_config(:included_environments, default: @default_included_environments, check_dsn: false)
28+
get_config(:included_environments, default: @default_included_environments, check_dsn: false, type: :list)
2429
end
2530

2631
def environment_name do
@@ -108,6 +113,7 @@ defmodule Sentry.Config do
108113
defp get_config(key, opts \\ []) when is_atom(key) do
109114
default = Keyword.get(opts, :default)
110115
check_dsn = Keyword.get(opts, :check_dsn, true)
116+
type = Keyword.get(opts, :type)
111117

112118
environment_result = case get_from_application_environment(key) do
113119
{:ok, value} -> {:ok, value}
@@ -120,11 +126,15 @@ defmodule Sentry.Config do
120126
end
121127

122128
case result do
123-
{:ok, value} -> value
129+
{:ok, value} -> convert_type(value, type)
124130
:not_found -> default
125131
end
126132
end
127133

134+
defp convert_type(value, nil), do: value
135+
defp convert_type(value, :list) when is_list(value), do: value
136+
defp convert_type(value, :list) when is_binary(value), do: String.split(value, ",")
137+
128138
defp get_from_application_environment(key) when is_atom(key) do
129139
case Application.fetch_env(:sentry, key) do
130140
{:ok, {:system, env_var}} -> get_from_system_environment(env_var)

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ defmodule Sentry.Mixfile do
3030
{:plug, "~> 1.0", optional: true},
3131

3232
{:dialyxir, "> 0.0.0", only: :dev},
33-
{:ex_doc, "~> 0.16.0", only: :dev},
33+
{:ex_doc, "~> 0.18.0", only: :dev},
3434
{:credo, "~> 0.8", only: [:dev, :test], runtime: false},
3535
{:bypass, "~> 0.8.0", only: [:test]}
3636
]

mix.lock

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
%{"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], []},
1+
%{"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"},
22
"bypass": {:hex, :bypass, "0.8.1", "16d409e05530ece4a72fabcf021a3e5c7e15dcc77f911423196a0c551f2a15ca", [:mix], [{:cowboy, "~> 1.0", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"},
3-
"certifi": {:hex, :certifi, "1.1.0", "c9b71a547016c2528a590ccfc28de786c7edb74aafa17446b84f54e04efc00ee", [:rebar3], []},
4-
"cowboy": {:hex, :cowboy, "1.1.2", "61ac29ea970389a88eca5a65601460162d370a70018afe6f949a29dca91f3bb0", [:rebar3], [{:cowlib, "~> 1.0.2", [hex: :cowlib, optional: false]}, {:ranch, "~> 1.3.2", [hex: :ranch, optional: false]}]},
5-
"cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], []},
6-
"credo": {:hex, :credo, "0.8.6", "335f723772d35da499b5ebfdaf6b426bfb73590b6fcbc8908d476b75f8cbca3f", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}], "hexpm"},
7-
"dialyxir": {:hex, :dialyxir, "0.5.0", "5bc543f9c28ecd51b99cc1a685a3c2a1a93216990347f259406a910cf048d1d7", [:mix], []},
3+
"certifi": {:hex, :certifi, "1.1.0", "c9b71a547016c2528a590ccfc28de786c7edb74aafa17446b84f54e04efc00ee", [:rebar3], [], "hexpm"},
4+
"cowboy": {:hex, :cowboy, "1.1.2", "61ac29ea970389a88eca5a65601460162d370a70018afe6f949a29dca91f3bb0", [:rebar3], [{:cowlib, "~> 1.0.2", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3.2", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm"},
5+
"cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], [], "hexpm"},
6+
"credo": {:hex, :credo, "0.8.10", "261862bb7363247762e1063713bb85df2bbd84af8d8610d1272cd9c1943bba63", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}], "hexpm"},
7+
"dialyxir": {:hex, :dialyxir, "0.5.0", "5bc543f9c28ecd51b99cc1a685a3c2a1a93216990347f259406a910cf048d1d7", [:mix], [], "hexpm"},
88
"earmark": {:hex, :earmark, "1.2.3", "206eb2e2ac1a794aa5256f3982de7a76bf4579ff91cb28d0e17ea2c9491e46a4", [:mix], [], "hexpm"},
9-
"ex_doc": {:hex, :ex_doc, "0.16.3", "cd2a4cfe5d26e37502d3ec776702c72efa1adfa24ed9ce723bb565f4c30bd31a", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}], "hexpm"},
10-
"hackney": {:hex, :hackney, "1.8.0", "8388a22f4e7eb04d171f2cf0285b217410f266d6c13a4c397a6c22ab823a486c", [:rebar3], [{:certifi, "1.1.0", [hex: :certifi, optional: false]}, {:idna, "4.0.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, optional: false]}]},
11-
"idna": {:hex, :idna, "4.0.0", "10aaa9f79d0b12cf0def53038547855b91144f1bfcc0ec73494f38bb7b9c4961", [:rebar3], []},
12-
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], []},
13-
"mime": {:hex, :mime, "1.1.0", "01c1d6f4083d8aa5c7b8c246ade95139620ef8effb009edde934e0ec3b28090a", [:mix], []},
14-
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], []},
9+
"ex_doc": {:hex, :ex_doc, "0.18.1", "37c69d2ef62f24928c1f4fdc7c724ea04aecfdf500c4329185f8e3649c915baf", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}], "hexpm"},
10+
"hackney": {:hex, :hackney, "1.8.0", "8388a22f4e7eb04d171f2cf0285b217410f266d6c13a4c397a6c22ab823a486c", [:rebar3], [{:certifi, "1.1.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "4.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
11+
"idna": {:hex, :idna, "4.0.0", "10aaa9f79d0b12cf0def53038547855b91144f1bfcc0ec73494f38bb7b9c4961", [:rebar3], [], "hexpm"},
12+
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
13+
"mime": {:hex, :mime, "1.1.0", "01c1d6f4083d8aa5c7b8c246ade95139620ef8effb009edde934e0ec3b28090a", [:mix], [], "hexpm"},
14+
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"},
1515
"plug": {:hex, :plug, "1.4.3", "236d77ce7bf3e3a2668dc0d32a9b6f1f9b1f05361019946aae49874904be4aed", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}], "hexpm"},
16-
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []},
17-
"ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], []},
18-
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []},
16+
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"},
17+
"ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm"},
18+
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
1919
"ssl_verify_hostname": {:hex, :ssl_verify_hostname, "1.0.5", "2e73e068cd6393526f9fa6d399353d7c9477d6886ba005f323b592d389fb47be", [:make], []},
20-
"uuid": {:hex, :uuid, "1.1.7", "007afd58273bc0bc7f849c3bdc763e2f8124e83b957e515368c498b641f7ab69", [:mix], []}}
20+
"uuid": {:hex, :uuid, "1.1.8", "e22fc04499de0de3ed1116b770c7737779f226ceefa0badb3592e64d5cfb4eb9", [:mix], [], "hexpm"}}

test/config_test.exs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,17 @@ defmodule Sentry.ConfigTest do
3737
refute "test" == Config.source_code_path_pattern()
3838
end
3939
end
40+
41+
describe "included_environments" do
42+
test "retrieves and converts string from system environment" do
43+
delete_env(:sentry, [:included_environments])
44+
modify_system_env(%{"SENTRY_INCLUDED_ENVIRONMENTS" => "test,dev"})
45+
assert ["test", "dev"] == Config.included_environments()
46+
end
47+
48+
test "retrieves and converts string from config" do
49+
modify_env(:sentry, included_environments: "test,dev")
50+
assert ["test", "dev"] == Config.included_environments()
51+
end
52+
end
4053
end

test/event_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,9 @@ defmodule Sentry.EventTest do
164164
event = Sentry.Event.transform_exception(exception, [])
165165

166166
assert event.modules == %{bunt: "0.2.0", bypass: "0.8.1", certifi: "1.1.0", cowboy: "1.1.2",
167-
cowlib: "1.0.2", credo: "0.8.6", hackney: "1.8.0", idna: "4.0.0",
167+
cowlib: "1.0.2", credo: "0.8.10", hackney: "1.8.0", idna: "4.0.0",
168168
metrics: "1.0.1", mime: "1.1.0", mimerl: "1.0.2", plug: "1.4.3",
169169
poison: "3.1.0", ranch: "1.3.2", ssl_verify_fun: "1.1.1",
170-
uuid: "1.1.7"}
170+
uuid: "1.1.8"}
171171
end
172172
end

test/support/test_environment_helper.exs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,21 @@ defmodule Sentry.TestEnvironmentHelper do
1414
end)
1515
end
1616

17+
def delete_env(app, deletes) do
18+
original_env = Application.get_all_env(app)
19+
Enum.each(deletes, fn key -> Application.delete_env(app, key) end)
20+
21+
ExUnit.Callbacks.on_exit(fn ->
22+
Enum.each deletes, fn key ->
23+
if Keyword.has_key?(original_env, key) do
24+
Application.put_env(app, key, Keyword.fetch!(original_env, key))
25+
else
26+
Application.delete_env(app, key)
27+
end
28+
end
29+
end)
30+
end
31+
1732
def modify_system_env(overrides) when is_map(overrides) do
1833
original_env = System.get_env()
1934
System.put_env(overrides)

0 commit comments

Comments
 (0)