Current section

Files

Jump to
new_relic_agent lib new_relic aggregate aggregate.ex
Raw

lib/new_relic/aggregate/aggregate.ex

defmodule NewRelic.Aggregate do
defstruct meta: %{}, values: %{}
# A metric-like struct for reporting aggregate data as events to NRDB
@moduledoc false
def merge(aggregate, values) do
new_values = Map.merge(aggregate.values, values, fn _k, v1, v2 -> v1 + v2 end)
%{aggregate | values: new_values}
end
def annotate(aggregate) do
aggregate.values
|> Map.merge(averages(aggregate.values))
|> Map.merge(aggregate.meta)
|> Map.put(:category, :Metric)
end
defp averages(%{call_count: call_count} = values) do
values
|> Enum.reject(fn {key, _value} -> key == :call_count end)
|> Map.new(fn {key, value} -> {:"avg_#{key}", value / call_count} end)
end
defp averages(_values), do: %{}
end