# Statix [![Build Status](](

Statix is an Elixir client for StatsD compatible servers.
It is focusing on wicked-fast _speed_ without sacrificing _simplicity_, _completeness_, or _correctness_.

What makes Statix to be the fastest library:

  * direct sending to the socket <sup>[[1](#direct-sending)]</sup>
  * caching of the UDP packets header
  * [IO list]( utilization

<sup><a name="direct-sending"></a>[1]</sup> In contrast with process-based clients it has much lower memory consumption and incredibly high throughput:

* Statix (v0.0.1): ~__554734__ counter increments per flush


* statsderl (v0.3.5): ~__21715__ counter increments per flush


## Installation

Add Statix as a dependency to your `mix.exs` file:

def application() do
  [applications: [:statix]]

defp deps() do
  [{:statix, "~> 0.6"}]

Then run `mix deps.get` in your shell to fetch the dependencies.

## Usage

A module that uses Statix represents a socket connection:

defmodule Sample.Statix do
  use Statix

Before using connection the `connect/0` function needs to be invoked.
In general, this function is called during the invocation of your application `start/2` callback.

def start(_type, _args) do
  :ok = Sample.Statix.connect
  # ...

Thereafter, the `increment/1,2`, `decrement/1,2`, `gauge/2`, `set/2`, `timing/2` and `measure/2` functions will be successfully pushing metrics to the server.

### Configuration

Statix could be configured globally with:

config :statix,
  prefix: "sample",
  host: "stats.tld",
  port: 8181

and on a per connection basis as well:

config :statix, Sample.Statix,
  port: 8811

The defaults are:

* prefix: `nil`
* host: `""`
* port: `8125`

## License

This software is licensed under [the ISC license](LICENSE).