mirror of
https://github.com/unraid/api.git
synced 2026-01-01 22:20:05 -06:00
feat: add logrotate to cron in nestjs (#839)
* feat: add logrotate to cron in nestjs * fix: set max size to 5m and remove old logs * fix: logrotate command invalid
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
[api]
|
||||
version="3.3.0+89cb2544"
|
||||
version="3.3.0+eff31423"
|
||||
extraOrigins="https://google.com,https://test.com"
|
||||
[local]
|
||||
[notifier]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[api]
|
||||
version="3.3.0+89cb2544"
|
||||
version="3.3.0+eff31423"
|
||||
extraOrigins="https://google.com,https://test.com"
|
||||
[local]
|
||||
[notifier]
|
||||
@@ -21,4 +21,4 @@ dynamicRemoteAccessType="DISABLED"
|
||||
[upc]
|
||||
apikey="unupc_fab6ff6ffe51040595c6d9ffb63a353ba16cc2ad7d93f813a2e80a5810"
|
||||
[connectionStatus]
|
||||
minigraph="PRE_INIT"
|
||||
minigraph="ERROR_RETRYING"
|
||||
|
||||
67
api/package-lock.json
generated
67
api/package-lock.json
generated
@@ -22,6 +22,7 @@
|
||||
"@nestjs/graphql": "^12.0.11",
|
||||
"@nestjs/passport": "^10.0.2",
|
||||
"@nestjs/platform-fastify": "^10.2.9",
|
||||
"@nestjs/schedule": "^4.0.0",
|
||||
"@reduxjs/toolkit": "^1.9.5",
|
||||
"@reflet/cron": "^1.3.1",
|
||||
"@runonflux/nat-upnp": "^1.0.2",
|
||||
@@ -3555,6 +3556,29 @@
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
||||
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
|
||||
},
|
||||
"node_modules/@nestjs/schedule": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-4.0.0.tgz",
|
||||
"integrity": "sha512-zz4h54m/F/1qyQKvMJCRphmuwGqJltDAkFxUXCVqJBXEs5kbPt93Pza3heCQOcMH22MZNhGlc9DmDMLXVHmgVQ==",
|
||||
"dependencies": {
|
||||
"cron": "3.1.3",
|
||||
"uuid": "9.0.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||
"@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
||||
"reflect-metadata": "^0.1.12"
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/schedule/node_modules/cron": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/cron/-/cron-3.1.3.tgz",
|
||||
"integrity": "sha512-KVxeKTKYj2eNzN4ElnT6nRSbjbfhyxR92O/Jdp6SH3pc05CDJws59jBrZWEMQlxevCiE6QUTrXy+Im3vC3oD3A==",
|
||||
"dependencies": {
|
||||
"@types/luxon": "~3.3.0",
|
||||
"luxon": "~3.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@nestjs/testing": {
|
||||
"version": "10.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.0.tgz",
|
||||
@@ -4295,6 +4319,11 @@
|
||||
"version": "4.0.2",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/luxon": {
|
||||
"version": "3.3.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.8.tgz",
|
||||
"integrity": "sha512-jYvz8UMLDgy3a5SkGJne8H7VA7zPV2Lwohjx0V8V31+SqAjNmurWMkk9cQhfvlcnXWudBpK9xPM1n4rljOcHYQ=="
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "3.0.1",
|
||||
"license": "MIT"
|
||||
@@ -11295,6 +11324,14 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/luxon": {
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/magic-string": {
|
||||
"version": "0.30.2",
|
||||
"dev": true,
|
||||
@@ -19524,6 +19561,26 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"@nestjs/schedule": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-4.0.0.tgz",
|
||||
"integrity": "sha512-zz4h54m/F/1qyQKvMJCRphmuwGqJltDAkFxUXCVqJBXEs5kbPt93Pza3heCQOcMH22MZNhGlc9DmDMLXVHmgVQ==",
|
||||
"requires": {
|
||||
"cron": "3.1.3",
|
||||
"uuid": "9.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"cron": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/cron/-/cron-3.1.3.tgz",
|
||||
"integrity": "sha512-KVxeKTKYj2eNzN4ElnT6nRSbjbfhyxR92O/Jdp6SH3pc05CDJws59jBrZWEMQlxevCiE6QUTrXy+Im3vC3oD3A==",
|
||||
"requires": {
|
||||
"@types/luxon": "~3.3.0",
|
||||
"luxon": "~3.4.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@nestjs/testing": {
|
||||
"version": "10.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.0.tgz",
|
||||
@@ -20009,6 +20066,11 @@
|
||||
"@types/long": {
|
||||
"version": "4.0.2"
|
||||
},
|
||||
"@types/luxon": {
|
||||
"version": "3.3.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.8.tgz",
|
||||
"integrity": "sha512-jYvz8UMLDgy3a5SkGJne8H7VA7zPV2Lwohjx0V8V31+SqAjNmurWMkk9cQhfvlcnXWudBpK9xPM1n4rljOcHYQ=="
|
||||
},
|
||||
"@types/mime": {
|
||||
"version": "3.0.1"
|
||||
},
|
||||
@@ -24583,6 +24645,11 @@
|
||||
"lru-cache": {
|
||||
"version": "7.18.3"
|
||||
},
|
||||
"luxon": {
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
|
||||
"integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA=="
|
||||
},
|
||||
"magic-string": {
|
||||
"version": "0.30.2",
|
||||
"dev": true,
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
"@nestjs/graphql": "^12.0.11",
|
||||
"@nestjs/passport": "^10.0.2",
|
||||
"@nestjs/platform-fastify": "^10.2.9",
|
||||
"@nestjs/schedule": "^4.0.0",
|
||||
"@reduxjs/toolkit": "^1.9.5",
|
||||
"@reflet/cron": "^1.3.1",
|
||||
"@runonflux/nat-upnp": "^1.0.2",
|
||||
|
||||
@@ -13,17 +13,16 @@ const makeLoggingDirectoryIfNotExists = () => {
|
||||
}
|
||||
|
||||
chmodSync(getters.paths()['log-base'], 0o644);
|
||||
console.log('here');
|
||||
if (
|
||||
existsSync(`${getters.paths()['log-base']}/stdout.log`) &&
|
||||
statSync(`${getters.paths()['log-base']}/stdout.log`).size > 50_000
|
||||
statSync(`${getters.paths()['log-base']}/stdout.log`).size > 5_000_000
|
||||
) {
|
||||
rmSync(`${getters.paths()['log-base']}/stdout.log`);
|
||||
}
|
||||
try {
|
||||
rmSync(`${getters.paths()['log-base']}/stdout.log.*`);
|
||||
} catch (e) {
|
||||
console.log('No old logs to remove');
|
||||
// Ignore Error
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -8,17 +8,19 @@ import { Module } from '@nestjs/common';
|
||||
import { Reflector } from '@nestjs/core';
|
||||
import { ACGuard, AccessControlModule } from 'nest-access-control';
|
||||
import { LoggerModule } from 'nestjs-pino';
|
||||
import { CronModule } from '@app/unraid-api/cron/cron.module';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
LoggerModule.forRoot({
|
||||
pinoHttp: {
|
||||
logger: apiLogger,
|
||||
autoLogging: false
|
||||
autoLogging: false,
|
||||
},
|
||||
}),
|
||||
AccessControlModule.forRoles(setupPermissions()),
|
||||
AuthModule,
|
||||
CronModule,
|
||||
GraphModule,
|
||||
RestModule,
|
||||
],
|
||||
@@ -26,10 +28,7 @@ import { LoggerModule } from 'nestjs-pino';
|
||||
providers: [
|
||||
{
|
||||
provide: 'APP_GUARD',
|
||||
useFactory: () =>
|
||||
new GraphqlAuthGuard(
|
||||
new Reflector(),
|
||||
),
|
||||
useFactory: () => new GraphqlAuthGuard(new Reflector()),
|
||||
},
|
||||
{
|
||||
provide: 'APP_GUARD',
|
||||
|
||||
9
api/src/unraid-api/cron/cron.module.ts
Normal file
9
api/src/unraid-api/cron/cron.module.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { LogCleanupService } from '@app/unraid-api/cron/log-cleanup.service';
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ScheduleModule } from '@nestjs/schedule';
|
||||
|
||||
@Module({
|
||||
imports: [ScheduleModule.forRoot()],
|
||||
providers: [LogCleanupService],
|
||||
})
|
||||
export class CronModule {}
|
||||
18
api/src/unraid-api/cron/log-cleanup.service.ts
Normal file
18
api/src/unraid-api/cron/log-cleanup.service.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { Cron } from '@nestjs/schedule';
|
||||
import { execa } from 'execa';
|
||||
|
||||
@Injectable()
|
||||
export class LogCleanupService {
|
||||
private readonly logger = new Logger(LogCleanupService.name);
|
||||
|
||||
@Cron('* * * * *')
|
||||
async handleCron() {
|
||||
try {
|
||||
this.logger.debug('Running logrotate');
|
||||
await execa(`/usr/sbin/logrotate`, ['/etc/logrotate.conf']);
|
||||
} catch (error) {
|
||||
this.logger.error(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user