209 похожих чатов

Всем привет. Сразу извиняюсь потому что я не профессионал, обращаюсь

к вам и надеюсь что поможете с находкой правильного решения поставленной задачей потому что я не уверен в моём подходе.

Стоит такая задача - Воплотить возможность скачивать все бэкап файлы в .zip формате с помощью выполнения скрипта на удаленном сервере.

По скрипту - обычный скрипт который в stdout возвращает .zip файл, в нём уже находятся все файлы для определенного бэкапа.

Сама команда выглядит примерно так:

restore.py --id south1-a-10 --time 1693170301 --path serverpro-us/www --pxar wpn10.pxar.didx --dst stdout dl

Как на данный момент я думаю о выполнении решения

- Создать метод в микросервисе который будет выполнять этот скрипт с помощью promisify(execFile)('restore.py', [...]), так весь микросервис построен на данный момент и все работает вроде стабильно

Потом с помощью ReadableBufferStream из пакета stream-buffers, поставить ответ из stdout, примерно вот таким образом

const bufferStream = new ReadableStreamBuffer();
bufferStream.put(stdout);
bufferStream.stop();

return bufferStream;

И уже в главном сервисе возвращать его так -

async exportAllAsZip(exportAllAsZipDTO: ExportAllAsZipRequestDTO): Promise<ReadableStreamBuffer> {
return await lastValueFrom(
this.backupClient.send('export-all-as-zip', exportAllAsZipDTO)
).catch((error) => {
throw new HttpException('Something went wrong', error.status);
});
}

и так в контроллере

@ApiBearerAuth('JWT-auth')
@ResourceAuthGuard(ResourceTypeEnum.site, GuardResourceTypeEnum.update)
@Post('export-all-as-zip/:externalId')
@Header('Content-Type', 'application/zip')
@Header('Content-Disposition', 'attachment; filename=backup.zip')
async exportAllAsZip(
@Body() exportAllAsZipDTO: ExportAllAsZipRequestDTO,
@Param('externalId') externalId: string,
@InjectItems() allowedIds: string[] | undefined
): Promise<ReadableStreamBuffer> {
if (allowedIds && !allowedIds.includes(externalId?.toLowerCase()))
throw new ForbiddenException('You have no access to this site');
try {
return this.backupService.exportAllAsZip(exportAllAsZipDTO);
} catch (error) {
throw new BadRequestException(error.message);
}
}

Можете пожалуйста подсказать, правильный ли подход? Можно ли его улучшить, если нет, как правильно воплотить такой функионал? Заранее огромное спасибо!

1 ответов

73 просмотра

Что конкретно ты хочешь улучшить? Если оно работает и не вызывает проблем, то я бы не трогал

Похожие вопросы

Обсуждают сегодня

@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Hello, Is iExec also part of the "inception program" or another one ? Would it be a name to qualified the nature of the relationship between iExec and Nvidia? And does Secret ...
Ñïķøłäś
8
Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
any reference of this implementation?
BitBuddha
29
Also, why can’t the community have a vote/ say when it comes to initiatives like buybacks. Isn’t the point of crypto decentralisation? Don’t we deserve input as long term supp...
👨🏽‍🦰
13
Hi guys, any problem with Pulsebrige? Trying to transfer from wETH to ETH. First it tells me to connect my metamask "through mobile app" not desktop. Then I did and confirmed ...
Snowflakecrypto
13
Карта сайта