feat(cli): Support displaying storage values in base-2 [#2492] (#2502)

* Update display on repository summary

* Apply throughout app

* Situate units_test

* Update Command Line documentation

* Envar cleanup

* Rename to BytesString

* Restore envar string available for test

* Remove extraneous empty check and restore UIPreferences field for frontend

* PR: config bool cleanup and missed `BaseEnv`s

* Fix lint and test
This commit is contained in:
atom
2022-10-24 20:00:36 -06:00
committed by GitHub
parent 7d47658cbb
commit c5efed01f4
40 changed files with 198 additions and 149 deletions

View File

@@ -147,12 +147,12 @@ func (p *cliProgress) output(col *color.Color, msg string) {
inProgressHashing,
hashedFiles,
units.BytesStringBase10(hashedBytes),
units.BytesString(hashedBytes),
cachedFiles,
units.BytesStringBase10(cachedBytes),
units.BytesString(cachedBytes),
units.BytesStringBase10(uploadedBytes),
units.BytesString(uploadedBytes),
)
if fatalErrorCount > 0 {
@@ -177,7 +177,7 @@ func (p *cliProgress) output(col *color.Color, msg string) {
}
if est, ok := p.uploadStartTime.Estimate(float64(hashedBytes+cachedBytes), float64(p.estimatedTotalBytes)); ok {
line += fmt.Sprintf(", estimated %v", units.BytesStringBase10(p.estimatedTotalBytes))
line += fmt.Sprintf(", estimated %v", units.BytesString(p.estimatedTotalBytes))
line += fmt.Sprintf(" (%.1f%%)", est.PercentComplete)
line += fmt.Sprintf(" %v left", est.Remaining)
} else {

View File

@@ -62,7 +62,7 @@ func (c *commandBenchmarkCompression) readInputFile(ctx context.Context) ([]byte
if dataLength > defaultCompressedDataByMethod {
dataLength = defaultCompressedDataByMethod
log(ctx).Infof("NOTICE: The provided input file is too big, using first %v.", units.BytesStringBase2(dataLength))
log(ctx).Infof("NOTICE: The provided input file is too big, using first %v.", units.BytesString(dataLength))
}
data := make([]byte, dataLength)
@@ -94,7 +94,7 @@ func (c *commandBenchmarkCompression) run(ctx context.Context) error {
return errors.Errorf("empty data file")
}
log(ctx).Infof("Compressing input file %q (%v) using all compression methods.", c.dataFile, units.BytesStringBase2(int64(len(data))))
log(ctx).Infof("Compressing input file %q (%v) using all compression methods.", c.dataFile, units.BytesString(int64(len(data))))
repeatCount := c.repeat
@@ -106,7 +106,7 @@ func (c *commandBenchmarkCompression) run(ctx context.Context) error {
}
}
log(ctx).Infof("Repeating %v times per compression method (total %v). Override with --repeat=N.", repeatCount, units.BytesStringBase2(int64(repeatCount*len(data))))
log(ctx).Infof("Repeating %v times per compression method (total %v). Override with --repeat=N.", repeatCount, units.BytesString(int64(repeatCount*len(data))))
for name, comp := range compression.ByName {
if compression.IsDeprecated[name] && !c.deprecated {
@@ -211,10 +211,10 @@ func (c *commandBenchmarkCompression) printResults(results []compressionBechmark
c.out.printStdout("%3d. %-26v %-12v %-12v %-8v %v%v",
ndx,
r.compression,
units.BytesStringBase2(r.compressedSize),
units.BytesStringBase2(int64(r.throughput))+"/s",
units.BytesString(r.compressedSize),
units.BytesString(int64(r.throughput))+"/s",
r.allocations,
units.BytesStringBase2(r.allocBytes),
units.BytesString(r.allocBytes),
maybeDeprecated,
)

View File

@@ -45,7 +45,7 @@ func (c *commandBenchmarkCrypto) run(ctx context.Context) error {
c.out.printStdout("-----------------------------------------------------------------\n")
for ndx, r := range results {
c.out.printStdout("%3d. %-20v %-30v %v / second", ndx, r.hash, r.encryption, units.BytesStringBase2(int64(r.throughput)))
c.out.printStdout("%3d. %-20v %-30v %v / second", ndx, r.hash, r.encryption, units.BytesString(int64(r.throughput)))
if c.optionPrint {
c.out.printStdout(", --block-hash=%s --encryption=%s", r.hash, r.encryption)

View File

@@ -47,10 +47,10 @@ func (c *commandBenchmarkEcc) run(ctx context.Context) error {
for ndx, r := range results {
c.out.printStdout("%3d. %-30v %12v/s %12v/s %6v%% [%v]", ndx, r.ecc,
units.BytesStringBase2(int64(r.throughputEncoding)),
units.BytesStringBase2(int64(r.throughputDecoding)),
units.BytesString(int64(r.throughputEncoding)),
units.BytesString(int64(r.throughputDecoding)),
int(math.Round(r.growth*100)), //nolint:gomnd
units.BytesStringBase2(int64(r.size)),
units.BytesString(int64(r.size)),
)
if c.optionPrint {

View File

@@ -45,7 +45,7 @@ func (c *commandBenchmarkEncryption) run(ctx context.Context) error {
c.out.printStdout("-----------------------------------------------------------------\n")
for ndx, r := range results {
c.out.printStdout("%3d. %-30v %v / second", ndx, r.encryption, units.BytesStringBase2(int64(r.throughput)))
c.out.printStdout("%3d. %-30v %v / second", ndx, r.encryption, units.BytesString(int64(r.throughput)))
if c.optionPrint {
c.out.printStdout(", --encryption=%s", r.encryption)

View File

@@ -42,7 +42,7 @@ func (c *commandBenchmarkHashing) run(ctx context.Context) error {
c.out.printStdout("-----------------------------------------------------------------\n")
for ndx, r := range results {
c.out.printStdout("%3d. %-20v %v / second", ndx, r.hash, units.BytesStringBase2(int64(r.throughput)))
c.out.printStdout("%3d. %-20v %v / second", ndx, r.hash, units.BytesString(int64(r.throughput)))
if c.optionPrint {
c.out.printStdout(", --block-hash=%s", r.hash)

View File

@@ -126,7 +126,7 @@ type benchResult struct {
c.out.printStdout("%-25v %12v count:%v min:%v 10th:%v 25th:%v 50th:%v 75th:%v 90th:%v max:%v\n",
r.splitter,
units.BytesStringBase10(r.bytesPerSecond)+"/s",
units.BytesString(r.bytesPerSecond)+"/s",
r.segmentCount,
r.min, r.p10, r.p25, r.p50, r.p75, r.p90, r.max,
)
@@ -143,7 +143,7 @@ type benchResult struct {
c.out.printStdout("%3v. %-25v %-12v count:%v min:%v 10th:%v 25th:%v 50th:%v 75th:%v 90th:%v max:%v\n",
ndx,
r.splitter,
units.BytesStringBase10(r.bytesPerSecond)+"/s",
units.BytesString(r.bytesPerSecond)+"/s",
r.segmentCount,
r.min, r.p10, r.p25, r.p50, r.p75, r.p90, r.max)

View File

@@ -62,7 +62,7 @@ func(b blob.Metadata) error {
return errors.Wrap(err, "error listing blobs")
}
sizeToString := units.BytesStringBase10
sizeToString := units.BytesString
if c.raw {
sizeToString = func(l int64) string {
//nolint:gomnd

View File

@@ -73,14 +73,14 @@ func (c *commandCacheInfo) run(ctx context.Context, rep repo.Repository) error {
maybeLimit := ""
if l, ok := path2Limit[ent.Name()]; ok {
maybeLimit = fmt.Sprintf(" (limit %v, min sweep age %v)", units.BytesStringBase10(l), path2SweepAgeSeconds[ent.Name()])
maybeLimit = fmt.Sprintf(" (limit %v, min sweep age %v)", units.BytesString(l), path2SweepAgeSeconds[ent.Name()])
}
if ent.Name() == "blob-list" {
maybeLimit = fmt.Sprintf(" (duration %v)", opts.MaxListCacheDuration.DurationOrDefault(0))
}
c.out.printStdout("%v: %v files %v%v\n", subdir, fileCount, units.BytesStringBase10(totalFileSize), maybeLimit)
c.out.printStdout("%v: %v files %v%v\n", subdir, fileCount, units.BytesString(totalFileSize), maybeLimit)
}
c.out.printStderr("To adjust cache sizes use 'kopia cache set'.\n")

View File

@@ -58,14 +58,14 @@ func (c *commandCacheSetParams) run(ctx context.Context, rep repo.RepositoryWrit
if v := c.contentCacheSizeMB; v != -1 {
v *= 1e6 // convert MB to bytes
log(ctx).Infof("changing content cache size to %v", units.BytesStringBase10(v))
log(ctx).Infof("changing content cache size to %v", units.BytesString(v))
opts.MaxCacheSizeBytes = v
changed++
}
if v := c.maxMetadataCacheSizeMB; v != -1 {
v *= 1e6 // convert MB to bytes
log(ctx).Infof("changing metadata cache size to %v", units.BytesStringBase10(v))
log(ctx).Infof("changing metadata cache size to %v", units.BytesString(v))
opts.MaxMetadataCacheSizeBytes = v
changed++
}

View File

@@ -48,7 +48,7 @@ func (c *commandContentStats) run(ctx context.Context, rep repo.DirectRepository
return errors.Wrap(err, "error calculating totals")
}
sizeToString := units.BytesStringBase10
sizeToString := units.BytesString
if c.raw {
sizeToString = func(l int64) string {
return strconv.FormatInt(l, 10) //nolint:gomnd

View File

@@ -58,7 +58,7 @@ func (c *commandIndexEpochList) run(ctx context.Context, rep repo.DirectReposito
formatTimestamp(min),
formatTimestamp(max),
len(uces),
units.BytesStringBase2(blob.TotalLength(uces)),
units.BytesString(blob.TotalLength(uces)),
max.Sub(min).Round(time.Second),
)
}
@@ -68,7 +68,7 @@ func (c *commandIndexEpochList) run(ctx context.Context, rep repo.DirectReposito
e,
formatTimestamp(secs[0].Timestamp),
len(secs),
units.BytesStringBase2(blob.TotalLength(secs)),
units.BytesString(blob.TotalLength(secs)),
)
}
}
@@ -78,7 +78,7 @@ func (c *commandIndexEpochList) run(ctx context.Context, rep repo.DirectReposito
cs.MinEpoch,
cs.MaxEpoch,
len(cs.Blobs),
units.BytesStringBase2(blob.TotalLength(cs.Blobs)),
units.BytesString(blob.TotalLength(cs.Blobs)),
)
}

View File

@@ -42,7 +42,7 @@ func (c *commandLogsList) run(ctx context.Context, rep repo.DirectRepository) er
"%v %v %v %v %v\n", s.id,
formatTimestamp(s.startTime),
s.endTime.Sub(s.startTime),
units.BytesStringBase2(s.totalSize),
units.BytesString(s.totalSize),
len(s.segments),
)
}

View File

@@ -107,6 +107,6 @@ func TestLogsMaintenance(t *testing.T) {
infoLines := e.RunAndExpectSuccess(t, "maintenance", "info")
require.Contains(t, infoLines, " max age of logs: 22h0m0s")
require.Contains(t, infoLines, " max total size: 33 MiB")
require.Contains(t, infoLines, " max total size: 34.6 MB")
require.Contains(t, infoLines, " max count: 44")
}

View File

@@ -64,7 +64,7 @@ func (c *commandMaintenanceInfo) run(ctx context.Context, rep repo.DirectReposit
c.out.printStdout("Log Retention:\n")
c.out.printStdout(" max count: %v\n", cl.MaxCount)
c.out.printStdout(" max age of logs: %v\n", cl.MaxAge)
c.out.printStdout(" max total size: %v\n", units.BytesStringBase2(cl.MaxTotalSize))
c.out.printStdout(" max total size: %v\n", units.BytesString(cl.MaxTotalSize))
c.out.printStdout("Recent Maintenance Runs:\n")

View File

@@ -80,7 +80,7 @@ func (c *commandMaintenanceSet) setLogCleanupParametersFromFlags(ctx context.Con
p.LogRetention = cl
*changed = true
log(ctx).Infof("Setting total retained log size to %v.", units.BytesStringBase2(cl.MaxTotalSize))
log(ctx).Infof("Setting total retained log size to %v.", units.BytesString(cl.MaxTotalSize))
}
}

View File

@@ -230,7 +230,7 @@ func applyOptionalInt64MiB(ctx context.Context, desc string, val **policy.Option
i := policy.OptionalInt64(v)
*changeCount++
log(ctx).Infof(" - setting %q to %v.", desc, units.BytesStringBase2(v))
log(ctx).Infof(" - setting %q to %v.", desc, units.BytesString(v))
*val = &i

View File

@@ -19,7 +19,7 @@ func TestSetUploadPolicy(t *testing.T) {
lines = compressSpaces(lines)
require.Contains(t, lines, " Max parallel snapshots (server/UI): 1 (defined for this target)")
require.Contains(t, lines, " Max parallel file reads: - (defined for this target)")
require.Contains(t, lines, " Parallel upload above size: 2 GiB (defined for this target)")
require.Contains(t, lines, " Parallel upload above size: 2.1 GB (defined for this target)")
// make some directory we'll be setting policy on
td := testutil.TempDirectory(t)
@@ -28,7 +28,7 @@ func TestSetUploadPolicy(t *testing.T) {
lines = compressSpaces(lines)
require.Contains(t, lines, " Max parallel snapshots (server/UI): 1 inherited from (global)")
require.Contains(t, lines, " Max parallel file reads: - inherited from (global)")
require.Contains(t, lines, " Parallel upload above size: 2 GiB inherited from (global)")
require.Contains(t, lines, " Parallel upload above size: 2.1 GB inherited from (global)")
e.RunAndExpectSuccess(t, "policy", "set", "--global", "--max-parallel-snapshots=7", "--max-parallel-file-reads=33", "--parallel-upload-above-size-mib=4096")
@@ -37,7 +37,7 @@ func TestSetUploadPolicy(t *testing.T) {
require.Contains(t, lines, " Max parallel snapshots (server/UI): 7 inherited from (global)")
require.Contains(t, lines, " Max parallel file reads: 33 inherited from (global)")
require.Contains(t, lines, " Parallel upload above size: 4 GiB inherited from (global)")
require.Contains(t, lines, " Parallel upload above size: 4.3 GB inherited from (global)")
e.RunAndExpectSuccess(t, "policy", "set", "--global", "--max-parallel-snapshots=default", "--max-parallel-file-reads=default", "--parallel-upload-above-size-mib=default")
@@ -46,5 +46,5 @@ func TestSetUploadPolicy(t *testing.T) {
require.Contains(t, lines, " Max parallel snapshots (server/UI): 1 inherited from (global)")
require.Contains(t, lines, " Max parallel file reads: - inherited from (global)")
require.Contains(t, lines, " Parallel upload above size: 2 GiB inherited from (global)")
require.Contains(t, lines, " Parallel upload above size: 2.1 GB inherited from (global)")
}

View File

@@ -192,7 +192,7 @@ func appendFilesPolicyValue(items []policyTableRow, p *policy.Policy, def *polic
if maxSize := p.FilesPolicy.MaxFileSize; maxSize > 0 {
items = append(items, policyTableRow{
" Ignore files above:",
units.BytesStringBase2(maxSize),
units.BytesString(maxSize),
definitionPointToString(p.Target(), def.FilesPolicy.MaxFileSize),
})
}
@@ -349,13 +349,13 @@ func appendCompressionPolicyRows(rows []policyTableRow, p *policy.Policy, def *p
case p.CompressionPolicy.MaxSize > 0:
rows = append(rows, policyTableRow{fmt.Sprintf(
" Only compress files between %v and %v.",
units.BytesStringBase10(p.CompressionPolicy.MinSize),
units.BytesStringBase10(p.CompressionPolicy.MaxSize)), "", ""})
units.BytesString(p.CompressionPolicy.MinSize),
units.BytesString(p.CompressionPolicy.MaxSize)), "", ""})
case p.CompressionPolicy.MinSize > 0:
rows = append(rows, policyTableRow{fmt.Sprintf(
" Only compress files bigger than %v.",
units.BytesStringBase10(p.CompressionPolicy.MinSize)), "", ""})
units.BytesString(p.CompressionPolicy.MinSize)), "", ""})
default:
rows = append(rows, policyTableRow{" Compress files of all sizes.", "", ""})
@@ -442,5 +442,5 @@ func valueOrNotSetOptionalInt64Bytes(p *policy.OptionalInt64) string {
return "-"
}
return units.BytesStringBase2(int64(*p))
return units.BytesString(int64(*p))
}

View File

@@ -75,7 +75,7 @@ func (c *commandRepositorySetParameters) setSizeMBParameter(ctx context.Context,
*dst = v << 20 //nolint:gomnd
*anyChange = true
log(ctx).Infof(" - setting %v to %v.\n", desc, units.BytesStringBase2(int64(v)<<20)) //nolint:gomnd
log(ctx).Infof(" - setting %v to %v.\n", desc, units.BytesString(int64(v)<<20)) //nolint:gomnd
}
func (c *commandRepositorySetParameters) setInt64SizeMBParameter(ctx context.Context, v int64, desc string, dst *int64, anyChange *bool) {
@@ -86,7 +86,7 @@ func (c *commandRepositorySetParameters) setInt64SizeMBParameter(ctx context.Con
*dst = v << 20 //nolint:gomnd
*anyChange = true
log(ctx).Infof(" - setting %v to %v.\n", desc, units.BytesStringBase2(v<<20)) //nolint:gomnd
log(ctx).Infof(" - setting %v to %v.\n", desc, units.BytesString(v<<20)) //nolint:gomnd
}
func (c *commandRepositorySetParameters) setIntParameter(ctx context.Context, v int, desc string, dst *int, anyChange *bool) {

View File

@@ -32,7 +32,7 @@ func (s *formatSpecificTestSuite) TestRepositorySetParameters(t *testing.T) {
out := env.RunAndExpectSuccess(t, "repository", "status")
// default values
require.Contains(t, out, "Max pack length: 20 MiB")
require.Contains(t, out, "Max pack length: 21 MB")
require.Contains(t, out, fmt.Sprintf("Format version: %d", s.formatVersion))
// failure cases
@@ -43,11 +43,11 @@ func (s *formatSpecificTestSuite) TestRepositorySetParameters(t *testing.T) {
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--index-version=2", "--max-pack-size-mb=33")
out = env.RunAndExpectSuccess(t, "repository", "status")
require.Contains(t, out, "Max pack length: 33 MiB")
require.Contains(t, out, "Max pack length: 34.6 MB")
env.RunAndExpectSuccess(t, "repository", "set-parameters", "--max-pack-size-mb=44")
out = env.RunAndExpectSuccess(t, "repository", "status")
require.Contains(t, out, "Max pack length: 44 MiB")
require.Contains(t, out, "Max pack length: 46.1 MB")
}
func (s *formatSpecificTestSuite) TestRepositorySetParametersRetention(t *testing.T) {
@@ -122,7 +122,7 @@ func (s *formatSpecificTestSuite) TestRepositorySetParametersUpgrade(t *testing.
out := env.RunAndExpectSuccess(t, "repository", "status")
// default values
require.Contains(t, out, "Max pack length: 20 MiB")
require.Contains(t, out, "Max pack length: 21 MB")
switch s.formatVersion {
case format.FormatVersion1:
@@ -176,7 +176,7 @@ func (s *formatSpecificTestSuite) TestRepositorySetParametersUpgrade(t *testing.
require.Contains(t, out, "Index Format: v2")
require.Contains(t, out, "Format version: 3")
require.Contains(t, out, "Epoch cleanup margin: 23h0m0s")
require.Contains(t, out, "Epoch advance on: 22 blobs or 77 MiB, minimum 3h0m0s")
require.Contains(t, out, "Epoch advance on: 22 blobs or 80.7 MB, minimum 3h0m0s")
require.Contains(t, out, "Epoch checkpoint every: 9 epochs")
env.RunAndExpectSuccess(t, "index", "epoch", "list")

View File

@@ -159,8 +159,8 @@ func (c *commandRepositoryStatus) run(ctx context.Context, rep repo.Repository)
switch cp, err := dr.BlobVolume().GetCapacity(ctx); {
case err == nil:
c.out.printStdout("Storage capacity: %v\n", units.BytesStringBase10(int64(cp.SizeB)))
c.out.printStdout("Storage available: %v\n", units.BytesStringBase10(int64(cp.FreeB)))
c.out.printStdout("Storage capacity: %v\n", units.BytesString(int64(cp.SizeB)))
c.out.printStdout("Storage available: %v\n", units.BytesString(int64(cp.FreeB)))
case errors.Is(err, blob.ErrNotAVolume):
c.out.printStdout("Storage capacity: unbounded\n")
default:
@@ -189,7 +189,7 @@ func (c *commandRepositoryStatus) run(ctx context.Context, rep repo.Repository)
c.outputRequiredFeatures(dr)
c.out.printStdout("Max pack length: %v\n", units.BytesStringBase2(int64(mp.MaxPackSize)))
c.out.printStdout("Max pack length: %v\n", units.BytesString(int64(mp.MaxPackSize)))
c.out.printStdout("Index Format: v%v\n", mp.IndexVersion)
emgr, epochMgrEnabled, emerr := dr.ContentReader().EpochManager()
@@ -208,7 +208,7 @@ func (c *commandRepositoryStatus) run(ctx context.Context, rep repo.Repository)
c.out.printStdout("\n")
c.out.printStdout("Epoch refresh frequency: %v\n", mp.EpochParameters.EpochRefreshFrequency)
c.out.printStdout("Epoch advance on: %v blobs or %v, minimum %v\n", mp.EpochParameters.EpochAdvanceOnCountThreshold, units.BytesStringBase2(mp.EpochParameters.EpochAdvanceOnTotalSizeBytesThreshold), mp.EpochParameters.MinEpochDuration)
c.out.printStdout("Epoch advance on: %v blobs or %v, minimum %v\n", mp.EpochParameters.EpochAdvanceOnCountThreshold, units.BytesString(mp.EpochParameters.EpochAdvanceOnTotalSizeBytesThreshold), mp.EpochParameters.MinEpochDuration)
c.out.printStdout("Epoch cleanup margin: %v\n", mp.EpochParameters.CleanupSafetyMargin)
c.out.printStdout("Epoch checkpoint every: %v epochs\n", mp.EpochParameters.FullCheckpointFrequency)
} else {

View File

@@ -139,7 +139,7 @@ func (c *commandRepositorySyncTo) runSyncWithStorage(ctx context.Context, src bl
}
srcBlobs++
c.outputSyncProgress(fmt.Sprintf(" Found %v BLOBs (%v) in the source repository, %v (%v) to copy", srcBlobs, units.BytesStringBase10(totalSrcSize), len(blobsToCopy), units.BytesStringBase10(totalCopyBytes)))
c.outputSyncProgress(fmt.Sprintf(" Found %v BLOBs (%v) in the source repository, %v (%v) to copy", srcBlobs, units.BytesString(totalSrcSize), len(blobsToCopy), units.BytesString(totalCopyBytes)))
return nil
}); err != nil {
@@ -158,8 +158,8 @@ func (c *commandRepositorySyncTo) runSyncWithStorage(ctx context.Context, src bl
log(ctx).Infof(
" Found %v BLOBs to delete (%v), %v in sync (%v)",
len(blobsToDelete), units.BytesStringBase10(totalDeleteBytes),
inSyncBlobs, units.BytesStringBase10(inSyncBytes),
len(blobsToDelete), units.BytesString(totalDeleteBytes),
inSyncBlobs, units.BytesString(inSyncBytes),
)
if c.repositorySyncDryRun {
@@ -186,7 +186,7 @@ func (c *commandRepositorySyncTo) listDestinationBlobs(ctx context.Context, dst
if err := dst.ListBlobs(ctx, "", func(bm blob.Metadata) error {
dstMetadata[bm.BlobID] = bm
dstTotalBytes += bm.Length
c.outputSyncProgress(fmt.Sprintf(" Found %v BLOBs in the destination repository (%v)", len(dstMetadata), units.BytesStringBase10(dstTotalBytes)))
c.outputSyncProgress(fmt.Sprintf(" Found %v BLOBs in the destination repository (%v)", len(dstMetadata), units.BytesString(dstTotalBytes)))
return nil
}); err != nil {
return nil, errors.Wrap(err, "error listing BLOBs in destination repository")
@@ -255,7 +255,7 @@ func (c *commandRepositorySyncTo) runSyncBlobs(ctx context.Context, src blob.Rea
c.outputSyncProgress(
fmt.Sprintf(" Copied %v blobs (%v), Speed: %v, ETA: %v",
numBlobs, units.BytesStringBase10(bytesCopied), speed, eta))
numBlobs, units.BytesString(bytesCopied), speed, eta))
progressMutex.Unlock()
}

View File

@@ -329,7 +329,7 @@ func printRestoreStats(ctx context.Context, st restore.Stats) {
var maybeSkipped, maybeErrors string
if st.SkippedCount > 0 {
maybeSkipped = fmt.Sprintf(", skipped %v (%v)", st.SkippedCount, units.BytesStringBase10(st.SkippedTotalFileSize))
maybeSkipped = fmt.Sprintf(", skipped %v (%v)", st.SkippedCount, units.BytesString(st.SkippedTotalFileSize))
}
if st.IgnoredErrorCount > 0 {
@@ -340,7 +340,7 @@ func printRestoreStats(ctx context.Context, st restore.Stats) {
st.RestoredFileCount,
st.RestoredDirCount,
st.RestoredSymlinkCount,
units.BytesStringBase10(st.RestoredTotalFileSize),
units.BytesString(st.RestoredTotalFileSize),
maybeSkipped, maybeErrors)
}
@@ -421,7 +421,7 @@ func (c *commandRestore) run(ctx context.Context, rep repo.Repository) error {
}
if stats.SkippedCount > 0 {
maybeSkipped = fmt.Sprintf(", skipped %v (%v)", stats.SkippedCount, units.BytesStringBase10(stats.SkippedTotalFileSize))
maybeSkipped = fmt.Sprintf(", skipped %v (%v)", stats.SkippedCount, units.BytesString(stats.SkippedTotalFileSize))
}
if stats.IgnoredErrorCount > 0 {
@@ -429,8 +429,8 @@ func (c *commandRestore) run(ctx context.Context, rep repo.Repository) error {
}
log(ctx).Infof("Processed %v (%v) of %v (%v)%v%v%v.",
restoredCount, units.BytesStringBase10(stats.RestoredTotalFileSize),
enqueuedCount, units.BytesStringBase10(stats.EnqueuedTotalFileSize),
restoredCount, units.BytesString(stats.RestoredTotalFileSize),
enqueuedCount, units.BytesString(stats.EnqueuedTotalFileSize),
maybeSkipped,
maybeErrors,
maybeRemaining)

View File

@@ -101,12 +101,12 @@ func (c *commandSnapshotEstimate) run(ctx context.Context, rep repo.Repository)
return errors.Wrap(err, "error estimating")
}
c.out.printStdout("Snapshot includes %v file(s), total size %v\n", ep.stats.TotalFileCount, units.BytesStringBase10(ep.stats.TotalFileSize))
c.out.printStdout("Snapshot includes %v file(s), total size %v\n", ep.stats.TotalFileCount, units.BytesString(ep.stats.TotalFileSize))
c.showBuckets(ep.included, c.snapshotEstimateShowFiles)
c.out.printStdout("\n")
if ep.stats.ExcludedFileCount > 0 {
c.out.printStdout("Snapshot excludes %v file(s), total size %v\n", ep.stats.ExcludedFileCount, units.BytesStringBase10(ep.stats.ExcludedTotalFileSize))
c.out.printStdout("Snapshot excludes %v file(s), total size %v\n", ep.stats.ExcludedFileCount, units.BytesString(ep.stats.ExcludedTotalFileSize))
c.showBuckets(ep.excluded, true)
} else {
c.out.printStdout("Snapshot excludes no files.\n")
@@ -145,16 +145,16 @@ func (c *commandSnapshotEstimate) showBuckets(buckets snapshotfs.SampleBuckets,
if i == 0 {
sizeRange = fmt.Sprintf("< %-6v",
units.BytesStringBase10(bucket.MinSize))
units.BytesString(bucket.MinSize))
} else {
sizeRange = fmt.Sprintf("%-6v...%6v",
units.BytesStringBase10(bucket.MinSize),
units.BytesStringBase10(buckets[i-1].MinSize))
units.BytesString(bucket.MinSize),
units.BytesString(buckets[i-1].MinSize))
}
c.out.printStdout("%18v: %7v files, total size %v\n",
sizeRange,
bucket.Count, units.BytesStringBase10(bucket.TotalSize))
bucket.Count, units.BytesString(bucket.TotalSize))
if showFiles {
for _, sample := range bucket.Examples {

View File

@@ -149,11 +149,11 @@ func snapshotSizeDelta(m1, m2 *snapshot.Manifest) string {
deltaBytes := m2.RootEntry.DirSummary.TotalFileSize - m1.RootEntry.DirSummary.TotalFileSize
if deltaBytes < 0 {
return "-" + units.BytesStringBase10(-deltaBytes)
return "-" + units.BytesString(-deltaBytes)
}
if deltaBytes > 0 {
return "+" + units.BytesStringBase10(deltaBytes)
return "+" + units.BytesString(deltaBytes)
}
return ""

View File

@@ -440,7 +440,7 @@ func (c *commandSnapshotList) entryBits(ctx context.Context, m *snapshot.Manifes
if u := m.StorageStats; u != nil {
bits = append(bits,
fmt.Sprintf("new-data:%v", units.BytesStringBase10(atomic.LoadInt64(&u.NewData.PackedContentBytes))),
fmt.Sprintf("new-data:%v", units.BytesString(atomic.LoadInt64(&u.NewData.PackedContentBytes))),
fmt.Sprintf("new-files:%v", atomic.LoadInt32(&u.NewData.FileObjectCount)),
fmt.Sprintf("new-dirs:%v", atomic.LoadInt32(&u.NewData.DirObjectCount)),
fmt.Sprintf("compression:%v", formatCompressionPercentage(atomic.LoadInt64(&u.NewData.OriginalContentBytes), atomic.LoadInt64(&u.NewData.PackedContentBytes))),
@@ -452,7 +452,7 @@ func (c *commandSnapshotList) entryBits(ctx context.Context, m *snapshot.Manifes
func deltaBytes(b int64) string {
if b > 0 {
return "(+" + units.BytesStringBase10(b) + ")"
return "(+" + units.BytesString(b) + ")"
}
return ""

View File

@@ -54,7 +54,7 @@ func showContentWithFlags(w io.Writer, rd io.Reader, unzip, indentJSON bool) err
func maybeHumanReadableBytes(enable bool, value int64) string {
if enable {
return units.BytesStringBase10(value)
return units.BytesString(value)
}
return fmt.Sprintf("%v", value)