View Source StatsdMetric (statsd_metric v0.1.2)

A fast StatsD / DogStatsD metric encoder and single-pass parser.

StatsdMetric supports all standard StatsD metric types:

  • Counter
  • Gauge
  • Histogram
  • Timer
  • Set
  • Meter

It also supports DogStatsD sample rates and tags.

Encoding Example

Encoding supports IO list and string return types.

iex> StatsdMetric.encode("name.spaced", 1.0, :counter)
["name.spaced", 58, "1.0", 124, "c"]

iex> StatsdMetric.encode_to_string("name.spaced", 1.0, :counter)
"name.spaced:1.0|c"

Parsing Example

iex> StatsdMetric.decode!("name.spaced:1.0|c|@0.1|#foo:bar")
%StatsdMetric{
  key: "name.spaced",
  value: 1.0,
  type: :counter,
  sample_rate: 0.1,
  tags: %{"foo" => "bar"}
}

Summary

Functions

Parses a StatsD metric into a %StatsdMetric{}.

Parses a StatsD metric into a %StatsdMetric{}.

Encodes a %StatsdMetric{} into a StatsD metric IO list.

Encodes a %StatsdMetric{} into a StatsD metric string.

Types

@type t() :: %StatsdMetric{
  key: String.t(),
  sample_rate: float() | nil,
  tags: map() | nil,
  type: atom(),
  value: float()
}

Functions

@spec decode(binary()) ::
  {:ok,
   %StatsdMetric{
     key: term(),
     sample_rate: term(),
     tags: term(),
     type: term(),
     value: term()
   }}
  | {:error, atom()}

Parses a StatsD metric into a %StatsdMetric{}.

iex> StatsdMetric.decode("name.spaced:1.0|c|@0.1|#foo:bar")
{:ok, %StatsdMetric{
  key: "name.spaced",
  value: 1.0,
  type: :counter,
  sample_rate: 0.1,
  tags: %{"foo" => "bar"}
}}
@spec decode!(binary()) :: %StatsdMetric{
  key: term(),
  sample_rate: term(),
  tags: term(),
  type: term(),
  value: term()
}

Parses a StatsD metric into a %StatsdMetric{}.

iex> StatsdMetric.decode!("name.spaced:1.0|c|@0.1|#foo:bar")
%StatsdMetric{
  key: "name.spaced",
  value: 1.0,
  type: :counter,
  sample_rate: 0.1,
  tags: %{"foo" => "bar"}
}

If the metric is invalid, it raises one of:

Link to this function

encode(key, val, type, opts \\ [])

View Source
@spec encode(binary(), integer() | float(), atom(), keyword()) :: iolist()

Encodes a %StatsdMetric{} into a StatsD metric IO list.

iex> StatsdMetric.encode("name.spaced", 1.0, :counter)
["name.spaced", 58, "1.0", 124, "c"]
Link to this function

encode_to_string(key, val, type, opts \\ [])

View Source
@spec encode_to_string(binary(), integer() | float(), atom(), keyword()) :: binary()

Encodes a %StatsdMetric{} into a StatsD metric string.

iex> StatsdMetric.encode_to_string("name.spaced", 1.0, :counter)
"name.spaced:1.0|c"