perf: Remove sync IO from npdi and npts

This commit is contained in:
William Oldham 2025-01-07 13:44:27 +00:00
parent 1fd43ce0f7
commit 068a6358bd
3 changed files with 32 additions and 23 deletions

View File

@ -1,7 +1,7 @@
import path from 'node:path';
import fs from 'fs-extra';
import express from 'express';
import subdomain from 'express-subdomain';
import { fileErrCallback } from '@/util';
const npdi = express.Router();
@ -9,15 +9,13 @@ npdi.get('/p01/data/1/:titleHash/:dataID/:fileHash', (request, response) => {
const { titleHash, fileHash } = request.params;
const contentPath = path.normalize(`${__dirname}/../../cdn/content/encrypted/${titleHash}/${fileHash}`);
if (fs.existsSync(contentPath)) {
response.set('Content-Type', 'applicatoin/octet-stream');
response.set('Content-Disposition', 'attachment');
response.set('Content-Transfer-Encoding', 'binary');
response.set('Content-Type', 'applicatoin/octet-stream');
response.sendFile(contentPath);
} else {
response.sendStatus(404);
}
response.sendFile(contentPath, {
headers: {
'Content-Type': 'applicatoin/octet-stream',
'Content-Disposition': 'attachment',
'Content-Transfer-Encoding': 'binary',
}
}, fileErrCallback(response));
});
const router = express.Router();

View File

@ -1,7 +1,7 @@
import path from 'node:path';
import fs from 'fs-extra';
import express from 'express';
import subdomain from 'express-subdomain';
import { fileErrCallback } from '@/util';
const npts = express.Router();
@ -9,24 +9,22 @@ npts.get('/p01/tasksheet/:id/:hash/:fileName', (request, response) => {
const { id, hash, fileName } = request.params;
const tasksheetPath = path.normalize(`${__dirname}/../../cdn/tasksheet/${id}/${hash}/${fileName}`);
if (fs.existsSync(tasksheetPath)) {
response.set('Content-Type', 'text/xml');
response.sendFile(tasksheetPath);
} else {
response.sendStatus(404);
}
response.sendFile(tasksheetPath, {
headers: {
'Content-Type': 'text/xml'
}
}, fileErrCallback(response));
});
npts.get('/p01/tasksheet/:id/:hash/:subfolder/:fileName', (request, response) => {
const { id, hash, subfolder, fileName } = request.params;
const tasksheetPath = path.normalize(`${__dirname}/../../cdn/tasksheet/${id}/${hash}/_subfolder/${subfolder}/${fileName}`);
if (fs.existsSync(tasksheetPath)) {
response.set('Content-Type', 'text/xml');
response.sendFile(tasksheetPath);
} else {
response.sendStatus(404);
}
response.sendFile(tasksheetPath, {
headers: {
'Content-Type': 'text/xml'
}
}, fileErrCallback(response));
});
const router = express.Router();

View File

@ -11,6 +11,7 @@ import { GetUserDataResponse } from '@pretendonetwork/grpc/account/get_user_data
import { GetUserFriendPIDsResponse } from '@pretendonetwork/grpc/friends/get_user_friend_pids_rpc';
import { config, disabledFeatures } from '@/config-manager';
import { NodeJsClient } from '@smithy/types';
import { Response } from 'express';
let s3: NodeJsClient<S3Client>;
@ -58,6 +59,18 @@ const VALID_FILE_NOTIFY_CONDITIONS = [
'app', 'account'
];
export function fileErrCallback(response: Response) {
return (err: NodeJS.ErrnoException): void => {
if (err) {
if (err.code === 'ENOENT') {
response.sendStatus(404);
} else {
response.status(500).send('Server Error');
}
}
};
}
export function md5(input: crypto.BinaryLike): string {
return crypto.createHash('md5').update(input).digest('hex');
}