File tree Expand file tree Collapse file tree 5 files changed +92
-0
lines changed Expand file tree Collapse file tree 5 files changed +92
-0
lines changed Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ import { RequestLoggerMiddleware } from "src/middleware/request-logger-middlewar
12
12
import { DepartureModule } from "src/modules/departure/departure.module" ;
13
13
import { ImportModule } from "src/modules/import/import.module" ;
14
14
import { LoggerModule } from "src/modules/logger/logger.module" ;
15
+ import { LogsCleanupModule } from "src/modules/logs-cleanup/logs-cleanup.module" ;
15
16
import { PlatformModule } from "src/modules/platform/platform.module" ;
16
17
import { PrismaModule } from "src/modules/prisma/prisma.module" ;
17
18
import { StatusModule } from "src/modules/status/status.module" ;
@@ -25,6 +26,7 @@ import { StopModule } from "src/modules/stop/stop.module";
25
26
StopModule ,
26
27
PrismaModule ,
27
28
LoggerModule ,
29
+ LogsCleanupModule ,
28
30
StatusModule ,
29
31
ConfigModule . forRoot ( configModuleConfig ) ,
30
32
ScheduleModule . forRoot ( ) ,
Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ export enum LogMessage {
10
10
IMPORT_STOPS = "Import stops" ,
11
11
REST = "REST" ,
12
12
GRAPHQL = "GraphQL" ,
13
+ REQUEST_LOGS_CLEANUP = "Request logs cleanup" ,
13
14
}
14
15
15
16
export enum RestLogStatus {
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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 { }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments