fix(doctor): fail gracefully in case of unexpected error (#132)

This commit is contained in:
Nico 2025-12-12 17:55:37 +01:00 committed by Nicolas Meienberger
parent c4ec8ea62b
commit 3efff035c5
2 changed files with 16 additions and 8 deletions

View file

@ -87,7 +87,7 @@ export const RepositoryInfoTabContent = ({ repository }: Props) => {
<p className="text-sm text-muted-foreground">Unique identifier for the repository.</p> <p className="text-sm text-muted-foreground">Unique identifier for the repository.</p>
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="compressionMode">Compression Mode</Label> <Label htmlFor="compressionMode">Compression mode</Label>
<Select value={compressionMode} onValueChange={(val) => setCompressionMode(val as CompressionMode)}> <Select value={compressionMode} onValueChange={(val) => setCompressionMode(val as CompressionMode)}>
<SelectTrigger id="compressionMode"> <SelectTrigger id="compressionMode">
<SelectValue placeholder="Select compression mode" /> <SelectValue placeholder="Select compression mode" />
@ -115,11 +115,11 @@ export const RepositoryInfoTabContent = ({ repository }: Props) => {
<p className="mt-1 text-sm">{repository.status || "unknown"}</p> <p className="mt-1 text-sm">{repository.status || "unknown"}</p>
</div> </div>
<div> <div>
<div className="text-sm font-medium text-muted-foreground">Created At</div> <div className="text-sm font-medium text-muted-foreground">Created at</div>
<p className="mt-1 text-sm">{new Date(repository.createdAt * 1000).toLocaleString()}</p> <p className="mt-1 text-sm">{new Date(repository.createdAt).toLocaleString()}</p>
</div> </div>
<div> <div>
<div className="text-sm font-medium text-muted-foreground">Last Checked</div> <div className="text-sm font-medium text-muted-foreground">Last checked</div>
<p className="mt-1 text-sm"> <p className="mt-1 text-sm">
{repository.lastChecked ? new Date(repository.lastChecked).toLocaleString() : "Never"} {repository.lastChecked ? new Date(repository.lastChecked).toLocaleString() : "Never"}
</p> </p>

View file

@ -360,23 +360,31 @@ const doctorRepository = async (name: string) => {
error: recheckResult.error, error: recheckResult.error,
}); });
} }
} catch (error) {
steps.push({
step: "unexpected_error",
success: false,
output: null,
error: toMessage(error),
});
} finally { } finally {
releaseLock(); releaseLock();
} }
const allSuccessful = steps.every((s) => s.success); const doctorSucceeded = steps.every((step) => step.success);
const doctorError = steps.find((step) => step.error)?.error ?? null;
await db await db
.update(repositoriesTable) .update(repositoriesTable)
.set({ .set({
status: allSuccessful ? "healthy" : "error", status: doctorSucceeded ? "healthy" : "error",
lastChecked: Date.now(), lastChecked: Date.now(),
lastError: allSuccessful ? null : steps.find((s) => !s.success)?.error, lastError: doctorError,
}) })
.where(eq(repositoriesTable.id, repository.id)); .where(eq(repositoriesTable.id, repository.id));
return { return {
success: allSuccessful, success: doctorSucceeded,
steps, steps,
}; };
}; };