mirror of
https://github.com/samuelncui/yatm.git
synced 2026-01-05 04:55:23 +00:00
fix: restore job statistic display
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}()
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user