summaryrefslogtreecommitdiff
path: root/rdiff-backup/rdiff_backup/statistics.py
diff options
context:
space:
mode:
authorben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2002-07-16 05:16:42 +0000
committerben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2002-07-16 05:16:42 +0000
commit4c8440ee71ba819c7327913870a615186ef8d386 (patch)
tree5d4d811680e1b3fd0a3393de3d49eb9cae116481 /rdiff-backup/rdiff_backup/statistics.py
parent6efc3610e37994c38a70cf32266e1e495035fbd3 (diff)
downloadrdiff-backup-4c8440ee71ba819c7327913870a615186ef8d386.tar.gz
Various changes to 0.9.3, see CHANGELOG
git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@157 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109
Diffstat (limited to 'rdiff-backup/rdiff_backup/statistics.py')
-rw-r--r--rdiff-backup/rdiff_backup/statistics.py49
1 files changed, 42 insertions, 7 deletions
diff --git a/rdiff-backup/rdiff_backup/statistics.py b/rdiff-backup/rdiff_backup/statistics.py
index e9f43dc..83a8858 100644
--- a/rdiff-backup/rdiff_backup/statistics.py
+++ b/rdiff-backup/rdiff_backup/statistics.py
@@ -28,7 +28,7 @@ class StatsObj:
'ChangedFiles',
'ChangedSourceSize', 'ChangedMirrorSize',
'IncrementFiles', 'IncrementFileSize')
- stat_misc_attrs = ('Errors',)
+ stat_misc_attrs = ('Errors', 'TotalDestinationSizeChange')
stat_time_attrs = ('StartTime', 'EndTime', 'ElapsedTime')
stat_attrs = (('Filename',) + stat_time_attrs +
stat_misc_attrs + stat_file_attrs)
@@ -65,6 +65,26 @@ class StatsObj:
"""Add 1 to value of attribute"""
self.__dict__[attr] += 1
+ def get_total_dest_size_change(self):
+ """Return total destination size change
+
+ This represents the total change in the size of the
+ rdiff-backup destination directory.
+
+ """
+ addvals = [self.NewFileSize, self.ChangedSourceSize,
+ self.IncrementFileSize]
+ subtractvals = [self.DeletedFileSize, self.ChangedMirrorSize]
+ for val in addvals + subtractvals:
+ if val is None:
+ result = None
+ break
+ else:
+ def addlist(l): return reduce(lambda x,y: x+y, l)
+ result = addlist(addvals) - addlist(subtractvals)
+ self.TotalDestinationSizeChange = result
+ return result
+
def get_stats_line(self, index, use_repr = 1):
"""Return one line abbreviated version of full stats string"""
file_attrs = map(lambda attr: str(self.get_stat(attr)),
@@ -95,7 +115,9 @@ class StatsObj:
def get_stats_string(self):
"""Return extended string printing out statistics"""
- return self.get_timestats_string() + self.get_filestats_string()
+ return "%s%s%s" % (self.get_timestats_string(),
+ self.get_filestats_string(),
+ self.get_miscstats_string())
def get_timestats_string(self):
"""Return portion of statistics string dealing with time"""
@@ -112,8 +134,6 @@ class StatsObj:
self.ElapsedTime = self.EndTime - self.StartTime
timelist.append("ElapsedTime %.2f (%s)\n" %
(self.ElapsedTime, Time.inttopretty(self.ElapsedTime)))
- if self.Errors is not None:
- timelist.append("Errors %d\n" % self.Errors)
return "".join(timelist)
def get_filestats_string(self):
@@ -130,8 +150,23 @@ class StatsObj:
return "".join(map(fileline, self.stat_file_pairs))
+ def get_miscstats_string(self):
+ """Return portion of extended stat string about misc attributes"""
+ misc_string = ""
+ tdsc = self.get_total_dest_size_change()
+ if tdsc is not None:
+ misc_string += ("TotalDestinationSizeChange %s (%s)\n" %
+ (tdsc, self.get_byte_summary_string(tdsc)))
+ if self.Errors is not None: misc_string += "Errors %d\n" % self.Errors
+ return misc_string
+
def get_byte_summary_string(self, byte_count):
"""Turn byte count into human readable string like "7.23GB" """
+ if byte_count < 0:
+ sign = "-"
+ byte_count = -byte_count
+ else: sign = ""
+
for abbrev_bytes, abbrev_string in self.byte_abbrev_list:
if byte_count >= abbrev_bytes:
# Now get 3 significant figures
@@ -139,11 +174,11 @@ class StatsObj:
if abbrev_count >= 100: precision = 0
elif abbrev_count >= 10: precision = 1
else: precision = 2
- return "%%.%df %s" % (precision, abbrev_string) \
+ return "%s%%.%df %s" % (sign, precision, abbrev_string) \
% (abbrev_count,)
byte_count = round(byte_count)
- if byte_count == 1: return "1 byte"
- else: return "%d bytes" % (byte_count,)
+ if byte_count == 1: return sign + "1 byte"
+ else: return "%s%d bytes" % (sign, byte_count)
def get_stats_logstring(self, title):
"""Like get_stats_string, but add header and footer"""