mirror of
https://github.com/Ravinou/borgwarehouse
synced 2026-03-15 14:55:45 +01:00
70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
import path from 'path';
|
|
import { promisify } from 'util';
|
|
import { exec as execCallback } from 'node:child_process';
|
|
import { LastSaveDTO, StorageUsedDTO } from '~/types';
|
|
|
|
const exec = promisify(execCallback);
|
|
const shellsDirectory = path.join(process.cwd(), '/helpers/shells');
|
|
|
|
// This is to prevent the cronjob from being executed multiple times
|
|
let isLastSaveListRunning = false;
|
|
let isStorageUsedRunning = false;
|
|
|
|
export const ShellService = {
|
|
getLastSaveList: async (): Promise<LastSaveDTO[]> => {
|
|
if (isLastSaveListRunning) {
|
|
throw new Error('The check status service is already running');
|
|
} else {
|
|
isLastSaveListRunning = true;
|
|
}
|
|
|
|
try {
|
|
const { stdout } = await exec(`${shellsDirectory}/getLastSave.sh`);
|
|
return JSON.parse(stdout || '[]');
|
|
} finally {
|
|
isLastSaveListRunning = false;
|
|
}
|
|
},
|
|
|
|
getStorageUsed: async (): Promise<StorageUsedDTO[]> => {
|
|
if (isStorageUsedRunning) {
|
|
throw new Error('The storage used service is already running');
|
|
} else {
|
|
isStorageUsedRunning = true;
|
|
}
|
|
try {
|
|
const { stdout } = await exec(`${shellsDirectory}/getStorageUsed.sh`);
|
|
return JSON.parse(stdout || '[]');
|
|
} finally {
|
|
isStorageUsedRunning = false;
|
|
}
|
|
},
|
|
|
|
deleteRepo: async (repositoryName: string) => {
|
|
const { stdout, stderr } = await exec(`${shellsDirectory}/deleteRepo.sh ${repositoryName}`);
|
|
return { stdout, stderr };
|
|
},
|
|
|
|
updateRepo: async (
|
|
repositoryName: string,
|
|
sshPublicKey: string,
|
|
storageSize: number,
|
|
appendOnlyMode: boolean
|
|
) => {
|
|
const { stdout, stderr } = await exec(
|
|
`${shellsDirectory}/updateRepo.sh ${repositoryName} "${sshPublicKey}" ${storageSize} ${appendOnlyMode}`
|
|
);
|
|
return { stdout, stderr };
|
|
},
|
|
|
|
createRepo: async (
|
|
sshPublicKey: string,
|
|
storageSize: number,
|
|
appendOnlyMode: boolean
|
|
): Promise<{ stdout?: string; stderr?: string }> => {
|
|
const { stdout, stderr } = await exec(
|
|
`${shellsDirectory}/createRepo.sh "${sshPublicKey}" ${storageSize} ${appendOnlyMode}`
|
|
);
|
|
return { stdout, stderr };
|
|
},
|
|
};
|