Skip to content

Commit 18a5855

Browse files
committed
feat(be): logs cleanup module
1 parent e48bd75 commit 18a5855

File tree

5 files changed

+92
-0
lines changed

5 files changed

+92
-0
lines changed

apps/backend/src/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { RequestLoggerMiddleware } from "src/middleware/request-logger-middlewar
1212
import { DepartureModule } from "src/modules/departure/departure.module";
1313
import { ImportModule } from "src/modules/import/import.module";
1414
import { LoggerModule } from "src/modules/logger/logger.module";
15+
import { LogsCleanupModule } from "src/modules/logs-cleanup/logs-cleanup.module";
1516
import { PlatformModule } from "src/modules/platform/platform.module";
1617
import { PrismaModule } from "src/modules/prisma/prisma.module";
1718
import { StatusModule } from "src/modules/status/status.module";
@@ -25,6 +26,7 @@ import { StopModule } from "src/modules/stop/stop.module";
2526
StopModule,
2627
PrismaModule,
2728
LoggerModule,
29+
LogsCleanupModule,
2830
StatusModule,
2931
ConfigModule.forRoot(configModuleConfig),
3032
ScheduleModule.forRoot(),

apps/backend/src/enums/log.enum.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export enum LogMessage {
1010
IMPORT_STOPS = "Import stops",
1111
REST = "REST",
1212
GRAPHQL = "GraphQL",
13+
REQUEST_LOGS_CLEANUP = "Request logs cleanup",
1314
}
1415

1516
export enum RestLogStatus {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Controller, OnModuleInit } from "@nestjs/common";
2+
import { Cron, CronExpression } from "@nestjs/schedule";
3+
4+
import { LogsCleanupService } from "src/modules/logs-cleanup/logs-cleanup.service";
5+
6+
@Controller("logs-cleanup")
7+
export class LogsCleanupController implements OnModuleInit {
8+
constructor(private readonly logsCleanupService: LogsCleanupService) {}
9+
10+
async onModuleInit(): Promise<void> {
11+
return this.logsCleanupService.cleanupLogs();
12+
}
13+
14+
@Cron(CronExpression.EVERY_10_MINUTES)
15+
async cronLogsCleanup(): Promise<void> {
16+
return this.logsCleanupService.cleanupLogs();
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { Module } from "@nestjs/common";
2+
3+
import { LogsCleanupController } from "src/modules/logs-cleanup/logs-cleanup.controller";
4+
import { LogsCleanupService } from "src/modules/logs-cleanup/logs-cleanup.service";
5+
6+
@Module({
7+
controllers: [LogsCleanupController],
8+
providers: [LogsCleanupService],
9+
imports: [],
10+
})
11+
export class LogsCleanupModule {}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { Injectable } from "@nestjs/common";
2+
3+
import { LogLevel, LogMessage } from "src/enums/log.enum";
4+
import { LoggerService } from "src/modules/logger/logger.service";
5+
import { PrismaService } from "src/modules/prisma/prisma.service";
6+
7+
const MAX_COUNT = 500_000;
8+
9+
@Injectable()
10+
export class LogsCleanupService {
11+
constructor(
12+
private readonly prisma: PrismaService,
13+
private readonly logger: LoggerService,
14+
) {}
15+
16+
async cleanupLogs(): Promise<void> {
17+
try {
18+
const recordCount = await this.prisma.requestLog.count();
19+
20+
if (recordCount < MAX_COUNT) {
21+
return;
22+
}
23+
24+
const last = await this.prisma.requestLog.findFirst({
25+
orderBy: { createdAt: "desc" },
26+
skip: MAX_COUNT,
27+
});
28+
29+
if (!last) {
30+
return;
31+
}
32+
33+
const { count } = await this.prisma.requestLog.deleteMany({
34+
where: {
35+
createdAt: {
36+
lte: last.createdAt,
37+
},
38+
},
39+
});
40+
41+
await this.logger.createLog(
42+
LogLevel.log,
43+
LogMessage.REQUEST_LOGS_CLEANUP,
44+
{
45+
message: "Successfully removed old logs",
46+
count,
47+
},
48+
);
49+
} catch (error) {
50+
await this.logger.createLog(
51+
LogLevel.error,
52+
LogMessage.REQUEST_LOGS_CLEANUP,
53+
{
54+
message: "Failed to cleanup logs",
55+
error: JSON.stringify(error),
56+
},
57+
);
58+
}
59+
}
60+
}

0 commit comments

Comments
 (0)