Change way derivatives are handled

This commit is contained in:
rubikscraft 2022-12-26 15:56:17 +01:00
parent 4566fa947d
commit 05fabea82b
No known key found for this signature in database
GPG Key ID: 1463EBE9200A5CD4
9 changed files with 40 additions and 46 deletions

View File

@ -42,7 +42,6 @@ export class PreferenceDefaultsService {
[SysPreference.BCryptStrength]: 10,
[SysPreference.RemoveDerivativesAfter]: '7d',
[SysPreference.SaveDerivatives]: true,
[SysPreference.AllowEditing]: true,
[SysPreference.ConversionTimeLimit]: '15s',

View File

@ -4,7 +4,7 @@ import {
Injectable,
Logger,
NestInterceptor,
Optional,
Optional
} from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { FastifyReply } from 'fastify';
@ -46,6 +46,20 @@ export class SuccessInterceptor<T> implements NestInterceptor {
return data;
}
}),
map((data) => {
const request = context.switchToHttp().getRequest();
const response = context.switchToHttp().getResponse<FastifyReply>();
const traceString = `(${request.ip} -> ${request.method} ${request.url})`;
this.logger.verbose(
`Handled ${traceString} with ${response.statusCode} in ${Math.ceil(
response.getResponseTime(),
)}ms`,
SuccessInterceptor.name,
);
return data;
}),
);
}

View File

@ -44,12 +44,9 @@ async function bootstrap() {
);
// Configure logger
const logger = app.get(PicsurLoggerService)
app.useLogger(logger);
app.useLogger(app.get(PicsurLoggerService));
app.flushLogs();
console.log(logger);
app.useGlobalFilters(app.get(MainExceptionFilter));
app.useGlobalInterceptors(app.get(SuccessInterceptor));
app.useGlobalPipes(app.get(ZodValidationPipe));

View File

@ -49,11 +49,12 @@ export class ImageManagerModule implements OnModuleInit {
return;
}
const after_ms = ms(remove_derivatives_after as any);
let after_ms = ms(remove_derivatives_after as any);
if (isNaN(after_ms) || after_ms === 0) {
this.logger.log('remove_derivatives_after is 0, skipping cron');
return;
}
if (after_ms < 60000) after_ms = 60000;
const result = await this.imageFileDB.cleanupDerivatives(after_ms / 1000);
if (HasFailed(result)) {

View File

@ -5,7 +5,8 @@ import { ImageRequestParams } from 'picsur-shared/dist/dto/api/image.dto';
import { ImageEntryVariant } from 'picsur-shared/dist/dto/image-entry-variant.enum';
import {
AnimFileType,
FileType, ImageFileType,
FileType,
ImageFileType,
Mime2FileType
} from 'picsur-shared/dist/dto/mimes.dto';
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
@ -144,19 +145,15 @@ export class ImageManagerService {
const converted_key = this.getConvertHash({ mime: fileType, ...options });
const [save_derivatives, allow_editing] = await Promise.all([
this.sysPref.getBooleanPreference(SysPreference.SaveDerivatives),
this.sysPref.getBooleanPreference(SysPreference.AllowEditing),
]);
if (HasFailed(save_derivatives)) return save_derivatives;
const allow_editing = await this.sysPref.getBooleanPreference(
SysPreference.AllowEditing,
);
if (HasFailed(allow_editing)) return allow_editing;
return MutexFallBack(
converted_key,
() => {
if (save_derivatives)
return this.imageFilesService.getDerivative(imageId, converted_key);
else return Promise.resolve(null);
return this.imageFilesService.getDerivative(imageId, converted_key);
},
async () => {
const masterImage = await this.getMaster(imageId);
@ -180,21 +177,12 @@ export class ImageManagerService {
} in ${Date.now() - startTime}ms`,
);
if (save_derivatives) {
return await this.imageFilesService.addDerivative(
imageId,
converted_key,
convertResult.filetype,
convertResult.image,
);
} else {
const derivative = new EImageDerivativeBackend();
derivative.filetype = convertResult.filetype;
derivative.data = convertResult.image;
derivative.image_id = imageId;
derivative.key = converted_key;
return derivative;
}
return await this.imageFilesService.addDerivative(
imageId,
converted_key,
convertResult.filetype,
convertResult.image,
);
},
);
}

View File

@ -1,12 +1,16 @@
import { Module } from '@nestjs/common';
import { UserDbModule } from '../../collections/user-db/user-db.module';
import { DecoratorsModule } from '../../decorators/decorators.module';
import { ImageManagerModule } from '../../managers/image/image.module';
import { ImageManagerModule } from '../../managers/image/image-manager.module';
import { ImageManageController } from './image-manage.controller';
import { ImageController } from './image.controller';
@Module({
imports: [ImageManagerModule, UserDbModule, DecoratorsModule],
imports: [
ImageManagerModule,
UserDbModule,
DecoratorsModule,
],
controllers: [ImageController, ImageManageController],
})
export class ImageModule {}

View File

@ -17,13 +17,7 @@ export const SysPreferenceUI: {
[SysPreference.RemoveDerivativesAfter]: {
name: 'Cached Images Expiry Time',
helpText:
'Time before cached images are deleted. This does not affect the original image. Set to 0 to disable.',
category: 'Image Processing',
},
[SysPreference.SaveDerivatives]: {
name: 'Cache Converted Images',
helpText:
'Cache converted images, this will reduce the time it takes to load images. It does however use more disk space.',
'Time before cached converted images are deleted. This does not affect the original image. A lower cache time will save on disk space but cost more cpu. Set to 0 to disable.',
category: 'Image Processing',
},
[SysPreference.AllowEditing]: {

View File

@ -13,7 +13,6 @@ export enum SysPreference {
JwtExpiresIn = 'jwt_expires_in',
BCryptStrength = 'bcrypt_strength',
SaveDerivatives = 'save_derivatives',
RemoveDerivativesAfter = 'remove_derivatives_after',
AllowEditing = 'allow_editing',
@ -41,7 +40,6 @@ export const SysPreferenceValueTypes: {
[SysPreference.BCryptStrength]: 'number',
[SysPreference.RemoveDerivativesAfter]: 'string',
[SysPreference.SaveDerivatives]: 'boolean',
[SysPreference.AllowEditing]: 'boolean',
[SysPreference.ConversionTimeLimit]: 'string',
@ -63,8 +61,7 @@ export const SysPreferenceValidators: {
[SysPreference.JwtExpiresIn]: IsValidMS(),
[SysPreference.BCryptStrength]: IsPosInt(),
[SysPreference.RemoveDerivativesAfter]: IsValidMS(),
[SysPreference.SaveDerivatives]: z.boolean(),
[SysPreference.RemoveDerivativesAfter]: IsValidMS(60000),
[SysPreference.AllowEditing]: z.boolean(),
[SysPreference.ConversionTimeLimit]: IsValidMS(),

View File

@ -1,7 +1,7 @@
import ms from 'ms';
import { z } from 'zod';
export const IsValidMS = () =>
export const IsValidMS = (min = 0) =>
z.preprocess(
(v: any) => {
try {
@ -17,5 +17,5 @@ export const IsValidMS = () =>
}),
})
.int()
.min(0),
.min(min),
);