Current section
Files
Jump to
Current section
Files
lib/stats_doggo.ex
defmodule StatsDoggo do
require Logger
use GenServer
@app_tag "app:#{EnvConfig.get(:stats_doggo, :app_name)}"
@env_tag "env:#{EnvConfig.get(:stats_doggo, :app_env)}"
@default_tags [@env_tag, @app_tag]
def init(:ok) do
set_up_config()
connection = case EnvConfig.get(:stats_doggo, :enabled) do
"false" ->
Logger.info "StatsDoggo disabled, using StatsDoggo.ConnectionMock"
StatsDoggo.ConnectionMock
x ->
impl = Application.fetch_env!(:stats_doggo, :impl)
Logger.info "StatsDoggo #{inspect(x)}, using #{inspect(impl)}"
impl
end
connection.init
{:ok, connection}
end
def start(_, _) do
GenServer.start(__MODULE__, :ok, name: __MODULE__)
end
def start_link do
GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
end
def handle_cast({command, args}, connection) do
apply(connection, command, args)
{:noreply, connection}
end
def decrement(name, value \\ 1, opts \\ []) do
GenServer.cast(__MODULE__, {:decrement, [name, value, opts |> default_opts()]})
end
def gauge(name, value, opts \\ []) do
GenServer.cast(__MODULE__, {:gauge, [name, value, opts |> default_opts()]})
end
def increment(name, value \\ 1, opts \\ []) do
GenServer.cast(__MODULE__, {:increment, [name, value, opts |> default_opts()]})
end
def set(name, value, opts \\ []) do
GenServer.cast(__MODULE__, {:set, [name, value, opts |> default_opts()]})
end
def timing(name, value, opts \\ []) do
GenServer.cast(__MODULE__, {:timing, [name, value, opts |> default_opts()]})
end
def histogram(name, value, opts \\ []) do
GenServer.cast(__MODULE__, {:histogram, [name, value, opts |> default_opts()]})
end
defp default_opts(opts) do
opts |> Keyword.merge(tags: Keyword.get(opts, :tags, []) |> default_tags())
end
defp default_tags(tags) do
@default_tags ++ tags
end
defp set_up_config do
Application.put_env(:statix, :host, EnvConfig.get(:stats_doggo, :override_statix_host))
end
end