diff --git a/.sampo/changesets/flush-on-process-exit.md b/.sampo/changesets/flush-on-process-exit.md new file mode 100644 index 0000000..add6a65 --- /dev/null +++ b/.sampo/changesets/flush-on-process-exit.md @@ -0,0 +1,5 @@ +--- +hex/posthog: patch +--- + +Fix `PostHog.Sender` not flushing all events on app termination. diff --git a/lib/posthog/sender.ex b/lib/posthog/sender.ex index 0970fa3..e914d1a 100644 --- a/lib/posthog/sender.ex +++ b/lib/posthog/sender.ex @@ -20,7 +20,6 @@ defmodule PostHog.Sender do |> PostHog.Registry.via(__MODULE__, opts[:index]) callers = Process.get(:"$callers", []) - Process.flag(:trap_exit, true) GenServer.start_link(__MODULE__, {opts, callers}, name: name) end @@ -70,6 +69,8 @@ defmodule PostHog.Sender do @impl GenServer def init({opts, callers}) do + Process.flag(:trap_exit, true) + state = %__MODULE__{ registry: PostHog.Registry.registry_name(opts[:supervisor_name]), index: Keyword.fetch!(opts, :index), diff --git a/test/posthog/sender_test.exs b/test/posthog/sender_test.exs index 94c7b18..0eadbce 100644 --- a/test/posthog/sender_test.exs +++ b/test/posthog/sender_test.exs @@ -188,15 +188,14 @@ defmodule PostHog.SenderTest do end test "sends leftovers on shutdown", %{api_client: api_client} do - pid = - start_supervised!( - {Sender, - supervisor_name: @supervisor_name, - index: 1, - api_client: api_client, - max_batch_time_ms: 60_000, - max_batch_events: 100} - ) + start_supervised!( + {Sender, + supervisor_name: @supervisor_name, + index: 1, + api_client: api_client, + max_batch_time_ms: 60_000, + max_batch_events: 100} + ) expect(API.Mock, :request, fn _client, method, url, opts -> assert method == :post @@ -209,7 +208,7 @@ defmodule PostHog.SenderTest do Sender.send("foo", @supervisor_name) - assert :ok = GenServer.stop(pid) + assert :ok = stop_supervised(Sender) end test "does not send empty batch", %{api_client: api_client, registry: registry} do