README.md

# Statix [![Build Status](https://travis-ci.org/lexmag/statix.svg)](https://travis-ci.org/lexmag/statix)

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](http://jlouisramblings.blogspot.se/2013/07/problematic-traits-in-erlang.html) 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

![Statix](https://www.dropbox.com/s/9618kb09sc6cyh3/statix-v0.0.1.png?raw=1)

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

![statsderl](https://www.dropbox.com/s/wt96xmuywka9m4k/statsderl-v0.3.5.png?raw=1)

## Installation

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

```elixir
def application() do
  [applications: [:statix]]
end

defp deps() do
  [{:statix, "~> 0.5"}]
end
```

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

## Usage

A module that uses Statix represents a socket connection:

```elixir
defmodule Sample.Statix do
  use Statix
end
```

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.

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

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:

```elixir
config :statix,
  prefix: "sample",
  host: "127.0.0.1", port: 8181
```

and on a per connection basis as well:

```elixir
config :statix, Sample.Statix,
  port: 8811
```

## License

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