def work(self, update=1): self.done += update if time.time() - self.last_update > self.update_every: self.last_update = time.time() time_used = time.time() - self.start_time percent_done = float(self.done)/self.todo if percent_done: total_time = time_used / percent_done else: total_time = 0 remaining_time = total_time * (1-percent_done) speed_per_sec = self.done/time_used if int(speed_per_sec) < 4: self.speed_text = "%s/min" % format_number(60*speed_per_sec) else: self.speed_text = "%s/sec" % format_number(speed_per_sec) bars = int(percent_done * TOTAL_BARS) self.clear_line() self.progress("%s: %s%s %5.1f%% in %s [ %s ] [ ETA %8s ]\r" % ( self.msg, "="*bars, " "*(TOTAL_BARS-bars), 100*percent_done, format_time_delta(time_used), self.speed_text, format_time_delta(remaining_time)))
def finish(self): assert self.done == self.todo self.clear_line() self.progress("%s: %s %d/%d in %s [ %s ]\n" % ( self.msg, "="*TOTAL_BARS, self.done, self.todo, format_time_delta(time.time()-self.start_time), self.speed_text))
def test_format_time_delta(self): self.assertEqual(format_time_delta(0), "0s") self.assertEqual(format_time_delta(59), "59s") self.assertEqual(format_time_delta(60), "1m 0s") self.assertEqual(format_time_delta(71), "1m 11s") self.assertEqual(format_time_delta(3600), "1h 0m") self.assertEqual(format_time_delta(24*3600), "1d 0h")
def run(self, roots): current_time = time.time() self.start_time = current_time self.next_commit = current_time + self.commit_every self.next_full_stats = current_time + self.full_stats_every self.progress("Legend: .=new, m=modified, d=deleted, " + "P=permission problem, E=some unknown error\n", 2) for root in roots: for dirpath, dirnames, filenames in os.walk(root): self.index_one_directory(dirpath, dirnames, filenames) self.db.commit() if self.verbose_progress < 3: self.progress("\n") self.show_full_stats("Final stats") self.progress("Used time: %s\n" % format_time_delta(time.time()-self.start_time), 3)
def index_one_directory(self, dirpath, dirnames, filenames): current_time = time.time() if self.full_stats_every and current_time > self.next_full_stats: self.next_full_stats = current_time + self.full_stats_every runtime = time.time()-self.start_time self.show_full_stats("Stats after %s %s" % (format_time_delta(runtime), dirpath)) if current_time > self.next_commit: self.next_commit = current_time + self.commit_every self.db.commit() self.dirs_visited += 1 dirnames.sort() filenames.sort() self.skipped_files += remove_excluded_names( filenames, self.compiled_file_excludes) self.skipped_dirs += remove_excluded_names( dirnames, self.compiled_dir_excludes) self.progress("[") self.db.begin() dirid = self.db.get_or_insert_dir(abspath(dirpath)) for fileobj in self.db.file.find(dirid=dirid): if fileobj.name not in filenames: self.progress("d") self.db.file.delete(fileobj) self.deleted_files += 1 start = time.time() for filename in filenames: if start and time.time() > start+self.dir_warn_threshold: self.progress(" %s " % dirpath) start = None self.index_one_file(dirpath, filename, dirid) self.progress("]")
def report_time_used_per_type(self): for i in [1, 2, 3, 4, 5]: time_used = format_time_delta(self.time_per_type[i]) self.progress(" hash type %d used %s\n" % (i, time_used))