fix: restore job statistic display

This commit is contained in:
Samuel N Cui
2023-09-22 23:40:03 +08:00
parent eeb0f4f7bf
commit ede138317f
2 changed files with 40 additions and 21 deletions

View File

@@ -161,8 +161,8 @@ func (a *jobRestoreExecutor) restoreTape(ctx context.Context, device string) (re
expects := lo.Map(a.state.Tapes, func(t *entity.RestoreTape, _ int) string { return t.Barcode })
return fmt.Errorf("unexpected tape barcode in library, has= '%s' expect= %v", barcode, expects)
}
if restoreTape.Status != entity.CopyStatus_PENDING {
return fmt.Errorf("unexpected restore tape state status, has= '%s' expect= '%s'", restoreTape.Status, entity.CopyStatus_PENDING)
if restoreTape.Status == entity.CopyStatus_SUBMITED {
return fmt.Errorf("unexpected restore tape state status, tape is restored, status= '%s'", restoreTape.Status)
}
tape, err := a.exe.lib.GetTape(ctx, restoreTape.TapeId)
@@ -251,7 +251,7 @@ func (a *jobRestoreExecutor) restoreTape(ctx context.Context, device string) (re
case "finished":
a.logger.WithContext(ctx).Infof("file '%s' copy finished, size= %d", src.RealPath(), job.Size)
targetStatus = entity.CopyStatus_SUBMITED
targetStatus = entity.CopyStatus_STAGED
if len(job.FailTargets) > 0 {
targetStatus = entity.CopyStatus_FAILED
}
@@ -292,16 +292,31 @@ func (a *jobRestoreExecutor) restoreTape(ctx context.Context, device string) (re
targetFile.Status = targetStatus
if _, err := a.exe.SaveJob(ctx, a.job); err != nil {
logrus.WithContext(ctx).Infof("save job for update file fail, name= %s", job.Base+path.Join(job.Path...))
a.logger.WithContext(ctx).Infof("save job for update file fail, name= %s", job.Base+path.Join(job.Path...))
}
return
}
}))
restoreTape.Status = entity.CopyStatus_RUNNING
if _, err := a.exe.SaveJob(tools.WithoutTimeout(ctx), a.job); err != nil {
a.logger.WithContext(ctx).Infof("save job for submit tape fail, barcode= %s", restoreTape.Barcode)
}
defer func() {
restoreTape.Status = entity.CopyStatus_SUBMITED
for _, file := range restoreTape.Files {
if file.Status == entity.CopyStatus_STAGED {
file.Status = entity.CopyStatus_SUBMITED
}
if file.Status != entity.CopyStatus_SUBMITED {
restoreTape.Status = entity.CopyStatus_FAILED
}
}
if _, err := a.exe.SaveJob(tools.WithoutTimeout(ctx), a.job); err != nil {
logrus.WithContext(ctx).Infof("save job for submit tape fail, barcode= %s", restoreTape.Barcode)
a.logger.WithContext(ctx).Infof("save job for submit tape fail, barcode= %s", restoreTape.Barcode)
}
}()

View File

@@ -271,12 +271,12 @@ const ArchiveCard = ({
{ name: "Current Speed", value: display?.speed ? `${formatFilesize(display?.speed)}/s` : "--" },
{ name: "Average Speed", value: !isNaN(avgSpeed) ? `${formatFilesize(avgSpeed)}/s` : "--" },
{ name: "Estimated Time", value: !isNaN(avgSpeed) ? format(((totalBytes - copyedBytes) * 1000) / avgSpeed) : "--" },
{ name: "Total Files", value: totalFiles },
{ name: "Total Bytes", value: formatFilesize(totalBytes) },
{ name: "Submited Files", value: submitedFiles },
{ name: "Submited Bytes", value: formatFilesize(submitedBytes) },
{ name: "Copyed Files", value: copyedFiles },
{ name: "Copyed Bytes", value: formatFilesize(copyedBytes) },
{ name: "Submited Files", value: submitedFiles },
{ name: "Submited Bytes", value: formatFilesize(submitedBytes) },
{ name: "Total Files", value: totalFiles },
{ name: "Total Bytes", value: formatFilesize(totalBytes) },
];
return [fields, progress];
@@ -394,23 +394,27 @@ const RestoreCard = ({
}): JSX.Element => {
const [fields, progress] = useMemo(() => {
const totalFiles = state.tapes.reduce((count, tape) => count + tape.files.length, 0);
let submitedFiles = 0,
submitedBytes = 0,
let successFiles = 0,
successBytes = 0,
copyedFiles = Number(display?.copyedFiles || 0n),
copyedBytes = Number(display?.copyedBytes || 0n),
totalBytes = 0;
for (const tape of state.tapes) {
for (const file of tape.files) {
totalBytes += Number(file.size);
if (file.status !== CopyStatus.SUBMITED) {
continue;
if (file.status === CopyStatus.SUBMITED || file.status === CopyStatus.STAGED) {
successFiles++;
successBytes += Number(file.size);
}
submitedFiles++;
submitedBytes += Number(file.size);
if (file.status === CopyStatus.SUBMITED) {
copyedFiles++;
copyedBytes += Number(file.size);
}
}
}
const copyedFiles = submitedFiles + Number(display?.copyedFiles || 0n);
const copyedBytes = submitedBytes + Number(display?.copyedBytes || 0n);
const avgSpeed = (() => {
if (!display || !display.copyedBytes || !display.startTime) {
return NaN;
@@ -430,12 +434,12 @@ const RestoreCard = ({
{ name: "Current Speed", value: display?.speed ? `${formatFilesize(display?.speed)}/s` : "--" },
{ name: "Average Speed", value: !isNaN(avgSpeed) ? `${formatFilesize(avgSpeed)}/s` : "--" },
{ name: "Estimated Time", value: !isNaN(avgSpeed) ? format(((totalBytes - copyedBytes) * 1000) / avgSpeed) : "--" },
{ name: "Total Files", value: totalFiles },
{ name: "Total Bytes", value: formatFilesize(totalBytes) },
{ name: "Submited Files", value: submitedFiles },
{ name: "Submited Bytes", value: formatFilesize(submitedBytes) },
{ name: "Copyed Files", value: copyedFiles },
{ name: "Copyed Bytes", value: formatFilesize(copyedBytes) },
{ name: "Success Files", value: successFiles },
{ name: "Success Bytes", value: formatFilesize(successBytes) },
{ name: "Total Files", value: totalFiles },
{ name: "Total Bytes", value: formatFilesize(totalBytes) },
];
return [fields, progress];