refactor: rclone system capability

This commit is contained in:
Nicolas Meienberger
2025-11-11 21:44:04 +01:00
parent 36b0282d18
commit 52e38a6242
9 changed files with 114 additions and 67 deletions

View File

@@ -4,6 +4,7 @@ import { logger } from "../utils/logger";
export type SystemCapabilities = {
docker: boolean;
rclone: boolean;
};
let capabilitiesPromise: Promise<SystemCapabilities> | null = null;
@@ -28,6 +29,7 @@ export async function getCapabilities(): Promise<SystemCapabilities> {
async function detectCapabilities(): Promise<SystemCapabilities> {
return {
docker: await detectDocker(),
rclone: await detectRclone(),
};
}
@@ -53,3 +55,22 @@ async function detectDocker(): Promise<boolean> {
return false;
}
}
/**
* Checks if rclone is available by:
* 1. Checking if /root/.config/rclone directory exists and is accessible
*/
async function detectRclone(): Promise<boolean> {
try {
await fs.access("/root/.config/rclone");
logger.info("rclone capability: enabled");
return true;
} catch (_) {
logger.warn(
"rclone capability: disabled. " +
"To enable: mount /root/.config/rclone in docker-compose.yml",
);
return false;
}
}

View File

@@ -23,13 +23,13 @@ export const eventsController = new Hono().get("/", (c) => {
scheduleId: number;
volumeName: string;
repositoryName: string;
secondsElapsed: number;
percentDone: number;
totalFiles: number;
filesDone: number;
totalBytes: number;
bytesDone: number;
currentFiles: string[];
seconds_elapsed: number;
percent_done: number;
total_files: number;
files_done: number;
total_bytes: number;
bytes_done: number;
current_files: string[];
}) => {
stream.writeSSE({
data: JSON.stringify(data),

View File

@@ -3,6 +3,7 @@ import { describeRoute, resolver } from "hono-openapi";
export const capabilitiesSchema = type({
docker: "boolean",
rclone: "boolean",
});
export const systemInfoResponse = type({