Current section

Files

Jump to
new_relic_agent lib new_relic util event.ex
Raw

lib/new_relic/util/event.ex

defmodule NewRelic.Util.Event do
@moduledoc false
def process_event(event), do: Map.new(event, &process_attr/1)
defp process_attr({key, val}) when is_binary(val), do: {key, val |> limit_size}
defp process_attr({key, val}) when is_bitstring(val), do: {key, val |> inspect |> limit_size}
defp process_attr({key, val}) when is_pid(val), do: {key, val |> inspect}
defp process_attr({key, val}), do: {key, val}
@max_string 4096
defp limit_size(string) when byte_size(string) < @max_string, do: string
defp limit_size(string) do
index = find_truncation_point(string)
String.slice(string, 0, index)
end
defp find_truncation_point(string, len \\ 0)
defp find_truncation_point("", len), do: len
defp find_truncation_point(string, len) do
case next_grapheme_size(string) do
{char_size, rest} when len + char_size < @max_string ->
find_truncation_point(rest, len + char_size)
_ ->
len
end
end
defp next_grapheme_size(string) do
{grapheme, rest} = String.next_grapheme(string)
{byte_size(grapheme), rest}
end
end