Packages
new_relic_agent
1.10.0
1.40.3
1.40.2
1.40.1
1.40.0
1.39.0
1.38.0
1.37.0
1.36.0
1.35.0
1.34.0
1.33.0
1.32.0
1.31.1
1.31.0
1.30.0
1.29.0
1.28.0
1.27.8
1.27.7
1.27.6
1.27.5
1.27.4
1.27.3
1.27.2
1.27.1
1.27.0
1.26.0
1.25.3
1.25.2
1.25.1
1.25.0
1.24.5
1.24.4
1.24.3
1.24.2
1.24.1
1.24.0
1.24.0-rc.10
1.24.0-rc.9
1.24.0-rc.8
1.24.0-rc.7
1.23.6
1.23.5
1.23.4
1.23.3
1.23.2
1.23.1
1.23.0
1.23.0-rc.6
1.23.0-rc.5
1.23.0-rc.4
1.23.0-rc.3
1.23.0-rc.2
1.23.0-rc.1
1.22.6
1.22.5
1.22.4
1.22.3
1.22.2
1.22.1
1.22.0
1.21.2
1.21.1
1.21.0
1.21.0-rc.3
1.21.0-rc.1
1.20.0
1.20.0-rc.1
1.19.7
1.19.6
1.19.5
1.19.4
1.19.3
1.19.2
1.19.1
1.19.0
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.18.0-rc.5
1.18.0-rc.4
1.18.0-rc.2
1.18.0-rc.1
1.17.1
1.17.0
1.17.0-rc.4
1.17.0-rc.3
1.17.0-rc.2
1.17.0-rc.1
1.17.0-rc.0
1.16.7
1.16.6
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.16.0-rc.2
1.16.0-rc.1
1.16.0-rc.0
1.15.0
1.15.0-rc.3
1.15.0-rc.2
1.15.0-rc.1
1.14.0
1.13.1
1.13.0
1.12.0
1.11.0
1.10.2
1.10.1
1.10.0
1.9.12
1.9.11
1.9.10
1.9.9
1.9.8
1.9.7
1.9.6
1.9.5
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.0
1.7.0
1.6.2
1.6.1
1.6.0
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.0
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
New Relic's Open-Source Elixir Agent
Current section
Files
Jump to
Current section
Files
lib/new_relic/config.ex
defmodule NewRelic.Config do
@moduledoc """
New Relic Agent Configuration
All configuration items can be set via `ENV` variable _or_ via `Application` config
"""
@doc """
Configure your application name. **Required**
May contain up to 3 names seperated by `;`
"""
def app_name do
(System.get_env("NEW_RELIC_APP_NAME") || Application.get_env(:new_relic_agent, :app_name))
|> parse_app_names
end
@doc "Configure your New Relic License Key. **Required**"
def license_key,
do:
System.get_env("NEW_RELIC_LICENSE_KEY") ||
Application.get_env(:new_relic_agent, :license_key)
@doc "Configure the host to report to. Most customers have no need to set this."
def host,
do: System.get_env("NEW_RELIC_HOST") || Application.get_env(:new_relic_agent, :host)
@doc """
Configure the Agent logging mechanism.
Defaults to `"tmp/new_relic.log"`.
Options:
- `"stdout"`
- `"Logger"` Elixir's Logger
- `"memory"` (Useful for testing)
- `"file_name.log"`
"""
def logger,
do: System.get_env("NEW_RELIC_LOG") || Application.get_env(:new_relic_agent, :log)
@doc """
An optional list of key/value pairs that will be automatic custom attributes
on all event types reported (Transactions, etc).
Options:
- `{:system, "ENV_NAME"}` Read a System ENV variable
- `{module, function, args}` Call a function. Warning: Be very careful, this will get called a lot!
- `"foo"` A direct value
Example:
```
config :new_relic_agent,
automatic_attributes: [
environment: {:system, "APP_ENV"},
node_name: {Node, :self, []},
team_name: "Afterlife"
]
```
"""
def automatic_attributes do
Application.get_env(:new_relic_agent, :automatic_attributes, [])
|> Enum.into(%{}, fn
{name, {:system, env_var}} -> {name, System.get_env(env_var)}
{name, {m, f, a}} -> {name, apply(m, f, a)}
{name, value} -> {name, value}
end)
end
@doc """
An optional list of labels that will be applied to the application.
Configured with a single string containing a list of key-value pairs:
`key1:value1;key2:value2`
The delimiting characters `;` and `:` are not allowed in the `key` or `value`
Example:
```
config :new_relic_agent, labels: "region:west;env:prod"
```
"""
def labels do
(System.get_env("NEW_RELIC_LABELS") || Application.get_env(:new_relic_agent, :labels))
|> parse_labels()
end
@doc """
Some Agent features can be controlled via configuration
* `:error_collector_enabled` (default `true`)
"""
def feature?(:error_collector) do
case System.get_env("NEW_RELIC_ERROR_COLLECTOR_ENABLED") do
"true" -> true
"false" -> false
_ -> Application.get_env(:new_relic_agent, :error_collector_enabled, true)
end
end
@doc false
def enabled?, do: (harvest_enabled?() && app_name() && license_key() && true) || false
defp harvest_enabled?,
do:
System.get_env("NEW_RELIC_HARVEST_ENABLED") ||
Application.get_env(:new_relic_agent, :harvest_enabled, true)
defp parse_app_names(nil), do: nil
defp parse_app_names(name_string) do
name_string
|> String.split(";")
|> Enum.map(&String.trim/1)
end
defp parse_labels(nil), do: []
@label_splitter ~r/;|:/
defp parse_labels(label_string) do
label_string
|> String.split(@label_splitter, trim: true)
|> Enum.map(&String.trim/1)
|> Enum.chunk_every(2, 2, :discard)
end
@external_resource "VERSION"
@agent_version "VERSION" |> File.read!() |> String.trim()
@doc false
def agent_version, do: @agent_version
end