Skip to content

Commit

Permalink
Remove usage of the transitive dependency Optimal (#33)
Browse files Browse the repository at this point in the history
* Remove usage of the transitive dependency Optimal

* Tidy up api_server opts, with sane defaults for all options

* Move start_link docs back to the function itself

Co-authored-by: Greg Mefford <[email protected]>
  • Loading branch information
kamilkowalski and GregMefford authored Sep 25, 2021
1 parent 7bc86c9 commit 459d217
Showing 1 changed file with 23 additions and 38 deletions.
61 changes: 23 additions & 38 deletions lib/spandex_datadog/api_server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -35,53 +35,36 @@ defmodule SpandexDatadog.ApiServer do

@headers [{"Content-Type", "application/msgpack"}]

@start_link_opts Optimal.schema(
opts: [
host: :string,
port: [:integer, :string],
verbose?: :boolean,
http: :atom,
batch_size: :integer,
sync_threshold: :integer,
api_adapter: :atom
],
defaults: [
host: "localhost",
port: 8126,
verbose?: false,
batch_size: 10,
sync_threshold: 20,
api_adapter: SpandexDatadog.ApiServer
],
required: [:http],
describe: [
verbose?: "Only to be used for debugging: All finished traces will be logged",
host: "The host the agent can be reached at",
port: "The port to use when sending traces to the agent",
batch_size: "The number of traces that should be sent in a single batch",
sync_threshold:
"The maximum number of processes that may be sending traces at any one time. This adds backpressure",
http:
"The HTTP module to use for sending spans to the agent. Currently only HTTPoison has been tested",
api_adapter: "Which api adapter to use. Currently only used for testing"
]
)
@default_opts [
host: "localhost",
http: HTTPoison,
port: 8126,
verbose?: false,
batch_size: 10,
sync_threshold: 20,
api_adapter: SpandexDatadog.ApiServer
]

@doc """
Starts genserver with given options.
Starts the ApiServer with given options.
#{Optimal.Doc.document(@start_link_opts)}
## Options
* `:http` - The HTTP module to use for sending spans to the agent. Defaults to `HTTPoison`.
* `:host` - The host the agent can be reached at. Defaults to `"localhost"`.
* `:port` - The port to use when sending traces to the agent. Defaults to `8126`.
* `:verbose?` - Only to be used for debugging: All finished traces will be logged. Defaults to `false`
* `:batch_size` - The number of traces that should be sent in a single batch. Defaults to `10`.
* `:sync_threshold` - The maximum number of processes that may be sending traces at any one time. This adds backpressure. Defaults to `20`.
"""
@spec start_link(opts :: Keyword.t()) :: GenServer.on_start()
def start_link(opts) do
opts = Optimal.validate!(opts, @start_link_opts)
def start_link(opts \\ []) do
opts = Keyword.merge(@default_opts, opts)

GenServer.start_link(__MODULE__, opts, name: __MODULE__)
end

@doc """
Builds server state.
"""
@doc false
@spec init(opts :: Keyword.t()) :: {:ok, State.t()}
def init(opts) do
{:ok, agent_pid} = Agent.start_link(fn -> 0 end)
Expand Down Expand Up @@ -150,12 +133,14 @@ defmodule SpandexDatadog.ApiServer do
end

@deprecated "Please use format/3 instead"
@doc false
@spec format(Trace.t()) :: map()
def format(%Trace{spans: spans, priority: priority, baggage: baggage}) do
Enum.map(spans, fn span -> format(span, priority, baggage) end)
end

@deprecated "Please use format/3 instead"
@doc false
@spec format(Span.t()) :: map()
def format(%Span{} = span), do: format(span, 1, [])

Expand Down

0 comments on commit 459d217

Please sign in to comment.