From f495c8681c6e0a12bea289d2096e7ff9266eaaa6 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 3 Jul 2018 13:11:01 +0200 Subject: [PATCH] CLIFormatter: define some commonly useful rendering functions Signed-off-by: Dietmar Maurer --- src/PVE/CLIFormatter.pm | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/PVE/CLIFormatter.pm b/src/PVE/CLIFormatter.pm index b50464d..867e4e9 100644 --- a/src/PVE/CLIFormatter.pm +++ b/src/PVE/CLIFormatter.pm @@ -10,6 +10,58 @@ use JSON; use utf8; use Encode; +sub render_duration { + my ($duration_in_seconds) = @_; + + my $text = ''; + my $rest = $duration_in_seconds; + + my $step = sub { + my ($unit, $unitlength) = @_; + + if ((my $v = int($rest/$unitlength)) > 0) { + $text .= " " if length($text); + $text .= "${v}${unit}"; + $rest -= $v * $unitlength; + } + }; + + $step->('w', 7*24*3600); + $step->('d', 24*3600); + $step->('h', 3600); + $step->('m', 60); + $step->('s', 1); + + return $text; +} + +PVE::JSONSchema::register_renderer('duration', \&render_duration); + +sub render_fraction_as_percentage { + my ($fraction) = @_; + + return sprintf("%.2f%%", $fraction*100); +} + +PVE::JSONSchema::register_renderer( + 'fraction_as_percentage', \&render_fraction_as_percentage); + +sub render_bytes { + my ($value) = @_; + + my @units = qw(B KiB MiB GiB TiB PiB); + + my $max_unit = 0; + if ($value > 1023) { + $max_unit = int(log($value)/log(1024)); + $value /= 1024**($max_unit); + } + + return sprintf "%.2f $units[$max_unit]", $value; +} + +PVE::JSONSchema::register_renderer('bytes', \&render_bytes); + sub query_terminal_options { my ($options) = @_; -- 2.39.2