summaryrefslogtreecommitdiff
path: root/rdiff-backup/rdiff_backup
diff options
context:
space:
mode:
authorben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2002-05-25 20:38:21 +0000
committerben <ben@2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109>2002-05-25 20:38:21 +0000
commit1d050174970945c986f6c4f1c0b9cf922fd24bc2 (patch)
treecbf759920e7915c0e752a002edcd260160ebbf34 /rdiff-backup/rdiff_backup
parent7a82871f7b6d25464516dd659f3e98cc56211ff1 (diff)
downloadrdiff-backup-1d050174970945c986f6c4f1c0b9cf922fd24bc2.tar.gz
Final update of statistics stuff
git-svn-id: http://svn.savannah.nongnu.org/svn/rdiff-backup/trunk@109 2b77aa54-bcbc-44c9-a7ec-4f6cf2b41109
Diffstat (limited to 'rdiff-backup/rdiff_backup')
-rw-r--r--rdiff-backup/rdiff_backup/header.py2
-rw-r--r--rdiff-backup/rdiff_backup/highlevel.py17
-rw-r--r--rdiff-backup/rdiff_backup/statistics.py19
3 files changed, 36 insertions, 2 deletions
diff --git a/rdiff-backup/rdiff_backup/header.py b/rdiff-backup/rdiff_backup/header.py
index 16ad128..9ca40d2 100644
--- a/rdiff-backup/rdiff_backup/header.py
+++ b/rdiff-backup/rdiff_backup/header.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
#
# rdiff-backup -- Mirror files while keeping incremental changes
-# Version 0.7.5 released May 21, 2002
+# Version 0.7.5.1 released May 25, 2002
# Copyright (C) 2001, 2002 Ben Escoto <bescoto@stanford.edu>
#
# This program is licensed under the GNU General Public License (GPL).
diff --git a/rdiff-backup/rdiff_backup/highlevel.py b/rdiff-backup/rdiff_backup/highlevel.py
index cc1335c..a9e5ce2 100644
--- a/rdiff-backup/rdiff_backup/highlevel.py
+++ b/rdiff-backup/rdiff_backup/highlevel.py
@@ -262,6 +262,7 @@ class HLDestinationStruct:
cls.check_skip_error(finalizer.Finish, dsrp)
except: cls.handle_last_error(dsrp, finalizer, ITR)
if Globals.preserve_hardlinks: Hardlink.final_writedata()
+ cls.write_statistics(ITR)
SaveState.checkpoint_remove()
def patch_increment_and_finalize(cls, dest_rpath, diffs, inc_rpath):
@@ -291,6 +292,7 @@ class HLDestinationStruct:
cls.check_skip_error(finalizer.Finish, dsrp)
except: cls.handle_last_error(dsrp, finalizer, ITR)
if Globals.preserve_hardlinks: Hardlink.final_writedata()
+ cls.write_statistics(ITR)
SaveState.checkpoint_remove()
def check_skip_error(cls, thunk, dsrp):
@@ -321,4 +323,19 @@ class HLDestinationStruct:
SaveState.touch_last_file_definitive()
raise
+ def write_statistics(cls, ITR):
+ """Write session statistics to file, log"""
+ stat_inc = Inc.get_inc(Globals.rbdir.append("session_statistics"),
+ Time.curtime, "data")
+ ITR.StartTime = Time.curtime
+ ITR.EndTime = time.time()
+ if Globals.preserve_hardlinks and Hardlink.final_inc:
+ # include hardlink data in size of increments
+ ITR.IncrementFileSize += Hardlink.final_inc.getsize()
+ ITR.write_stats_to_rp(stat_inc)
+ if Globals.print_statistics:
+ message = ITR.get_stats_logstring("Session statistics")
+ Log.log_to_file(message)
+ Globals.client_conn.sys.stdout.write(message)
+
MakeClass(HLDestinationStruct)
diff --git a/rdiff-backup/rdiff_backup/statistics.py b/rdiff-backup/rdiff_backup/statistics.py
index 40eb184..8269456 100644
--- a/rdiff-backup/rdiff_backup/statistics.py
+++ b/rdiff-backup/rdiff_backup/statistics.py
@@ -54,6 +54,12 @@ class StatsObj:
if self.get_stat(attr) is not None]
return "".join(timelist + filelist)
+ def get_stats_logstring(self, title):
+ """Like get_stats_string, but add header and footer"""
+ header = "-------------[ %s ]-------------" % title
+ footer = "-" * len(header)
+ return "%s\n%s%s\n" % (header, self.get_stats_string(), footer)
+
def init_stats_from_string(self, s):
"""Initialize attributes from string, return self for convenience"""
def error(line): raise StatsException("Bad line '%s'" % line)
@@ -64,7 +70,12 @@ class StatsObj:
if len(line_parts) < 2: error(line)
attr, value_string = line_parts[:2]
if not attr in self.stat_attrs: error(line)
- try: self.set_stat(attr, long(value_string))
+ try:
+ try: val1 = long(value_string)
+ except ValueError: val1 = None
+ val2 = float(value_string)
+ if val1 == val2: self.set_stat(attr, val1) # use integer val
+ else: self.set_stat(attr, val2) # use float
except ValueError: error(line)
return self
@@ -111,6 +122,12 @@ class StatsObj:
self.get_stat(attr)/float(len(statobj_list)))
return self
+ def get_statsobj_copy(self):
+ """Return new StatsObj object with same stats as self"""
+ s = StatObj()
+ for attr in self.stat_attrs: s.set_stat(attr, self.get_stat(attr))
+ return s
+
class StatsITR(IterTreeReducer, StatsObj):
"""Keep track of per directory statistics