Advertisement
Guest User

Untitled

a guest
Jul 4th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. defmodule MyApp.Util.HackneyLibratoMetrics do
  2. require Logger
  3.  
  4. def new(_, _) do
  5. :ok
  6. end
  7.  
  8. def delete(_name) do
  9. :ok
  10. end
  11. def delete(_name, _value) do
  12. :ok
  13. end
  14.  
  15. @spec increment_counter(any()) :: :ok | {:error, term()}
  16. def increment_counter(name) do
  17. increment_counter(name, 1)
  18. end
  19.  
  20. @spec increment_counter(any(), pos_integer()) :: :ok | {:error, term()}
  21. def increment_counter(name, value) do
  22. log(:count, name, value)
  23. end
  24.  
  25. @spec decrement_counter(any()) :: :ok | {:error, term()}
  26. def decrement_counter(name) do
  27. log(:count, name, -1)
  28. end
  29.  
  30. @spec decrement_counter(any(), pos_integer()) :: :ok | {:error, term()}
  31. def decrement_counter(name, value) do
  32. log(:count, name, -value)
  33. end
  34.  
  35. def update_histogram(name, fun) when is_function(fun, 0) do
  36. begin = :os.timestamp()
  37. result = fun.()
  38. duration = div(:timer.now_diff(:os.timestamp(), begin), 1000)
  39. log(:measure, name, [:io_lib_format.fwrite_g(duration), ?m, ?s])
  40. result
  41. end
  42.  
  43. def update_histogram(name, value) when is_number(value) do
  44. log(:measure, name, value)
  45. end
  46.  
  47. @spec update_gauge(any(), number()) :: :ok | {:error, term()}
  48. def update_gauge(name, value) do
  49. log(:sample, name, value)
  50. end
  51.  
  52. @spec update_meter(any(), number()) :: :ok | {:error, term()}
  53. def update_meter(name, value) do
  54. log(:sample, name, value)
  55. end
  56.  
  57. @spec notify(any(), any(), atom()) :: :ok | {:error, term()}
  58. def notify(_name, _value, _op) do
  59. :ok
  60. end
  61.  
  62. defp name(name) when is_list(name) do
  63. Enum.map(name, fn (key) when is_atom(key) -> Atom.to_string(key)
  64. (key) -> key end)
  65. |> Enum.intersperse(?.)
  66. end
  67. defp name(name) when is_binary(name), do: name
  68.  
  69. defp log(op, name, value) when is_integer(value) do
  70. log(op, name, Integer.to_string(value))
  71. end
  72.  
  73. defp log(op, name, value) when is_float(value) do
  74. log(op, name, [:io_lib_format.fwrite_g(value), ?m, ?s])
  75. end
  76. defp log(op, name, value) do
  77. key = [[Atom.to_string(op), ?#], name(name)]
  78. log(key, value)
  79. end
  80. defp log(key, value) do
  81. Logger.info(fn ->
  82. [key, ?=, value]
  83. end)
  84. :ok
  85. end
  86. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement