feat(analytics): add clickhouse (#11174)

This commit is contained in:
Antoine Moreaux
2025-04-16 18:33:10 +02:00
committed by GitHub
parent b6901a49bf
commit 587281a541
66 changed files with 1858 additions and 244 deletions
@@ -24,6 +24,8 @@ import { handleException } from 'src/engine/core-modules/exception-handler/http-
import { ExceptionHandlerService } from 'src/engine/core-modules/exception-handler/exception-handler.service';
import { CloudflareSecretMatchGuard } from 'src/engine/core-modules/domain-manager/guards/cloudflare-secret.guard';
import { CustomDomainService } from 'src/engine/core-modules/domain-manager/services/custom-domain.service';
import { AnalyticsService } from 'src/engine/core-modules/analytics/services/analytics.service';
import { CUSTOM_DOMAIN_ACTIVATED_EVENT } from 'src/engine/core-modules/analytics/utils/events/track/custom-domain/custom-domain-activated';
@Controller('cloudflare')
@UseFilters(AuthRestApiExceptionFilter)
@@ -34,6 +36,7 @@ export class CloudflareController {
private readonly domainManagerService: DomainManagerService,
private readonly customDomainService: CustomDomainService,
private readonly exceptionHandlerService: ExceptionHandlerService,
private readonly analyticsService: AnalyticsService,
) {}
@Post('custom-hostname-webhooks')
@@ -57,6 +60,10 @@ export class CloudflareController {
if (!workspace) return;
const analytics = this.analyticsService.createAnalyticsContext({
workspaceId: workspace.id,
});
const customDomainDetails =
await this.customDomainService.getCustomDomainDetails(
req.body.data.data.hostname,
@@ -83,6 +90,8 @@ export class CloudflareController {
...workspace,
...workspaceUpdated,
});
await analytics.track(CUSTOM_DOMAIN_ACTIVATED_EVENT, {});
}
return res.status(200).send();
@@ -3,6 +3,7 @@ import { getRepositoryToken } from '@nestjs/typeorm';
import { Request, Response } from 'express';
import { Repository } from 'typeorm';
import { AnalyticsContextMock } from 'test/utils/analytics-context.mock';
import { CloudflareController } from 'src/engine/core-modules/domain-manager/controllers/cloudflare.controller';
import { CustomDomainValidRecords } from 'src/engine/core-modules/domain-manager/dtos/custom-domain-valid-records';
@@ -12,6 +13,7 @@ import { ExceptionHandlerService } from 'src/engine/core-modules/exception-handl
import { HttpExceptionHandlerService } from 'src/engine/core-modules/exception-handler/http-exception-handler.service';
import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { AnalyticsService } from 'src/engine/core-modules/analytics/services/analytics.service';
describe('CloudflareController - customHostnameWebhooks', () => {
let controller: CloudflareController;
@@ -61,6 +63,12 @@ describe('CloudflareController - customHostnameWebhooks', () => {
get: jest.fn(),
},
},
{
provide: AnalyticsService,
useValue: {
createAnalyticsContext: AnalyticsContextMock,
},
},
],
}).compile();
@@ -5,9 +5,10 @@ import { DomainManagerService } from 'src/engine/core-modules/domain-manager/ser
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { CloudflareController } from 'src/engine/core-modules/domain-manager/controllers/cloudflare.controller';
import { CustomDomainService } from 'src/engine/core-modules/domain-manager/services/custom-domain.service';
import { AnalyticsModule } from 'src/engine/core-modules/analytics/analytics.module';
@Module({
imports: [TypeOrmModule.forFeature([Workspace], 'core')],
imports: [AnalyticsModule, TypeOrmModule.forFeature([Workspace], 'core')],
providers: [DomainManagerService, CustomDomainService],
exports: [DomainManagerService, CustomDomainService],
controllers: [CloudflareController],
@@ -2,10 +2,12 @@ import { Test, TestingModule } from '@nestjs/testing';
import Cloudflare from 'cloudflare';
import { CustomHostnameCreateResponse } from 'cloudflare/resources/custom-hostnames/custom-hostnames';
import { AnalyticsContextMock } from 'test/utils/analytics-context.mock';
import { DomainManagerException } from 'src/engine/core-modules/domain-manager/domain-manager.exception';
import { CustomDomainService } from 'src/engine/core-modules/domain-manager/services/custom-domain.service';
import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service';
import { DomainManagerException } from 'src/engine/core-modules/domain-manager/domain-manager.exception';
import { AnalyticsService } from 'src/engine/core-modules/analytics/services/analytics.service';
import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service';
jest.mock('cloudflare');
@@ -25,6 +27,12 @@ describe('CustomDomainService', () => {
get: jest.fn(),
},
},
{
provide: AnalyticsService,
useValue: {
createAnalyticsContext: AnalyticsContextMock,
},
},
{
provide: DomainManagerService,
useValue: {