Connect EventTracker to TB endpoint (#7240)
#7091 EventTrackers send information of events to the TinyBird instance: In order to test: 1. Set ANALYTICS_ENABLED= true and TELEMETRY_ENABLED=true in evironment-variables.ts 2. Set the TINYBIRD_TOKEN in environment variables (go to TiniyBird Tokens) 3. Log in to twenty's TinyBird and go to datasources/analytics_events in twenty_analytics workspace 4. Run twenty and navigate it 5. New events will be logged in the datasources, containing their timestamp, sessionId and payload. <img width="1189" alt="Screenshot 2024-09-24 at 17 23 01" src="https://github.com/user-attachments/assets/85375897-504d-4e75-98e4-98e6a9671f98"> Example of payload when user is not logged in ``` {"hostName":"localhost", "pathname":"/welcome", "locale":"en-US", "userAgent":"Mozilla/5.0", "href":"http://localhost:3001/welcome", "referrer":"", "timeZone":"Europe/Barcelona"} ``` Example of payload when user is logged in ``` {"userId":"2020202", "workspaceId":"202", "workspaceDisplayName":"Apple", "workspaceDomainName":"apple.dev", "hostName":"localhost", "pathname":"/objects/companies", "locale":"en-US", "userAgent":"Mozilla/5.0Chrome/128.0.0.0Safari/537.36", "href":"http://localhost:3001/objects/companies", "referrer":"", "timeZone":"Europe/Paris"} ``` --------- Co-authored-by: Félix Malfait <felix@twenty.com>
This commit is contained in:
committed by
GitHub
parent
c9e882f4c0
commit
16bb1f22e4
@ -2,15 +2,15 @@ import { Injectable } from '@nestjs/common';
|
||||
import { OnEvent } from '@nestjs/event-emitter';
|
||||
|
||||
import { AnalyticsService } from 'src/engine/core-modules/analytics/analytics.service';
|
||||
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
|
||||
import { ObjectRecordCreateEvent } from 'src/engine/core-modules/event-emitter/types/object-record-create.event';
|
||||
import { TelemetryService } from 'src/engine/core-modules/telemetry/telemetry.service';
|
||||
import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/workspace-event.type';
|
||||
|
||||
@Injectable()
|
||||
export class TelemetryListener {
|
||||
constructor(
|
||||
private readonly analyticsService: AnalyticsService,
|
||||
private readonly environmentService: EnvironmentService,
|
||||
private readonly telemetryService: TelemetryService,
|
||||
) {}
|
||||
|
||||
@OnEvent('*.created')
|
||||
@ -21,16 +21,11 @@ export class TelemetryListener {
|
||||
payload.events.map((eventPayload) =>
|
||||
this.analyticsService.create(
|
||||
{
|
||||
type: 'track',
|
||||
data: {
|
||||
eventName: payload.name,
|
||||
},
|
||||
action: payload.name,
|
||||
payload: {},
|
||||
},
|
||||
eventPayload.userId,
|
||||
payload.workspaceId,
|
||||
'', // voluntarily not retrieving this
|
||||
'', // to avoid slowing down
|
||||
this.environmentService.get('SERVER_URL'),
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -41,21 +36,29 @@ export class TelemetryListener {
|
||||
payload: WorkspaceEventBatch<ObjectRecordCreateEvent<any>>,
|
||||
) {
|
||||
await Promise.all(
|
||||
payload.events.map((eventPayload) =>
|
||||
payload.events.map(async (eventPayload) => {
|
||||
this.analyticsService.create(
|
||||
{
|
||||
type: 'track',
|
||||
data: {
|
||||
eventName: 'user.signup',
|
||||
action: 'user.signup',
|
||||
payload: {},
|
||||
},
|
||||
eventPayload.userId,
|
||||
payload.workspaceId,
|
||||
);
|
||||
|
||||
this.telemetryService.create(
|
||||
{
|
||||
action: 'user.signup',
|
||||
payload: {
|
||||
payload,
|
||||
userId: undefined,
|
||||
workspaceId: undefined,
|
||||
},
|
||||
},
|
||||
eventPayload.userId,
|
||||
payload.workspaceId,
|
||||
'',
|
||||
'',
|
||||
this.environmentService.get('SERVER_URL'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ import { DuplicateModule } from 'src/engine/core-modules/duplicate/duplicate.mod
|
||||
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
|
||||
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
||||
import { FileModule } from 'src/engine/core-modules/file/file.module';
|
||||
import { TelemetryModule } from 'src/engine/core-modules/telemetry/telemetry.module';
|
||||
import { ObjectMetadataRepositoryModule } from 'src/engine/object-metadata-repository/object-metadata-repository.module';
|
||||
import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module';
|
||||
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
|
||||
@ -29,6 +30,7 @@ import { EntityEventsToDbListener } from './listeners/entity-events-to-db.listen
|
||||
ObjectMetadataRepositoryModule.forFeature([WorkspaceMemberWorkspaceEntity]),
|
||||
TypeOrmModule.forFeature([FeatureFlagEntity], 'core'),
|
||||
AnalyticsModule,
|
||||
TelemetryModule,
|
||||
DuplicateModule,
|
||||
FileModule,
|
||||
FeatureFlagModule,
|
||||
|
||||
Reference in New Issue
Block a user