From 2b141af172ab6bfcf27c16e98c88172cbeb7c312 Mon Sep 17 00:00:00 2001 From: Dmitrii Neeman Date: Thu, 30 Jan 2025 16:02:03 +0200 Subject: [PATCH 1/4] FMWK-653-fix-reports-timing --- cmd/internal/app/reports.go | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/cmd/internal/app/reports.go b/cmd/internal/app/reports.go index e1a0d41e..c0cf913a 100644 --- a/cmd/internal/app/reports.go +++ b/cmd/internal/app/reports.go @@ -33,18 +33,28 @@ func printBackupReport(stats, xdrStats *bModels.BackupStats) { fmt.Println(strings.Repeat("-", len(headerBackupReport))) fmt.Printf("Start Time: %s\n", stats.StartTime.Format(time.RFC1123)) - fmt.Printf("Duration: %s\n", stats.GetDuration()) - - fmt.Println() - - fmt.Printf("Records Read: %d\n", stats.GetReadRecords()) + dur := stats.GetDuration() var bw, fw, tr uint64 if xdrStats != nil { bw = xdrStats.GetBytesWritten() fw = xdrStats.GetFileCount() tr = xdrStats.TotalRecords + + if xdrStats.GetDuration() > dur { + dur = xdrStats.GetDuration() + } + } + + fmt.Printf("Duration: %s\n", dur) + + fmt.Println() + + switch { + case xdrStats != nil: fmt.Printf("Records Received: %d\n", xdrStats.GetReadRecords()) + default: + fmt.Printf("Records Read: %d\n", stats.GetReadRecords()) } fmt.Printf("sIndex Read: %d\n", stats.GetSIndexes()) @@ -61,19 +71,24 @@ func printRestoreReport(asbStats, asbxStats *bModels.RestoreStats) { fmt.Println(headerRestoreReport) fmt.Println(strings.Repeat("-", len(headerRestoreReport))) - fmt.Printf("Start Time: %s\n", asbStats.StartTime.Format(time.RFC1123)) - fmt.Printf("Duration: %s\n", asbStats.GetDuration()) - - fmt.Println() - + dur := asbStats.GetDuration() var rr, ir, ri, br uint64 if asbxStats != nil { rr = asbxStats.GetReadRecords() ir = asbxStats.GetRecordsIgnored() ri = asbxStats.GetRecordsInserted() br = asbxStats.GetTotalBytesRead() + + if asbxStats.GetDuration() > dur { + dur = asbxStats.GetDuration() + } } + fmt.Printf("Start Time: %s\n", asbStats.StartTime.Format(time.RFC1123)) + fmt.Printf("Duration: %s\n", dur) + + fmt.Println() + fmt.Printf("Records Read: %d\n", asbStats.GetReadRecords()+rr) fmt.Printf("sIndex Read: %d\n", asbStats.GetSIndexes()) fmt.Printf("UDFs Read: %d\n", asbStats.GetUDFs()) From b327d1809105e1bc8bf8eb3d252de962e04aa4fe Mon Sep 17 00:00:00 2001 From: Dmitrii Neeman Date: Thu, 30 Jan 2025 16:03:59 +0200 Subject: [PATCH 2/4] linter --- cmd/internal/app/reports.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmd/internal/app/reports.go b/cmd/internal/app/reports.go index c0cf913a..e2403f1b 100644 --- a/cmd/internal/app/reports.go +++ b/cmd/internal/app/reports.go @@ -35,7 +35,9 @@ func printBackupReport(stats, xdrStats *bModels.BackupStats) { fmt.Printf("Start Time: %s\n", stats.StartTime.Format(time.RFC1123)) dur := stats.GetDuration() + var bw, fw, tr uint64 + if xdrStats != nil { bw = xdrStats.GetBytesWritten() fw = xdrStats.GetFileCount() @@ -72,7 +74,9 @@ func printRestoreReport(asbStats, asbxStats *bModels.RestoreStats) { fmt.Println(strings.Repeat("-", len(headerRestoreReport))) dur := asbStats.GetDuration() + var rr, ir, ri, br uint64 + if asbxStats != nil { rr = asbxStats.GetReadRecords() ir = asbxStats.GetRecordsIgnored() From 53cdff6a173495e085c74cc99675be6680936801 Mon Sep 17 00:00:00 2001 From: Dmitrii Neeman Date: Thu, 30 Jan 2025 17:09:04 +0200 Subject: [PATCH 3/4] review fixes --- cmd/internal/app/reports.go | 50 +++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/cmd/internal/app/reports.go b/cmd/internal/app/reports.go index e2403f1b..060fd0e5 100644 --- a/cmd/internal/app/reports.go +++ b/cmd/internal/app/reports.go @@ -26,13 +26,16 @@ const ( headerBackupReport = "Backup Report" headerRestoreReport = "Restore Report" headerEstimateReport = "Estimate Report" + + templateString = "%s%s\n" + templateInt = "%s%d\n" ) func printBackupReport(stats, xdrStats *bModels.BackupStats) { fmt.Println(headerBackupReport) fmt.Println(strings.Repeat("-", len(headerBackupReport))) - fmt.Printf("Start Time: %s\n", stats.StartTime.Format(time.RFC1123)) + fmt.Printf(templateString, indent("Start Time"), stats.StartTime.Format(time.RFC1123)) dur := stats.GetDuration() @@ -48,25 +51,25 @@ func printBackupReport(stats, xdrStats *bModels.BackupStats) { } } - fmt.Printf("Duration: %s\n", dur) + fmt.Printf(templateInt, indent("Duration"), dur) fmt.Println() switch { case xdrStats != nil: - fmt.Printf("Records Received: %d\n", xdrStats.GetReadRecords()) + fmt.Printf(templateInt, indent("Records Received"), xdrStats.GetReadRecords()) default: - fmt.Printf("Records Read: %d\n", stats.GetReadRecords()) + fmt.Printf(templateInt, indent("Records Read"), stats.GetReadRecords()) } - fmt.Printf("sIndex Read: %d\n", stats.GetSIndexes()) - fmt.Printf("UDFs Read: %d\n", stats.GetUDFs()) + fmt.Printf(templateInt, indent("sIndex Read"), stats.GetSIndexes()) + fmt.Printf(templateInt, indent("UDFs Read"), stats.GetUDFs()) fmt.Println() - fmt.Printf("Bytes Written: %d bytes\n", stats.GetBytesWritten()+bw) - fmt.Printf("Total Records: %d\n", stats.TotalRecords+tr) - fmt.Printf("Files Written: %d\n", stats.GetFileCount()+fw) + fmt.Printf(templateInt, indent("Bytes Written"), stats.GetBytesWritten()+bw) + fmt.Printf(templateInt, indent("Total Records"), stats.TotalRecords+tr) + fmt.Printf(templateInt, indent("Files Written"), stats.GetFileCount()+fw) } func printRestoreReport(asbStats, asbxStats *bModels.RestoreStats) { @@ -88,28 +91,27 @@ func printRestoreReport(asbStats, asbxStats *bModels.RestoreStats) { } } - fmt.Printf("Start Time: %s\n", asbStats.StartTime.Format(time.RFC1123)) - fmt.Printf("Duration: %s\n", dur) + fmt.Printf(templateString, indent("Start Time"), asbStats.StartTime.Format(time.RFC1123)) + fmt.Printf(templateInt, indent("Duration"), dur) fmt.Println() - fmt.Printf("Records Read: %d\n", asbStats.GetReadRecords()+rr) - fmt.Printf("sIndex Read: %d\n", asbStats.GetSIndexes()) - fmt.Printf("UDFs Read: %d\n", asbStats.GetUDFs()) - fmt.Printf("Bytes Written: %d bytes\n", asbStats.GetBytesWritten()) + fmt.Printf(templateInt, indent("Records Read"), asbStats.GetReadRecords()+rr) + fmt.Printf(templateInt, indent("sIndex Read"), asbStats.GetSIndexes()) + fmt.Printf(templateInt, indent("UDFs Read"), asbStats.GetUDFs()) fmt.Println() - fmt.Printf("Expired Records: %d\n", asbStats.GetRecordsExpired()) - fmt.Printf("Skipped Records: %d\n", asbStats.GetRecordsSkipped()) - fmt.Printf("Ignored Records: %d\n", asbStats.GetRecordsIgnored()+ir) - fmt.Printf("Fresher Records: %d\n", asbStats.GetRecordsFresher()) - fmt.Printf("Existed Records: %d\n", asbStats.GetRecordsExisted()) + fmt.Printf(templateInt, indent("Expired Records"), asbStats.GetRecordsExpired()) + fmt.Printf(templateInt, indent("Skipped Records"), asbStats.GetRecordsSkipped()) + fmt.Printf(templateInt, indent("Ignored Records"), asbStats.GetRecordsIgnored()+ir) + fmt.Printf(templateInt, indent("Fresher Records"), asbStats.GetRecordsFresher()) + fmt.Printf(templateInt, indent("Existed Records"), asbStats.GetRecordsExisted()) fmt.Println() - fmt.Printf("Inserted Records: %d\n", asbStats.GetRecordsInserted()+ri) - fmt.Printf("Total Bytes Read: %d\n", asbStats.GetTotalBytesRead()+br) + fmt.Printf(templateInt, indent("Inserted Records"), asbStats.GetRecordsInserted()+ri) + fmt.Printf(templateInt, indent("Total Bytes Read"), asbStats.GetTotalBytesRead()+br) } func printEstimateReport(estimate uint64) { @@ -118,3 +120,7 @@ func printEstimateReport(estimate uint64) { fmt.Printf("File size: %d bytes\n", estimate) } + +func indent(key string) string { + return fmt.Sprintf("%s:%s", key, strings.Repeat(" ", 21-len(key))) +} From fade8193a2264d7068694ead7a523f769e1a8280 Mon Sep 17 00:00:00 2001 From: Dmitrii Neeman Date: Thu, 30 Jan 2025 17:22:07 +0200 Subject: [PATCH 4/4] improvement --- cmd/internal/app/reports.go | 51 +++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/cmd/internal/app/reports.go b/cmd/internal/app/reports.go index 060fd0e5..5b0073d1 100644 --- a/cmd/internal/app/reports.go +++ b/cmd/internal/app/reports.go @@ -26,16 +26,13 @@ const ( headerBackupReport = "Backup Report" headerRestoreReport = "Restore Report" headerEstimateReport = "Estimate Report" - - templateString = "%s%s\n" - templateInt = "%s%d\n" ) func printBackupReport(stats, xdrStats *bModels.BackupStats) { fmt.Println(headerBackupReport) fmt.Println(strings.Repeat("-", len(headerBackupReport))) - fmt.Printf(templateString, indent("Start Time"), stats.StartTime.Format(time.RFC1123)) + printMetric("Start Time", stats.StartTime.Format(time.RFC1123)) dur := stats.GetDuration() @@ -51,25 +48,25 @@ func printBackupReport(stats, xdrStats *bModels.BackupStats) { } } - fmt.Printf(templateInt, indent("Duration"), dur) + printMetric("Duration", dur) fmt.Println() switch { case xdrStats != nil: - fmt.Printf(templateInt, indent("Records Received"), xdrStats.GetReadRecords()) + printMetric("Records Received", xdrStats.GetReadRecords()) default: - fmt.Printf(templateInt, indent("Records Read"), stats.GetReadRecords()) + printMetric("Records Read", stats.GetReadRecords()) } - fmt.Printf(templateInt, indent("sIndex Read"), stats.GetSIndexes()) - fmt.Printf(templateInt, indent("UDFs Read"), stats.GetUDFs()) + printMetric("sIndex Read", stats.GetSIndexes()) + printMetric("UDFs Read", stats.GetUDFs()) fmt.Println() - fmt.Printf(templateInt, indent("Bytes Written"), stats.GetBytesWritten()+bw) - fmt.Printf(templateInt, indent("Total Records"), stats.TotalRecords+tr) - fmt.Printf(templateInt, indent("Files Written"), stats.GetFileCount()+fw) + printMetric("Bytes Written", stats.GetBytesWritten()+bw) + printMetric("Total Records", stats.TotalRecords+tr) + printMetric("Files Written", stats.GetFileCount()+fw) } func printRestoreReport(asbStats, asbxStats *bModels.RestoreStats) { @@ -91,34 +88,38 @@ func printRestoreReport(asbStats, asbxStats *bModels.RestoreStats) { } } - fmt.Printf(templateString, indent("Start Time"), asbStats.StartTime.Format(time.RFC1123)) - fmt.Printf(templateInt, indent("Duration"), dur) + printMetric("Start Time", asbStats.StartTime.Format(time.RFC1123)) + printMetric("Duration", dur) fmt.Println() - fmt.Printf(templateInt, indent("Records Read"), asbStats.GetReadRecords()+rr) - fmt.Printf(templateInt, indent("sIndex Read"), asbStats.GetSIndexes()) - fmt.Printf(templateInt, indent("UDFs Read"), asbStats.GetUDFs()) + printMetric("Records Read", asbStats.GetReadRecords()+rr) + printMetric("sIndex Read", asbStats.GetSIndexes()) + printMetric("UDFs Read", asbStats.GetUDFs()) fmt.Println() - fmt.Printf(templateInt, indent("Expired Records"), asbStats.GetRecordsExpired()) - fmt.Printf(templateInt, indent("Skipped Records"), asbStats.GetRecordsSkipped()) - fmt.Printf(templateInt, indent("Ignored Records"), asbStats.GetRecordsIgnored()+ir) - fmt.Printf(templateInt, indent("Fresher Records"), asbStats.GetRecordsFresher()) - fmt.Printf(templateInt, indent("Existed Records"), asbStats.GetRecordsExisted()) + printMetric("Expired Records", asbStats.GetRecordsExpired()) + printMetric("Skipped Records", asbStats.GetRecordsSkipped()) + printMetric("Ignored Records", asbStats.GetRecordsIgnored()+ir) + printMetric("Fresher Records", asbStats.GetRecordsFresher()) + printMetric("Existed Records", asbStats.GetRecordsExisted()) fmt.Println() - fmt.Printf(templateInt, indent("Inserted Records"), asbStats.GetRecordsInserted()+ri) - fmt.Printf(templateInt, indent("Total Bytes Read"), asbStats.GetTotalBytesRead()+br) + printMetric("Inserted Records", asbStats.GetRecordsInserted()+ri) + printMetric("Total Bytes Read", asbStats.GetTotalBytesRead()+br) } func printEstimateReport(estimate uint64) { fmt.Println(headerEstimateReport) fmt.Println(strings.Repeat("-", len(headerEstimateReport))) - fmt.Printf("File size: %d bytes\n", estimate) + printMetric("File size: %d bytes\n", estimate) +} + +func printMetric(key string, value any) { + fmt.Printf("%s%v\n", indent(key), value) } func indent(key string) string {