Packages
logflare_ex
0.1.0-dev-79b32387
0.2.0-dev.b339a6b8
0.2.0-dev.980340db
0.2.0-dev.5d01deca
0.2.0-dev.236c1c6b
0.2.0-dev.082a725d
0.2.0-dev.1718089325.ea5f751
0.2.0-dev.1718053351.fca7edd
0.2.0-dev.1718049151.46c51d9
0.2.0-dev.1718049098.9ad6f45
0.2.0-dev.1715303639.8521594
0.2.0-dev.1701249644.103466d
0.1.1
0.1.1-dev-5d6bc7c9
0.1.0
0.1.0-dev-a70912b8
0.1.0-dev-79b32387
Logflare Elixir SDK
Current section
Files
Jump to
Current section
Files
lib/logflare_ex/client.ex
defmodule LogflareEx.Client do
@moduledoc false
@default_tesla_adapter {Tesla.Adapter.Finch, name: LogflareEx.Finch, receive_timeout: 30_000}
use TypedStruct
typedstruct do
@typedoc "Logflare client"
field(:tesla_client, Tesla.Client.t(), enforce: true)
field(:api_key, String.t(), enforce: true)
field(:api_url, String.t(), default: "https://api.logflare.app")
field(:source_token, String.t())
end
@typep opts :: [api_key: String.t(), api_url: String.t(), tesla_client: Tesla.Client.t()]
@spec new(opts) :: t()
def new(opts \\ []) do
opts =
Enum.into(opts, %{
api_url: get_config_value(:api_url) || "https://api.logflare.app",
api_key: get_config_value(:api_key),
adapter: get_config_value(:adapter) || @default_tesla_adapter,
source_token: get_config_value(:source_token),
tesla_client: nil
})
tesla_client =
make_tesla_client(
opts.api_url,
opts.api_key,
opts.adapter
)
struct(__MODULE__, %{opts | tesla_client: tesla_client})
end
defp make_tesla_client(
api_url,
api_key,
adapter
) do
middlewares = [
Tesla.Middleware.FollowRedirects,
{Tesla.Middleware.Headers,
[
{"x-api-key", api_key},
{"content-type", "application/bert"}
]},
{Tesla.Middleware.BaseUrl, api_url},
{Tesla.Middleware.Compression, format: "gzip"}
]
Tesla.client(middlewares, adapter)
end
defp get_config_value(key) do
Application.get_env(:logflare_ex, key)
end
end