Changeset 1793

Show
Ignore:
Timestamp:
11/14/08 10:11:24 (16 months ago)
Author:
JensDiemer
Message:

MD5sum_calc: v0.2.8 more status information | status performance calculated for a short term only

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • CodeSnippets/MD5sum_calc/md5sum_calc.py

    r1791 r1793  
    2020__url__     = "http://www.jensdiemer.de" 
    2121 
    22 __version__ = "0.2.7" 
     22__version__ = "0.2.8" 
    2323 
    2424__history__ = """ 
     25v0.2.8 
     26    - more status information 
     27    - status performance calculated for a short term only 
    2528v0.2.7 
    2629    - Work-a-round if under Windows only a Driveletter given, see: 
     
    5053""" 
    5154 
    52 import sys, os, md5, ConfigParser, datetime, time 
     55import sys, os, string, md5, ConfigParser, datetime, time 
    5356 
    5457BUFSIZE = 65536 
     
    117120print "_" * 79 
    118121print "  %s v%s\n" % (__info__, __version__) 
     122 
     123 
     124def human_time(t): 
     125    if t>3600: 
     126        divisor = 3600.0 
     127        unit = "h" 
     128    elif t>60: 
     129        divisor = 60.0 
     130        unit = "min" 
     131    else: 
     132        divisor = 1 
     133        unit = "sec" 
     134         
     135    return "%.1f%s" % (round(t/divisor, 2), unit) 
    119136 
    120137 
     
    235252                self.write_md5file(md5sum) 
    236253 
    237  
    238     def create_md5sum(self): 
     254    def create_md5sum(self):        
    239255        file_size = os.stat(self.file_name_path).st_size 
    240         time_threshold = start_time = int(time.time()) 
     256        time_threshold = start_time = time.time() 
    241257        try: 
    242258            f = file(self.file_name_path, "rb") 
    243259            m = md5.new() 
    244             bytesreaded = 0 
     260            bytesreaded = old_readed = 0 
    245261            threshold = file_size / 10 
    246262            while 1: 
     
    250266                    break 
    251267 
    252                 current_time = int(time.time()) 
    253                 if current_time > time_threshold: 
     268                current_time = time.time() 
     269                if current_time > (time_threshold + 0.5): 
    254270 
    255271                    elapsed = float(current_time-start_time)      # Vergangene Zeit 
    256272                    estimated = elapsed / bytesreaded * file_size # Gesch�te Zeit 
    257                     performance = bytesreaded / elapsed / 1024 / 1024 
    258  
    259                     if estimated>60: 
    260                         time_info = "%.1f/%.1fmin" % (elapsed/60, estimated/60) 
    261                     else: 
    262                         time_info = "%.0f/%.1fsec" % (elapsed, estimated) 
    263  
     273                    remain = estimated - elapsed 
     274                     
     275                    diff_bytes = bytesreaded-old_readed 
     276                    diff_time = current_time-time_threshold 
     277                    performance = diff_bytes / diff_time / 1024.0 / 1024.0 
     278 
     279                    percent = round(float(bytesreaded)/file_size*100.0, 2) 
     280 
     281                    infoline = ( 
     282                        "   " 
     283                        "%(percent).1f%%" 
     284                        " - current: %(elapsed)s" 
     285                        " - total: %(estimated)s" 
     286                        " - remain: %(remain)s" 
     287                        " - %(perf).1fMB/sec" 
     288                        "   " 
     289                    ) % { 
     290                        "percent"  : percent, 
     291                        "elapsed"  : human_time(elapsed), 
     292                        "estimated": human_time(estimated), 
     293                        "remain"   : human_time(remain), 
     294                        "perf"     : performance, 
     295                    } 
    264296                    sys.stdout.write("\r") 
    265                     sys.stdout.write( 
    266                         "%3.i%% %s %.1fMB/sec    " % ( 
    267                             round(float(bytesreaded)/file_size*100), 
    268                             time_info, 
    269                             performance 
    270                         ) 
    271                     ) 
     297                    sys.stdout.write(string.center(infoline, 79)) 
     298                     
    272299                    time_threshold = current_time 
     300                    old_readed = bytesreaded 
     301                     
    273302                m.update(data) 
    274303            end_time = time.time()