Rewrite fHits() in arc_summary.py with SI units

Complete rewrite of fHits(). Move units from non-standard English
abbreviations to SI units, thereby avoiding confusion because of
"long scale" and "short scale" numbers. Remove unused parameter
"Decimal". Add function string. Aim to confirm to PEP8.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Signed-off-by: Scot W. Stevenson <scot.stevenson@gmail.com>
Closes #6815
This commit is contained in:
Scot W. Stevenson 2017-11-04 21:33:28 +01:00 committed by Brian Behlendorf
parent 1c27024e22
commit cd1813d36e

View File

@ -111,36 +111,40 @@ def fBytes(b=0):
return result return result
def fHits(Hits=0, Decimal=2): def fHits(hits=0):
khits = (10 ** 3) """Create a human-readable representation of the number of hits.
mhits = (10 ** 6) The single-letter symbols used are SI to avoid the confusion caused
bhits = (10 ** 9) by the different "short scale" and "long scale" representations in
thits = (10 ** 12) English, which use the same words for different values. See
qhits = (10 ** 15) https://en.wikipedia.org/wiki/Names_of_large_numbers and
Qhits = (10 ** 18) https://physics.nist.gov/cuu/Units/prefixes.html
shits = (10 ** 21) """
Shits = (10 ** 24)
numbers = [
[10**24, 'Y'], # yotta (septillion)
[10**21, 'Z'], # zetta (sextillion)
[10**18, 'E'], # exa (quintrillion)
[10**15, 'P'], # peta (quadrillion)
[10**12, 'T'], # tera (trillion)
[10**9, 'G'], # giga (billion)
[10**6, 'M'], # mega (million)
[10**3, 'k']] # kilo (thousand)
if hits >= 1000:
for limit, symbol in numbers:
if hits >= limit:
value = hits/limit
break
result = "%0.2f%s" % (value, symbol)
if Hits >= Shits:
return str("%0." + str(Decimal) + "f") % (Hits / Shits) + "S"
elif Hits >= shits:
return str("%0." + str(Decimal) + "f") % (Hits / shits) + "s"
elif Hits >= Qhits:
return str("%0." + str(Decimal) + "f") % (Hits / Qhits) + "Q"
elif Hits >= qhits:
return str("%0." + str(Decimal) + "f") % (Hits / qhits) + "q"
elif Hits >= thits:
return str("%0." + str(Decimal) + "f") % (Hits / thits) + "t"
elif Hits >= bhits:
return str("%0." + str(Decimal) + "f") % (Hits / bhits) + "b"
elif Hits >= mhits:
return str("%0." + str(Decimal) + "f") % (Hits / mhits) + "m"
elif Hits >= khits:
return str("%0." + str(Decimal) + "f") % (Hits / khits) + "k"
elif Hits == 0:
return str("%d" % 0)
else: else:
return str("%d" % Hits)
result = "%d" % hits
return result
def fPerc(lVal=0, rVal=0, Decimal=2): def fPerc(lVal=0, rVal=0, Decimal=2):