diff --git a/src/handlers/freshHandler.js b/src/handlers/freshHandler.js index fa532ae..4243019 100644 --- a/src/handlers/freshHandler.js +++ b/src/handlers/freshHandler.js @@ -16,7 +16,11 @@ export async function freshHandler(db_paths, list_projects, list_assets, list_ve const all_projects = await list_projects(); for (const project of all_projects) { - await internal_freshProject(db_handles, project, list_assets, list_versions, find_latest, read_summary, read_metadata, db_tokenizable); + try { + await internal_freshProject(db_handles, project, list_assets, list_versions, find_latest, read_summary, read_metadata, db_tokenizable); + } catch (err) { + throw new Error("failed to add project '" + project + "'", { cause: err }); + } } } @@ -24,7 +28,11 @@ export async function freshHandler(db_paths, list_projects, list_assets, list_ve export async function internal_freshProject(db_handles, project, list_assets, list_versions, find_latest, read_summary, read_metadata, db_tokenizable) { const all_assets = await list_assets(project); for (const asset of all_assets) { - await internal_freshAsset(db_handles, project, asset, list_versions, find_latest, read_summary, read_metadata, db_tokenizable); + try { + await internal_freshAsset(db_handles, project, asset, list_versions, find_latest, read_summary, read_metadata, db_tokenizable); + } catch (err) { + throw new Error("failed to add asset '" + asset + "'", { cause: err }); + } } } @@ -35,7 +43,11 @@ export async function internal_freshAsset(db_handles, project, asset, list_versi } const all_versions = await list_versions(project, asset); for (const version of all_versions) { - await internal_freshVersion(db_handles, project, asset, version, latest, read_summary, read_metadata, db_tokenizable); + try { + await internal_freshVersion(db_handles, project, asset, version, latest, read_summary, read_metadata, db_tokenizable); + } catch (err) { + throw new Error("failed to add version '" + version + "'", { cause: err }); + } } } @@ -46,6 +58,10 @@ export async function internal_freshVersion(db_handles, project, asset, version, } const output = await read_metadata(project, asset, version, Object.keys(db_handles)); for (const [e, db] of Object.entries(db_handles)) { - addVersion(db, project, asset, version, (latest == version), output[e], db_tokenizable[e]); + try { + addVersion(db, project, asset, version, (latest == version), output[e], db_tokenizable[e]); + } catch (err) { + throw new Error("failed to add to database '" + e + "'", { cause: err }); + } } } diff --git a/src/handlers/updateHandler.js b/src/handlers/updateHandler.js index f3ccda2..311238e 100644 --- a/src/handlers/updateHandler.js +++ b/src/handlers/updateHandler.js @@ -42,51 +42,55 @@ export async function updateHandler(db_paths, last_modified, read_logs, read_met for (const l of logs) { const parameters = l.log; - const type = safe_extract(parameters, "type"); + try { + const type = safe_extract(parameters, "type"); - if (type == "add-version") { - const project = safe_extract(parameters, "project"); - const asset = safe_extract(parameters, "asset"); - const version = safe_extract(parameters, "version"); - let output = await read_metadata(project, asset, version, to_extract); - for (const [e, db] of Object.entries(db_handles)) { - addVersion(db, project, asset, version, is_latest(parameters), output[e], db_tokenizable[e]); - } + if (type == "add-version") { + const project = safe_extract(parameters, "project"); + const asset = safe_extract(parameters, "asset"); + const version = safe_extract(parameters, "version"); + let output = await read_metadata(project, asset, version, to_extract); + for (const [e, db] of Object.entries(db_handles)) { + addVersion(db, project, asset, version, is_latest(parameters), output[e], db_tokenizable[e]); + } - } else if (type == "delete-version") { - const project = safe_extract(parameters, "project"); - const asset = safe_extract(parameters, "asset"); - const version = safe_extract(parameters, "version"); - for (const db of Object.values(db_handles)) { - deleteVersion(db, project, asset, version); - } + } else if (type == "delete-version") { + const project = safe_extract(parameters, "project"); + const asset = safe_extract(parameters, "asset"); + const version = safe_extract(parameters, "version"); + for (const db of Object.values(db_handles)) { + deleteVersion(db, project, asset, version); + } - // If we just deleted the latest version, we need to reset the - // previous version with the latest information. - if (is_latest(parameters)) { - const latest = await find_latest(project, asset); - if (latest != null) { - for (const db of Object.values(db_handles)) { - setLatest(db, project, asset, latest); + // If we just deleted the latest version, we need to reset the + // previous version with the latest information. + if (is_latest(parameters)) { + const latest = await find_latest(project, asset); + if (latest != null) { + for (const db of Object.values(db_handles)) { + setLatest(db, project, asset, latest); + } } } - } - } else if (type == "delete-asset") { - const project = safe_extract(parameters, "project"); - const asset = safe_extract(parameters, "asset"); - for (const db of Object.values(db_handles)) { - deleteAsset(db, project, asset); - } + } else if (type == "delete-asset") { + const project = safe_extract(parameters, "project"); + const asset = safe_extract(parameters, "asset"); + for (const db of Object.values(db_handles)) { + deleteAsset(db, project, asset); + } - } else if (type == "delete-project") { - const project = safe_extract(parameters, "project"); - for (const db of Object.values(db_handles)) { - deleteProject(db, project); - } + } else if (type == "delete-project") { + const project = safe_extract(parameters, "project"); + for (const db of Object.values(db_handles)) { + deleteProject(db, project); + } - } else { - throw new Error("unknown update action type '" + type + "'"); + } else { + throw new Error("unknown update action type '" + type + "'"); + } + } catch (err) { + throw new Error("failed update for '" + l.name + "' ('" + JSON.stringify(parameters) + "')", { cause: err }); } } } diff --git a/src/local/readLogs.js b/src/local/readLogs.js index 72a61cd..d1258a9 100644 --- a/src/local/readLogs.js +++ b/src/local/readLogs.js @@ -31,8 +31,12 @@ export function readLogs(registry, since) { continue; } - const contents = fs.readFileSync(path.join(logdir, l), { encoding: 'utf8', flag: 'r' }); - output.push({ time: parsed, log: JSON.parse(contents) }); + try { + const contents = fs.readFileSync(path.join(logdir, l), { encoding: 'utf8', flag: 'r' }); + output.push({ name: l, time: parsed, log: JSON.parse(contents) }); + } catch (err) { + throw new Error("failed to parse log '" + l + "'", { cause: err }); + } } return output;