Added generate_report() to wk.hw.ddrescue.State()
This commit is contained in:
parent
9171ed6685
commit
43cf4e2727
2 changed files with 55 additions and 1475 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -148,6 +148,10 @@ class BlockPair():
|
|||
# Set initial status
|
||||
self.set_initial_status()
|
||||
|
||||
def get_error_size(self):
|
||||
"""Get error size in bytes, returns int."""
|
||||
return self.size - self.get_rescued_size()
|
||||
|
||||
def get_percent_recovered(self):
|
||||
"""Get percent rescued from map_data, returns float."""
|
||||
return 100 * self.map_data.get('rescued', 0) / self.size
|
||||
|
|
@ -518,16 +522,59 @@ class State():
|
|||
if not std.ask(prompt):
|
||||
raise std.GenericAbort()
|
||||
|
||||
def generate_report(self):
|
||||
"""Generate report of overall and per block_pair results, returns list."""
|
||||
report = []
|
||||
|
||||
# Header
|
||||
report.append(f'{self.mode.title()} Results:')
|
||||
report.append(' ')
|
||||
report.append(f'Source: {self.source.path}')
|
||||
report.append(f'Destination: {self.destination}')
|
||||
|
||||
# Overall
|
||||
report.append(' ')
|
||||
error_size = self.get_error_size()
|
||||
error_size = std.bytes_to_string(error_size, decimals=2)
|
||||
percent = self.get_percent_recovered()
|
||||
percent = format_status_string(percent, width=0)
|
||||
percent = std.strip_colors(percent)
|
||||
report.append(f'Overall rescued: {percent}, error size: {error_size}')
|
||||
|
||||
# Block-Pairs
|
||||
if len(self.block_pairs) > 1:
|
||||
report.append(' ')
|
||||
for pair in self.block_pairs:
|
||||
error_size = pair.get_error_size()
|
||||
error_size = std.bytes_to_string(error_size, decimals=2)
|
||||
pair_size = std.bytes_to_string(pair.size, decimals=2)
|
||||
percent = pair.get_percent_recovered()
|
||||
percent = format_status_string(percent, width=0)
|
||||
percent = std.strip_colors(percent)
|
||||
report.append(
|
||||
f'{pair.source.name} ({pair_size}) rescued: '
|
||||
f'{percent}, error size: {error_size}'
|
||||
)
|
||||
|
||||
# Done
|
||||
return report
|
||||
|
||||
def get_error_size(self):
|
||||
"""Get total error size from block_pairs in bytes, returns int."""
|
||||
return self.get_total_size() - self.get_rescued_size()
|
||||
|
||||
def get_percent_recovered(self):
|
||||
"""Get total percent rescued from block_pairs, returns float."""
|
||||
total_rescued = self.get_rescued_size()
|
||||
total_size = sum([pair.size for pair in self.block_pairs])
|
||||
return 100 * total_rescued / total_size
|
||||
return 100 * self.get_rescued_size() / self.get_total_size()
|
||||
|
||||
def get_rescued_size(self):
|
||||
"""Get total rescued size from all block pairs, returns int."""
|
||||
return sum([pair.get_rescued_size() for pair in self.block_pairs])
|
||||
|
||||
def get_total_size(self):
|
||||
"""Get total size of all block_pairs in bytes, returns int."""
|
||||
return sum([pair.size for pair in self.block_pairs])
|
||||
|
||||
def init_recovery(self, docopt_args):
|
||||
"""Select source/dest and set env."""
|
||||
std.clear_screen()
|
||||
|
|
@ -1640,6 +1687,11 @@ def main():
|
|||
if std.ask('Are you sure you want to quit?'):
|
||||
break
|
||||
|
||||
# Save results to log
|
||||
LOG.info(' ')
|
||||
for line in state.generate_report():
|
||||
LOG.info(line)
|
||||
|
||||
|
||||
def mount_raw_image(path):
|
||||
"""Mount raw image using OS specific methods, returns pathlib.Path."""
|
||||
|
|
|
|||
Loading…
Reference in a new issue