Another Elixir metrics library, ExMetrics is a thin wrapper built on top of
statix providing convenient macros
for timing function calls.
def deps do
[
{:ex_metrics, "~> 0.1.0"}
]
endex_metrics supports the following global configuration options:
prefix: A prefix for all metric names, defaultnilhost: The StatsD host, default127.0.0.1port: The port to send metrics, default8125tags: Global tags to be sent with all metrics, default is none.
ex_metrics exposes the following functions for metrics collection (the same as statix):
ExMetrics.decrement/1,2,3ExMetrics.gauge/2,3ExMetrics.histogram/2,3ExMetrics.increment/1,2,3ExMetrics.measure/2,3ExMetrics.set/2,3ExMetrics.timing/2,3
Functions can be timed easily with the deftimed macro:
defmodule MyApp do
use ExMetrics.FunctionTimer
deftimed foo do
# Times foo/0 function and sends metric name: "function_call.elixir.myapp.foo_0"
end
@metric_name "custom_metric_name"
@metric_options [tags: [key: :value]]
deftimed bar do
# Times bar/0 function and sends metric with name @metric_name and options @metric_options
end
# Metric names and options can be configured on a per-function-header level.
@metric_name "baz_value1"
deftimed baz(:value1) do
end
@metric_name "baz_value2"
deftimed baz(:value2) do
end
@metric_name "baz_default"
deftimed baz(value) do
end
endResponse times can be automatically captured and reported with the ExMetrics.Plug:
defmodule MyRouter do
use Plug.Router
plug(:accepts, ["json", "urlencoded"])
plug(ExMetrics.Plug)
get("/", MyController, :action) # Metric name: response_time.root
get("/v2/users/:id/edit", UsersController, :edit) # Metric name: response_time.v2.users.id.edit
endUnit tests with a code coverage report generated by Coveralls can be run with
$ mix coveralls.html
The linter can be run with
$ mix credo
Static type analysis can be run with
$ mix dialyzer