Created
June 5, 2015 14:58
-
-
Save jeregrine/4f4c304a33bc9963400d to your computer and use it in GitHub Desktop.
Hackney Librato Metrics
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| defmodule MyApp.Util.HackneyLibratoMetrics do | |
| require Logger | |
| def new(_, _) do | |
| :ok | |
| end | |
| def delete(_name) do | |
| :ok | |
| end | |
| def delete(_name, _value) do | |
| :ok | |
| end | |
| @spec increment_counter(any()) :: :ok | {:error, term()} | |
| def increment_counter(name) do | |
| increment_counter(name, 1) | |
| end | |
| @spec increment_counter(any(), pos_integer()) :: :ok | {:error, term()} | |
| def increment_counter(name, value) do | |
| log(:count, name, value) | |
| end | |
| @spec decrement_counter(any()) :: :ok | {:error, term()} | |
| def decrement_counter(name) do | |
| log(:count, name, -1) | |
| end | |
| @spec decrement_counter(any(), pos_integer()) :: :ok | {:error, term()} | |
| def decrement_counter(name, value) do | |
| log(:count, name, -value) | |
| end | |
| def update_histogram(name, fun) when is_function(fun, 0) do | |
| begin = :os.timestamp() | |
| result = fun.() | |
| duration = div(:timer.now_diff(:os.timestamp(), begin), 1000) | |
| log(:measure, name, [:io_lib_format.fwrite_g(duration), ?m, ?s]) | |
| result | |
| end | |
| def update_histogram(name, value) when is_number(value) do | |
| log(:measure, name, value) | |
| end | |
| @spec update_gauge(any(), number()) :: :ok | {:error, term()} | |
| def update_gauge(name, value) do | |
| log(:sample, name, value) | |
| end | |
| @spec update_meter(any(), number()) :: :ok | {:error, term()} | |
| def update_meter(name, value) do | |
| log(:sample, name, value) | |
| end | |
| @spec notify(any(), any(), atom()) :: :ok | {:error, term()} | |
| def notify(_name, _value, _op) do | |
| :ok | |
| end | |
| defp name(name) when is_list(name) do | |
| Enum.map(name, fn (key) when is_atom(key) -> Atom.to_string(key) | |
| (key) -> key end) | |
| |> Enum.intersperse(?.) | |
| end | |
| defp name(name) when is_binary(name), do: name | |
| defp log(op, name, value) when is_integer(value) do | |
| log(op, name, Integer.to_string(value)) | |
| end | |
| defp log(op, name, value) when is_float(value) do | |
| log(op, name, [:io_lib_format.fwrite_g(value), ?m, ?s]) | |
| end | |
| defp log(op, name, value) do | |
| key = [[Atom.to_string(op), ?#], name(name)] | |
| log(key, value) | |
| end | |
| defp log(key, value) do | |
| Logger.info(fn -> | |
| [key, ?=, value] | |
| end) | |
| :ok | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment