diff --git a/packages/twenty-server/src/engine/core-modules/metrics/types/metrics-keys.type.ts b/packages/twenty-server/src/engine/core-modules/metrics/types/metrics-keys.type.ts index 71ea6db61b4..63a7c6c4b89 100644 --- a/packages/twenty-server/src/engine/core-modules/metrics/types/metrics-keys.type.ts +++ b/packages/twenty-server/src/engine/core-modules/metrics/types/metrics-keys.type.ts @@ -26,4 +26,6 @@ export enum MetricsKeys { AIToolExecutionSucceeded = 'ai-tool-execution/succeeded', SchemaVersionMismatch = 'schema-version/mismatch', AppVersionMismatch = 'app-version/mismatch', + CronJobDeletedWorkspace = 'cron-job/deleted-workspace', + JobWebhookCallCompleted = 'job/webhook-call-completed', } diff --git a/packages/twenty-server/src/engine/core-modules/webhook/jobs/call-webhook.job.ts b/packages/twenty-server/src/engine/core-modules/webhook/jobs/call-webhook.job.ts index 640380d6138..13e49c09b3d 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/jobs/call-webhook.job.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/jobs/call-webhook.job.ts @@ -9,6 +9,8 @@ import { WEBHOOK_RESPONSE_EVENT } from 'src/engine/core-modules/audit/utils/even import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; +import { MetricsService } from 'src/engine/core-modules/metrics/metrics.service'; +import { MetricsKeys } from 'src/engine/core-modules/metrics/types/metrics-keys.type'; export type CallWebhookJobData = { targetUrl: string; @@ -28,6 +30,7 @@ export class CallWebhookJob { constructor( private readonly httpService: HttpService, private readonly auditService: AuditService, + private readonly metricsService: MetricsService, ) {} private generateSignature( @@ -95,6 +98,11 @@ export class CallWebhookJob { success, ...commonPayload, }); + + this.metricsService.incrementCounter({ + key: MetricsKeys.JobWebhookCallCompleted, + shouldStoreInCache: false, + }); } catch (err) { auditService.insertWorkspaceEvent(WEBHOOK_RESPONSE_EVENT, { success: false, diff --git a/packages/twenty-server/src/engine/core-modules/webhook/jobs/webhook-job.module.ts b/packages/twenty-server/src/engine/core-modules/webhook/jobs/webhook-job.module.ts index f1e291d9e72..d5d22888c8e 100644 --- a/packages/twenty-server/src/engine/core-modules/webhook/jobs/webhook-job.module.ts +++ b/packages/twenty-server/src/engine/core-modules/webhook/jobs/webhook-job.module.ts @@ -2,12 +2,13 @@ import { HttpModule } from '@nestjs/axios'; import { Module } from '@nestjs/common'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; -import { WebhookModule } from 'src/engine/core-modules/webhook/webhook.module'; +import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { CallWebhookJobsJob } from 'src/engine/core-modules/webhook/jobs/call-webhook-jobs.job'; import { CallWebhookJob } from 'src/engine/core-modules/webhook/jobs/call-webhook.job'; +import { WebhookModule } from 'src/engine/core-modules/webhook/webhook.module'; @Module({ - imports: [HttpModule, AuditModule, WebhookModule], + imports: [HttpModule, AuditModule, WebhookModule, MetricsModule], providers: [CallWebhookJobsJob, CallWebhookJob], }) export class WebhookJobModule {} diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts index b4323d1c5ba..6082bbd7adc 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts @@ -16,6 +16,8 @@ import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entit import { SubscriptionStatus } from 'src/engine/core-modules/billing/enums/billing-subscription-status.enum'; import { EmailService } from 'src/engine/core-modules/email/email.service'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; +import { MetricsService } from 'src/engine/core-modules/metrics/metrics.service'; +import { MetricsKeys } from 'src/engine/core-modules/metrics/types/metrics-keys.type'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; @@ -51,6 +53,7 @@ export class CleanerWorkspaceService { @InjectRepository(UserWorkspaceEntity) private readonly userWorkspaceRepository: Repository, private readonly i18nService: I18nService, + private readonly metricsService: MetricsService, ) { this.inactiveDaysBeforeSoftDelete = this.twentyConfigService.get( 'WORKSPACE_INACTIVE_DAYS_BEFORE_SOFT_DELETION', @@ -447,6 +450,11 @@ export class CleanerWorkspaceService { if (!dryRun) { await this.workspaceService.deleteWorkspace(workspace.id); + + this.metricsService.incrementCounter({ + key: MetricsKeys.CronJobDeletedWorkspace, + shouldStoreInCache: false, + }); } this.logger.log( diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts index 8a8c2ab97dd..3c1f03229a2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/workspace-cleaner.module.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; import { BillingSubscriptionEntity } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { EmailModule } from 'src/engine/core-modules/email/email.module'; +import { MetricsModule } from 'src/engine/core-modules/metrics/metrics.module'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserVarsModule } from 'src/engine/core-modules/user/user-vars/user-vars.module'; import { UserModule } from 'src/engine/core-modules/user/user.module'; @@ -31,6 +32,7 @@ import { CleanerWorkspaceService } from 'src/engine/workspace-manager/workspace- UserModule, EmailModule, BillingModule, + MetricsModule, ], providers: [ DeleteWorkspacesCommand,