Packages

Elixir logging backend that sends your logs to HyperDX using the https bulk API

Current section

Files

Jump to
hyperdx lib hyperdx.ex
Raw

lib/hyperdx.ex

defmodule Hyperdx do
def send(messages) do
json_lines = Enum.join(messages, "\n")
# jsons = messages
# |> Enum.map(fn message ->
# decoded = Jason.decode!(message)
# updated = Map.put(decoded, :__hdx_sv, config(:service))
# Jason.encode!(updated)
# end)
case HTTPoison.post(url(), json_lines, default_headers()) do
{:ok, %HTTPoison.Response{status_code: code, body: body}} ->
unless code in 200..299 do
IO.warn(
"Hyperdx API warning: Dropping Logs: HTTP response status is #{code}. Response body is: #{inspect(body)}"
)
end
{:error, reason} ->
IO.warn(
"Hyperdx API warning: Dropping Logs: HTTP request failed due to: #{inspect(reason)}"
)
end
end
def url() do
"#{config(:base_url)}?hdx_platform=elixir"
end
def default_headers do
[
{"content-type", "application/json"},
{"user-agent", "elixir-client/v#{Application.spec(:hyperdx, :vsn)}"},
{"Authorization", "Bearer #{config(:token)}"}
]
end
defp config(:token) do
configs = Application.get_env(:logger, :hyperdx)
Keyword.fetch!(configs, :token)
end
defp config(:service) do
configs = Application.get_env(:logger, :hyperdx)
Keyword.fetch!(configs, :service)
end
defp config(:base_url) do
configs = Application.get_env(:logger, :hyperdx)
case Keyword.fetch(configs, :base_url) do
{:ok, base_url} -> base_url
:error -> "https://in.hyperdx.io"
end
end
end