Change way derivatives are handled
This commit is contained in:
parent
4566fa947d
commit
05fabea82b
|
@ -42,7 +42,6 @@ export class PreferenceDefaultsService {
|
|||
[SysPreference.BCryptStrength]: 10,
|
||||
|
||||
[SysPreference.RemoveDerivativesAfter]: '7d',
|
||||
[SysPreference.SaveDerivatives]: true,
|
||||
[SysPreference.AllowEditing]: true,
|
||||
|
||||
[SysPreference.ConversionTimeLimit]: '15s',
|
||||
|
|
|
@ -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;
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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)) {
|
|
@ -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,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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]: {
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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),
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue