PostHog / posthog-php

MIT License
18 stars 19 forks source link

Client doesn't work with Laravel Queue #30

Open georgecoca opened 2 years ago

georgecoca commented 2 years ago

Hi,

We have this package installed in a Laravel application. The app listens for events for some specific events which are queued and processed in background (through queues). The thing is that when the queued jobs are processed we also submit the events to PostHog, eg:

        PostHog::capture([
            'distinctId' => 'user:1',
            'event' => 'some-event'
        ]);

But we found out that the event is never sent to PostHog. There are no errors, it just does nothing. We tested the same app locally (without queue) and it works as expected. Also we tested making a HTTP request directly to the API through the Guzzle client and it works fine. After some debugging I think there may be some issues with the consumers clients (which by default is lib_curl.), and I guess its related to how __destruct function handles the code within a queued job in Laravel app.

Laravel Version 8.75.0 Queue Jobs are processed with the command php artisan queue:work.

Looking forward to a solution. Thank you.

rvanbaalen commented 1 year ago

Are you calling PostHog::init in the queue job as well?

Sounds like PostHog::init wasn't called

IsraelOrtuno commented 12 months ago

Facing the same problem. I have tested calling PostHog::init in the queued job as well but still didn't work:

        PostHog::init(config()->get('services.posthog.api_key'), [
            'host' => config()->get('services.posthog.host'),
        ]);

        PostHog::capture([
            'distinctId' => $this->user->getKey(),
            'event' => 'user:registered',
            'properties' => [
                'registered_via' => $this->registerdVia,
            ],
        ]);

However it does work when running the job synchronously.

nwdles commented 11 months ago

batch_size as optional parameter solved my problem (we don't have 100 events in time, that's why we didn't catch events in PostHog)

IsraelOrtuno commented 11 months ago

@nwdles could you show an example? I am confused about that parameter. Do yo mean this?

https://posthog.com/docs/api/post-only-endpoints#batch-events

nwdles commented 11 months ago

https://posthog.com/docs/api/post-only-endpoints#batch-events

I mean this Posthog::init(config('posthog.api_key'), ['host' => config('posthog.url'), 'batch_size' => 1]);