# Copyright 2002 Ben Escoto # # This file is part of rdiff-backup. # # rdiff-backup is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA # 02139, USA; either version 2 of the License, or (at your option) any # later version; incorporated herein by reference. """Misc statistics methods, pertaining to dir and session stat files""" from statistics import * # This is the RPath of the directory statistics file, and the # associated open file. It will hold a line of statistics for # each directory that is backed up. _dir_stats_rp = None _dir_stats_fp = None # This goes at the beginning of the directory statistics file and # explains the format. _dir_stats_header = """# rdiff-backup directory statistics file # # Each line is in the following format: # RelativeDirName %s """ % " ".join(StatsObj.stat_file_attrs) def open_dir_stats_file(): """Open directory statistics file, write header""" global _dir_stats_fp, _dir_stats_rp assert not _dir_stats_fp, "Directory file already open" if Globals.compression: suffix = "data.gz" else: suffix = "data" _dir_stats_rp = Inc.get_inc(Globals.rbdir.append("directory_statistics"), Time.curtime, suffix) if _dir_stats_rp.lstat(): Log("Warning, statistics file %s already exists, appending" % _dir_stats_rp.path, 2) _dir_stats_fp = _dir_stats_rp.open("ab", Globals.compression) else: _dir_stats_fp = _dir_stats_rp.open("wb", Globals.compression) _dir_stats_fp.write(_dir_stats_header) def write_dir_stats_line(statobj, index): """Write info from statobj about rpath to statistics file""" if Globals.null_separator: _dir_stats_fp.write(statobj.get_stats_line(index, None) + "\0") else: _dir_stats_fp.write(statobj.get_stats_line(index) + "\n") def close_dir_stats_file(): """Close directory statistics file if its open""" global _dir_stats_fp if _dir_stats_fp: _dir_stats_fp.close() _dir_stats_fp = None def write_session_statistics(statobj): """Write session statistics into file, log""" stat_inc = Inc.get_inc(Globals.rbdir.append("session_statistics"), Time.curtime, "data") statobj.StartTime = Time.curtime statobj.EndTime = time.time() # include hardlink data and dir stats in size of increments if Globals.preserve_hardlinks and Hardlink.final_inc: # include hardlink data in size of increments statobj.IncrementFiles += 1 statobj.IncrementFileSize += Hardlink.final_inc.getsize() if _dir_stats_rp and _dir_stats_rp.lstat(): statobj.IncrementFiles += 1 statobj.IncrementFileSize += _dir_stats_rp.getsize() statobj.write_stats_to_rp(stat_inc) if Globals.print_statistics: message = statobj.get_stats_logstring("Session statistics") Log.log_to_file(message) Globals.client_conn.sys.stdout.write(message) from increment import * import Hardlink