Current section
Files
Jump to
Current section
Files
lib/posthog/context.ex
defmodule PostHog.Context do
@moduledoc false
@logger_metadata_key :__posthog__
def logger_metadata_key(), do: @logger_metadata_key
def set(name_scope, event_scope \\ :all, context) do
metadata =
with :undefined <- :logger.get_process_metadata(), do: %{}
current_context = Map.get(metadata, @logger_metadata_key, %{})
new_value =
case get_in(current_context, [name_scope, event_scope]) do
%{} = existing -> Map.merge(existing, context)
nil -> context
end
updated_context =
put_in(
current_context,
[Access.key(name_scope, %{}), Access.key(event_scope, %{})],
new_value
)
:logger.update_process_metadata(%{@logger_metadata_key => updated_context})
end
def get(name_scope, event_scope \\ :all) do
case :logger.get_process_metadata() do
%{@logger_metadata_key => context} ->
get_in(context, [key_and_all(name_scope), key_and_all(event_scope)]) |> Map.new()
_ ->
%{}
end
end
defp key_and_all(key) do
fn :get, data, next ->
scoped = Map.get(data, key, %{})
all = Map.get(data, :all, %{})
Enum.flat_map([all, scoped], next)
end
end
end