Packages
snakepit
0.7.5
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
High-performance pooler and session manager for external language integrations. Supports Python, Node.js, Ruby, and more with gRPC streaming, session management, and production-ready process cleanup.
Current section
Files
Jump to
Current section
Files
lib/snakepit/logger/redaction.ex
defmodule Snakepit.Logger.Redaction do
@moduledoc false
@max_map_keys 5
@max_key_length 32
@sample_limit 5
def describe(%struct_module{} = _struct) do
module =
struct_module
|> Atom.to_string()
|> String.trim_leading("Elixir.")
"struct(#{module})"
end
def describe(map) when is_map(map) do
keys =
map
|> Map.delete(:__struct__)
|> Map.keys()
|> Enum.map(&format_key/1)
|> Enum.take(@max_map_keys)
"map(keys: #{inspect(keys)}, count: #{map_size(map)})"
end
def describe(binary) when is_binary(binary) do
"binary(len: #{byte_size(binary)})"
end
def describe(list) when is_list(list) do
length = length(list)
sample_types =
list
|> Enum.take(@sample_limit)
|> Enum.map(&type_label/1)
"list(len: #{length}, sample_types: #{Enum.join(sample_types, ",")})"
end
def describe(tuple) when is_tuple(tuple) do
"tuple(size: #{tuple_size(tuple)})"
end
def describe(number) when is_number(number), do: inspect(number)
def describe(atom) when is_atom(atom), do: Atom.to_string(atom)
def describe(pid) when is_pid(pid), do: inspect(pid)
def describe(ref) when is_reference(ref), do: inspect(ref)
def describe(port) when is_port(port), do: inspect(port)
def describe(fun) when is_function(fun), do: "function/arity=#{:erlang.fun_info(fun)[:arity]}"
def describe(nil), do: "nil"
def describe(term) do
type_label(term)
end
defp format_key(key) when is_atom(key) do
key |> Atom.to_string() |> truncate()
end
defp format_key(key) when is_binary(key) do
key |> truncate()
end
defp format_key(key) do
key |> inspect() |> truncate()
end
defp truncate(value) do
if String.length(value) > @max_key_length do
String.slice(value, 0, @max_key_length) <> "..."
else
value
end
end
defp type_label(%struct_module{}) do
module =
struct_module
|> Atom.to_string()
|> String.trim_leading("Elixir.")
"struct(#{module})"
end
defp type_label(term) when is_map(term), do: "map"
defp type_label(term) when is_binary(term), do: "binary"
defp type_label(term) when is_list(term), do: "list"
defp type_label(term) when is_tuple(term), do: "tuple"
defp type_label(term) when is_integer(term), do: "integer"
defp type_label(term) when is_float(term), do: "float"
defp type_label(term) when is_atom(term), do: Atom.to_string(term)
defp type_label(term) when is_pid(term), do: "pid"
defp type_label(term) when is_reference(term), do: "reference"
defp type_label(term) when is_function(term), do: "function"
defp type_label(nil), do: "nil"
defp type_label(_term), do: "unknown"
end